js-waku/examples/web-chat/static/js/main.cac6994b.js.map
status-im-auto 37e2d27002 Updates
2022-02-21 09:57:52 +00:00

1 line
7.4 MiB
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"static/js/main.cac6994b.js","mappings":"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EAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINP,IAAK,CACHxnB,IAAK,EACL+nB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,m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,QACA,OACA,SACA,SACA,UACA,WACA,OACA,UACA,QACA,YACA,OACA,YACA,SACA,OACA,OACA,UACA,SACA,QACA,OACA,OACA,YACA,OACA,SACA,UACA,QACA,MACA,MACA,QACA,QACA,QACA,YACA,YACA,MACA,YACA,WACA,OACA,QACA,QACA,OACA,WACA,WACA,OACA,QACA,QACA,SACA,WACA,SACA,WACA,UACA,SACA,SACA,YAEJxlG,EAAQulG,MAAQ,CACZ,YACA,QACA,SACA,OACA,OACA,OACA,MACA,UACA,OACA,OACA,SACA,OACA,SACA,OACA,OACA,UACA,SACA,OACA,QACA,SACA,MACA,QACA,OACA,QACA,YACA,OACA,MACA,OACA,QACA,OACA,SACA,UACA,UACA,QACA,OACA,WACA,QACA,OACA,WACA,YACA,UACA,QACA,MACA,QACA,OACA,UACA,SACA,QACA,aACA,OACA,QACA,YACA,MACA,OACA,QACA,SACA,OACA,MACA,QACA,QACA,QACA,OACA,QACA,sCCzIJ1uH,OAAOggD,eAAe72B,EAAS,aAAc,CAAElP,OAAO,IACtD,MAAM20G,EAAS5lG,EAAQ,OAUvBG,EAAAA,QANiB,IACYylG,EAAOD,WAAW1wH,KAAKC,MAAMD,KAAKE,SAAWywH,EAAOD,WAAWtyH,SAElD,IADnBuyH,EAAOF,MAAMzwH,KAAKC,MAAMD,KAAKE,SAAWywH,EAAOF,MAAMryH,uCCN5E,IAAIwyH,EAAc7lG,EAAQ,OAC1BhpB,OAAOggD,eAAe72B,EAAS,IAA/BnpB,CAA6CigD,YAAY,EAAMzlD,IAAK,WAAc,OAAOq0H,EAAY/yH,4BCHrG,IAAImS,EAAS+a,EAAAA,OAAAA,OAGb,SAAS6gC,EAAMja,EAAWk/E,GACxB/yH,KAAKmrE,OAASj5D,EAAO0L,MAAMi2B,GAC3B7zC,KAAKgzH,WAAaD,EAClB/yH,KAAKorE,WAAav3B,EAClB7zC,KAAKk2C,KAAO,EAGd4X,EAAKr6C,UAAUqJ,OAAS,SAAU5X,EAAMqV,GAClB,kBAATrV,IACTqV,EAAMA,GAAO,OACbrV,EAAOgN,EAAO5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,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,kEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,sEAINP,IAAK,CACHxnB,IAAK,EACL+nB,OAAQ,CACN,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,iEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,kEACA,oEAEF,CACE,mEACA,mEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF,CACE,mEACA,oEAEF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,WAAY,GACZ,WAAY,GACZ,YAAa,GACb,YAAa,GACb,aAAc,GACd,aAAc,GACd,aAAc,GACd,aAAc,GACd,OAAU,GACV,cAAe,GACf,aAAc,GACd,eAAgB,GAChB,IAAO,IACP,IAAO,IACP,IAAO,IACP,2BAA4B,KAC5B,aAAc,KACd,aAAc,KACd,aAAc,KACd,aAAc,KACd,IAAO,KACP,eAAkB,KAClB,UAAW,MACX,YAAa,MACb,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,YAAa,MACb,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,aAAc,MACd,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,cAAe,MACf,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,eAAgB,MAChB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,KACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB,gBAAiB,MACjB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","sources":["../../../src/index.ts","../../../src/lib/discovery/bootstrap.ts","../../../src/lib/discovery/dns.ts","../../../src/lib/discovery/dns_over_https.ts","../../../src/lib/discovery/enrtree.ts","../../../src/lib/discovery/index.ts","../../../src/lib/discovery/predefined.ts","../../../src/lib/enr/constants.ts","../../../src/lib/enr/create.ts","../../../src/lib/enr/enr.ts","../../../src/lib/enr/index.ts","../../../src/lib/enr/keypair/constants.ts","../../../src/lib/enr/keypair/index.ts","../../../src/lib/enr/keypair/secp256k1.ts","../../../src/lib/enr/keypair/types.ts","../../../src/lib/enr/multiaddrs_codec.ts","../../../src/lib/enr/v4.ts","../../../src/lib/select_peer.ts","../../../src/lib/utf8.ts","../../../src/lib/utils.ts","../../../src/lib/waku.ts","../../../src/lib/waku_light_push/index.ts","../../../src/lib/waku_light_push/push_rpc.ts","../../../src/lib/waku_message/index.ts","../../../src/lib/waku_message/symmetric/browser.ts","../../../src/lib/waku_message/symmetric/index.ts","../../../src/lib/waku_message/symmetric/node.ts","../../../src/lib/waku_message/version_1.ts","../../../src/lib/waku_relay/constants.ts","../../../src/lib/waku_relay/get_relay_peers.ts","../../../src/lib/waku_relay/index.ts","../../../src/lib/waku_relay/relay_heartbeat.ts","../../../src/lib/waku_store/history_rpc.ts","../../../src/lib/waku_store/index.ts","../../../src/proto/index.ts","../../../src/proto/waku/v2/light_push.ts","../../../src/proto/waku/v2/message.ts","../../../src/proto/waku/v2/store.ts","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/node_modules/use-subscription/cjs/use-subscription.production.min.js","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/node_modules/use-subscription/index.js","../node_modules/asn1.js/lib/asn1.js","../node_modules/asn1.js/lib/asn1/api.js","../node_modules/asn1.js/lib/asn1/base/buffer.js","../node_modules/asn1.js/lib/asn1/base/index.js","../node_modules/asn1.js/lib/asn1/base/node.js","../node_modules/asn1.js/lib/asn1/base/reporter.js","../node_modules/asn1.js/lib/asn1/constants/der.js","../node_modules/asn1.js/lib/asn1/constants/index.js","../node_modules/asn1.js/lib/asn1/decoders/der.js","../node_modules/asn1.js/lib/asn1/decoders/index.js","../node_modules/asn1.js/lib/asn1/decoders/pem.js","../node_modules/asn1.js/lib/asn1/encoders/der.js","../node_modules/asn1.js/lib/asn1/encoders/index.js","../node_modules/asn1.js/lib/asn1/encoders/pem.js","../node_modules/asn1.js/node_modules/bn.js/lib/bn.js","../node_modules/base64-js/index.js","../node_modules/bn.js/lib/bn.js","../node_modules/brorand/index.js","../node_modules/browserify-aes/aes.js","../node_modules/browserify-aes/authCipher.js","../node_modules/browserify-aes/browser.js","../node_modules/browserify-aes/decrypter.js","../node_modules/browserify-aes/encrypter.js","../node_modules/browserify-aes/ghash.js","../node_modules/browserify-aes/incr32.js","../node_modules/browserify-aes/modes/cbc.js","../node_modules/browserify-aes/modes/cfb.js","../node_modules/browserify-aes/modes/cfb1.js","../node_modules/browserify-aes/modes/cfb8.js","../node_modules/browserify-aes/modes/ctr.js","../node_modules/browserify-aes/modes/ecb.js","../node_modules/browserify-aes/modes/index.js","../node_modules/browserify-aes/modes/ofb.js","../node_modules/browserify-aes/streamCipher.js","../node_modules/browserify-cipher/browser.js","../node_modules/browserify-des/index.js","../node_modules/browserify-des/modes.js","../node_modules/browserify-rsa/index.js","../node_modules/browserify-sign/algos.js","../node_modules/browserify-sign/browser/index.js","../node_modules/browserify-sign/browser/sign.js","../node_modules/browserify-sign/browser/verify.js","../node_modules/browserify-sign/node_modules/safe-buffer/index.js","../node_modules/buffer-xor/index.js","../node_modules/buffer/index.js","../node_modules/callbag-map/readme.js","../node_modules/callbag-subject/index.js","../node_modules/cipher-base/index.js","../node_modules/create-ecdh/browser.js","../node_modules/create-ecdh/node_modules/bn.js/lib/bn.js","../node_modules/create-hash/browser.js","../node_modules/create-hash/md5.js","../node_modules/create-hmac/browser.js","../node_modules/create-hmac/legacy.js","../node_modules/crypto-browserify/index.js","../node_modules/des.js/lib/des.js","../node_modules/des.js/lib/des/cbc.js","../node_modules/des.js/lib/des/cipher.js","../node_modules/des.js/lib/des/des.js","../node_modules/des.js/lib/des/ede.js","../node_modules/des.js/lib/des/utils.js","../node_modules/diffie-hellman/browser.js","../node_modules/diffie-hellman/lib/dh.js","../node_modules/diffie-hellman/lib/generatePrime.js","../node_modules/diffie-hellman/node_modules/bn.js/lib/bn.js","../node_modules/elliptic/lib/elliptic.js","../node_modules/elliptic/lib/elliptic/curve/base.js","../node_modules/elliptic/lib/elliptic/curve/edwards.js","../node_modules/elliptic/lib/elliptic/curve/index.js","../node_modules/elliptic/lib/elliptic/curve/mont.js","../node_modules/elliptic/lib/elliptic/curve/short.js","../node_modules/elliptic/lib/elliptic/curves.js","../node_modules/elliptic/lib/elliptic/ec/index.js","../node_modules/elliptic/lib/elliptic/ec/key.js","../node_modules/elliptic/lib/elliptic/ec/signature.js","../node_modules/elliptic/lib/elliptic/eddsa/index.js","../node_modules/elliptic/lib/elliptic/eddsa/key.js","../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../node_modules/elliptic/lib/elliptic/utils.js","../node_modules/elliptic/node_modules/bn.js/lib/bn.js","../node_modules/events/events.js","../node_modules/evp_bytestokey/index.js","../node_modules/hash-base/index.js","../node_modules/hash-base/node_modules/safe-buffer/index.js","../node_modules/hash.js/lib/hash.js","../node_modules/hash.js/lib/hash/common.js","../node_modules/hash.js/lib/hash/hmac.js","../node_modules/hash.js/lib/hash/ripemd.js","../node_modules/hash.js/lib/hash/sha.js","../node_modules/hash.js/lib/hash/sha/1.js","../node_modules/hash.js/lib/hash/sha/224.js","../node_modules/hash.js/lib/hash/sha/256.js","../node_modules/hash.js/lib/hash/sha/384.js","../node_modules/hash.js/lib/hash/sha/512.js","../node_modules/hash.js/lib/hash/sha/common.js","../node_modules/hash.js/lib/hash/utils.js","../node_modules/hmac-drbg/lib/hmac-drbg.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js","../node_modules/hoist-non-react-statics/node_modules/react-is/index.js","../node_modules/ieee754/index.js","../node_modules/inherits/inherits_browser.js","../node_modules/md5.js/index.js","../node_modules/miller-rabin/lib/mr.js","../node_modules/miller-rabin/node_modules/bn.js/lib/bn.js","../node_modules/minimalistic-assert/index.js","../node_modules/minimalistic-crypto-utils/lib/utils.js","../node_modules/object-assign/index.js","../node_modules/parse-asn1/asn1.js","../node_modules/parse-asn1/certificate.js","../node_modules/parse-asn1/fixProc.js","../node_modules/parse-asn1/index.js","../node_modules/pbkdf2/browser.js","../node_modules/pbkdf2/lib/async.js","../node_modules/pbkdf2/lib/default-encoding.js","../node_modules/pbkdf2/lib/precondition.js","../node_modules/pbkdf2/lib/sync-browser.js","../node_modules/pbkdf2/lib/to-buffer.js","../node_modules/process/browser.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/public-encrypt/browser.js","../node_modules/public-encrypt/mgf.js","../node_modules/public-encrypt/node_modules/bn.js/lib/bn.js","../node_modules/public-encrypt/privateDecrypt.js","../node_modules/public-encrypt/publicEncrypt.js","../node_modules/public-encrypt/withPublic.js","../node_modules/public-encrypt/xor.js","../node_modules/randombytes/browser.js","../node_modules/randomfill/browser.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/readable-stream/errors-browser.js","../node_modules/readable-stream/lib/_stream_duplex.js","../node_modules/readable-stream/lib/_stream_passthrough.js","../node_modules/readable-stream/lib/_stream_readable.js","../node_modules/readable-stream/lib/_stream_transform.js","../node_modules/readable-stream/lib/_stream_writable.js","../node_modules/readable-stream/lib/internal/streams/async_iterator.js","../node_modules/readable-stream/lib/internal/streams/buffer_list.js","../node_modules/readable-stream/lib/internal/streams/destroy.js","../node_modules/readable-stream/lib/internal/streams/end-of-stream.js","../node_modules/readable-stream/lib/internal/streams/from-browser.js","../node_modules/readable-stream/lib/internal/streams/pipeline.js","../node_modules/readable-stream/lib/internal/streams/state.js","../node_modules/readable-stream/lib/internal/streams/stream-browser.js","../node_modules/readable-stream/readable-browser.js","../node_modules/ripemd160/index.js","../node_modules/safe-buffer/index.js","../node_modules/safer-buffer/safer.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/server-name-generator/lib/data.js","../node_modules/server-name-generator/lib/generator.js","../node_modules/server-name-generator/lib/index.js","../node_modules/sha.js/hash.js","../node_modules/sha.js/index.js","../node_modules/sha.js/sha.js","../node_modules/sha.js/sha1.js","../node_modules/sha.js/sha224.js","../node_modules/sha.js/sha256.js","../node_modules/sha.js/sha384.js","../node_modules/sha.js/sha512.js","../node_modules/stream-browserify/index.js","../node_modules/string_decoder/lib/string_decoder.js","../node_modules/string_decoder/node_modules/safe-buffer/index.js","../node_modules/util-deprecate/browser.js","../../../node_modules/@chainsafe/libp2p-noise/src/constants.ts","../../../node_modules/@chainsafe/libp2p-noise/src/crypto.ts","../../../node_modules/@chainsafe/libp2p-noise/src/encoder.ts","../../../node_modules/@chainsafe/libp2p-noise/src/errors.ts","../../../node_modules/@chainsafe/libp2p-noise/src/handshake-ik.ts","../../../node_modules/@chainsafe/libp2p-noise/src/handshake-xx-fallback.ts","../../../node_modules/@chainsafe/libp2p-noise/src/handshake-xx.ts","../../../node_modules/@chainsafe/libp2p-noise/src/handshakes/abstract-handshake.ts","../../../node_modules/@chainsafe/libp2p-noise/src/handshakes/ik.ts","../../../node_modules/@chainsafe/libp2p-noise/src/handshakes/xx.ts","../../../node_modules/@chainsafe/libp2p-noise/src/keycache.ts","../../../node_modules/@chainsafe/libp2p-noise/src/logger.ts","../../../node_modules/@chainsafe/libp2p-noise/src/noise.ts","../../../node_modules/@chainsafe/libp2p-noise/src/proto/payload.js","../../../node_modules/@chainsafe/libp2p-noise/src/utils.ts","../../../node_modules/@ethersproject/logger/src.ts/index.ts","../../../node_modules/@ethersproject/logger/src.ts/_version.ts","../../../node_modules/@ethersproject/bytes/src.ts/_version.ts","../../../node_modules/@ethersproject/bytes/src.ts/index.ts","../../../node_modules/@ethersproject/rlp/src.ts/_version.ts","../../../node_modules/@ethersproject/rlp/src.ts/index.ts","../../../node_modules/@leichtgewicht/ip-codec/index.js","../../../node_modules/@multiformats/base-x/src/index.js","../../../node_modules/@noble/ed25519/lib/index.js","../../../node_modules/@noble/secp256k1/lib/index.js","../../../node_modules/@protobufjs/aspromise/index.js","../../../node_modules/@protobufjs/base64/index.js","../../../node_modules/@protobufjs/eventemitter/index.js","../../../node_modules/@protobufjs/float/index.js","../../../node_modules/@protobufjs/inquire/index.js","../../../node_modules/@protobufjs/pool/index.js","../../../node_modules/@protobufjs/utf8/index.js","../../../node_modules/@stablelib/binary/binary.ts","../../../node_modules/@stablelib/chacha/chacha.ts","../../../node_modules/@stablelib/chacha20poly1305/chacha20poly1305.ts","../../../node_modules/@stablelib/constant-time/constant-time.ts","../../../node_modules/@stablelib/hash/hash.ts","../../../node_modules/@stablelib/hkdf/hkdf.ts","../../../node_modules/@stablelib/hmac/hmac.ts","../../../node_modules/@stablelib/int/int.ts","../../../node_modules/@stablelib/poly1305/poly1305.ts","../../../node_modules/@stablelib/random/random.ts","../../../node_modules/@stablelib/random/source/browser.ts","../../../node_modules/@stablelib/random/source/node.ts","../../../node_modules/@stablelib/random/source/system.ts","../../../node_modules/@stablelib/sha256/sha256.ts","../../../node_modules/@stablelib/wipe/wipe.ts","../../../node_modules/@stablelib/x25519/x25519.ts","../../../node_modules/@vascosantos/moving-average/index.js","../../../node_modules/abort-controller/browser.js","../../../node_modules/abortable-iterator/AbortError.js","../../../node_modules/abortable-iterator/index.js","../../../node_modules/aggregate-error/index.js","../../../node_modules/assert/build/assert.js","../../../node_modules/assert/build/internal/assert/assertion_error.js","../../../node_modules/assert/build/internal/errors.js","../../../node_modules/assert/build/internal/util/comparisons.js","../../../node_modules/base64-js/index.js","../../../node_modules/bignumber.js/bignumber.js","../../../node_modules/bl/BufferList.js","../../../node_modules/bn.js/lib/bn.js","../../../node_modules/brorand/index.js","../../../node_modules/buffer/index.js","../../../node_modules/call-bind/callBound.js","../../../node_modules/call-bind/index.js","../../../node_modules/class-is/index.js","../../../node_modules/clean-stack/index.js","../../../node_modules/debug/src/browser.js","../../../node_modules/debug/src/common.js","../../../node_modules/define-properties/index.js","../../../node_modules/denque/index.js","../../../node_modules/dns-over-http-resolver/src/index.js","../../../node_modules/dns-over-http-resolver/src/utils.js","../../../node_modules/dns-packet/classes.js","../../../node_modules/dns-packet/index.js","../../../node_modules/dns-packet/opcodes.js","../../../node_modules/dns-packet/optioncodes.js","../../../node_modules/dns-packet/rcodes.js","../../../node_modules/dns-packet/types.js","../../../node_modules/dns-query/common.js","../../../node_modules/dns-query/index.js","../../../node_modules/dns-query/lib.browser.js","../../../node_modules/ecies-geth/dist/lib/src/typescript/browser.js","../../../node_modules/ecies-geth/dist/lib/src/typescript/model.js","../../../node_modules/elliptic/lib/elliptic.js","../../../node_modules/elliptic/lib/elliptic/curve/base.js","../../../node_modules/elliptic/lib/elliptic/curve/edwards.js","../../../node_modules/elliptic/lib/elliptic/curve/index.js","../../../node_modules/elliptic/lib/elliptic/curve/mont.js","../../../node_modules/elliptic/lib/elliptic/curve/short.js","../../../node_modules/elliptic/lib/elliptic/curves.js","../../../node_modules/elliptic/lib/elliptic/ec/index.js","../../../node_modules/elliptic/lib/elliptic/ec/key.js","../../../node_modules/elliptic/lib/elliptic/ec/signature.js","../../../node_modules/elliptic/lib/elliptic/eddsa/index.js","../../../node_modules/elliptic/lib/elliptic/eddsa/key.js","../../../node_modules/elliptic/lib/elliptic/eddsa/signature.js","../../../node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","../../../node_modules/elliptic/lib/elliptic/utils.js","../../../node_modules/err-code/index.js","../../../node_modules/es6-object-assign/index.js","../../../node_modules/es6-promisify/dist/promisify.js","../../../node_modules/event-iterator/lib/dom.js","../../../node_modules/event-iterator/lib/event-iterator.js","../../../node_modules/eventemitter3/index.js","../../../node_modules/events/events.js","../../../node_modules/fast-fifo/fixed-size.js","../../../node_modules/fast-fifo/index.js","../../../node_modules/foreach/index.js","../../../node_modules/function-bind/implementation.js","../../../node_modules/function-bind/index.js","../../../node_modules/get-intrinsic/index.js","../../../node_modules/get-iterator/index.js","../../../node_modules/has-symbols/index.js","../../../node_modules/has-symbols/shams.js","../../../node_modules/has/src/index.js","../../../node_modules/hash.js/lib/hash.js","../../../node_modules/hash.js/lib/hash/common.js","../../../node_modules/hash.js/lib/hash/hmac.js","../../../node_modules/hash.js/lib/hash/ripemd.js","../../../node_modules/hash.js/lib/hash/sha.js","../../../node_modules/hash.js/lib/hash/sha/1.js","../../../node_modules/hash.js/lib/hash/sha/224.js","../../../node_modules/hash.js/lib/hash/sha/256.js","../../../node_modules/hash.js/lib/hash/sha/384.js","../../../node_modules/hash.js/lib/hash/sha/512.js","../../../node_modules/hash.js/lib/hash/sha/common.js","../../../node_modules/hash.js/lib/hash/utils.js","../../../node_modules/hashlru/index.js","../../../node_modules/hi-base32/src/base32.js","../../../node_modules/hmac-drbg/lib/hmac-drbg.js","../../../node_modules/ieee754/index.js","../../../node_modules/indent-string/index.js","../../../node_modules/inherits/inherits_browser.js","../../../ip-address.ts","../../../../lib/address-error.ts","../../../../lib/common.ts","../../../../lib/ipv4.ts","../../../../lib/ipv6.ts","../../../../../lib/v4/constants.ts","../../../../../lib/v6/constants.ts","../../../../../lib/v6/helpers.ts","../../../../../lib/v6/regular-expressions.ts","../../../node_modules/ip-address/node_modules/sprintf-js/src/sprintf.js","../../../node_modules/ip-regex/index.js","../../../node_modules/ipfs-utils/src/env.js","../../../node_modules/is-arguments/index.js","../../../node_modules/is-electron/index.js","../../../node_modules/is-generator-function/index.js","../../../node_modules/is-ip/index.js","../../../node_modules/is-loopback-addr/index.js","../../../node_modules/is-nan/implementation.js","../../../node_modules/is-nan/index.js","../../../node_modules/is-nan/polyfill.js","../../../node_modules/is-nan/shim.js","../../../node_modules/is-plain-obj/index.js","../../../node_modules/is-typed-array/index.js","../../../node_modules/iso-random-stream/src/random.browser.js","../../../node_modules/iso-url/index.js","../../../node_modules/iso-url/src/relative.js","../../../node_modules/iso-url/src/url-browser.js","../../../node_modules/it-all/index.js","../../../node_modules/it-buffer/index.js","../../../node_modules/it-concat/index.js","../../../node_modules/it-drain/index.js","../../../node_modules/it-filter/index.js","../../../node_modules/it-first/index.js","../../../node_modules/it-foreach/index.js","../../../node_modules/it-handshake/src/index.js","../../../node_modules/it-length-prefixed/src/decode.js","../../../node_modules/it-length-prefixed/src/encode.js","../../../node_modules/it-length-prefixed/src/index.js","../../../node_modules/it-length-prefixed/src/int32BE-decode.js","../../../node_modules/it-length-prefixed/src/int32BE-encode.js","../../../node_modules/it-length-prefixed/src/varint-decode.js","../../../node_modules/it-length-prefixed/src/varint-encode.js","../../../node_modules/it-map/index.js","../../../node_modules/it-merge/index.js","../../../node_modules/it-pair/duplex.js","../../../node_modules/it-pair/index.js","../../../node_modules/it-pb-rpc/src/index.js","../../../node_modules/it-pipe/index.js","../../../node_modules/it-pushable/index.js","../../../node_modules/it-reader/index.js","../../../node_modules/it-sort/index.js","../../../node_modules/it-take/index.js","../../../node_modules/it-ws/client.js","../../../node_modules/it-ws/duplex.js","../../../node_modules/it-ws/ready.js","../../../node_modules/it-ws/sink.js","../../../node_modules/it-ws/source.js","../../../node_modules/it-ws/web-socket.js","../../../node_modules/it-ws/ws-url.js","../../../node_modules/js-sha3/src/sha3.js","../../../node_modules/jsbn/index.js","../../../node_modules/libp2p-bootstrap/src/index.js","../../../node_modules/libp2p-crypto/src/aes/cipher-mode.js","../../../node_modules/libp2p-crypto/src/aes/ciphers-browser.js","../../../node_modules/libp2p-crypto/src/aes/index.js","../../../node_modules/libp2p-crypto/src/ciphers/aes-gcm.browser.js","../../../node_modules/libp2p-crypto/src/hmac/index-browser.js","../../../node_modules/libp2p-crypto/src/hmac/lengths.js","../../../node_modules/libp2p-crypto/src/index.js","../../../node_modules/libp2p-crypto/src/keys/ecdh-browser.js","../../../node_modules/libp2p-crypto/src/keys/ed25519-class.js","../../../node_modules/libp2p-crypto/src/keys/ed25519.js","../../../node_modules/libp2p-crypto/src/keys/ephemeral-keys.js","../../../node_modules/libp2p-crypto/src/keys/exporter.js","../../../node_modules/libp2p-crypto/src/keys/importer.js","../../../node_modules/libp2p-crypto/src/keys/index.js","../../../node_modules/libp2p-crypto/src/keys/jwk2pem.js","../../../node_modules/libp2p-crypto/src/keys/key-stretcher.js","../../../node_modules/libp2p-crypto/src/keys/keys.js","../../../node_modules/libp2p-crypto/src/keys/rsa-browser.js","../../../node_modules/libp2p-crypto/src/keys/rsa-class.js","../../../node_modules/libp2p-crypto/src/keys/rsa-utils.js","../../../node_modules/libp2p-crypto/src/keys/secp256k1-class.js","../../../node_modules/libp2p-crypto/src/keys/secp256k1.js","../../../node_modules/libp2p-crypto/src/keys/validate-curve-type.js","../../../node_modules/libp2p-crypto/src/pbkdf2.js","../../../node_modules/libp2p-crypto/src/random-bytes.js","../../../node_modules/libp2p-crypto/src/util.js","../../../node_modules/libp2p-crypto/src/webcrypto.js","../../../node_modules/libp2p-gossipsub/src/constants.js","../../../node_modules/libp2p-gossipsub/src/get-gossip-peers.js","../../../node_modules/libp2p-gossipsub/src/heartbeat.js","../../../node_modules/libp2p-gossipsub/src/index.js","../../../node_modules/libp2p-gossipsub/src/message-cache.js","../../../node_modules/libp2p-gossipsub/src/message/rpc.js","../../../node_modules/libp2p-gossipsub/src/score/compute-score.js","../../../node_modules/libp2p-gossipsub/src/score/constants.js","../../../node_modules/libp2p-gossipsub/src/score/index.js","../../../node_modules/libp2p-gossipsub/src/score/message-deliveries.js","../../../node_modules/libp2p-gossipsub/src/score/peer-score-params.js","../../../node_modules/libp2p-gossipsub/src/score/peer-score-thresholds.js","../../../node_modules/libp2p-gossipsub/src/score/peer-score.js","../../../node_modules/libp2p-gossipsub/src/score/peer-stats.js","../../../node_modules/libp2p-gossipsub/src/tracer.js","../../../node_modules/libp2p-gossipsub/src/utils/create-gossip-rpc.js","../../../node_modules/libp2p-gossipsub/src/utils/has-gossip-protocol.js","../../../node_modules/libp2p-gossipsub/src/utils/index.js","../../../node_modules/libp2p-gossipsub/src/utils/messageIdToString.js","../../../node_modules/libp2p-gossipsub/src/utils/shuffle.js","../../../node_modules/libp2p-gossipsub/src/utils/time-cache.js","../../../node_modules/libp2p-interfaces/src/connection/connection.js","../../../node_modules/libp2p-interfaces/src/connection/index.js","../../../node_modules/libp2p-interfaces/src/connection/status.js","../../../node_modules/libp2p-interfaces/src/pubsub/errors.js","../../../node_modules/libp2p-interfaces/src/pubsub/index.js","../../../node_modules/libp2p-interfaces/src/pubsub/message/rpc.js","../../../node_modules/libp2p-interfaces/src/pubsub/message/sign.js","../../../node_modules/libp2p-interfaces/src/pubsub/peer-streams.js","../../../node_modules/libp2p-interfaces/src/pubsub/signature-policy.js","../../../node_modules/libp2p-interfaces/src/pubsub/utils.js","../../../node_modules/libp2p-interfaces/src/topology/index.js","../../../node_modules/libp2p-interfaces/src/topology/multicodec-topology.js","../../../node_modules/libp2p-mplex/src/coder/decode.js","../../../node_modules/libp2p-mplex/src/coder/encode.browser.js","../../../node_modules/libp2p-mplex/src/coder/index.js","../../../node_modules/libp2p-mplex/src/index.js","../../../node_modules/libp2p-mplex/src/message-types.js","../../../node_modules/libp2p-mplex/src/mplex.js","../../../node_modules/libp2p-mplex/src/restrict-size.js","../../../node_modules/libp2p-mplex/src/stream.js","../../../node_modules/libp2p-utils/src/address-sort.js","../../../node_modules/libp2p-utils/src/array-equals.js","../../../node_modules/libp2p-utils/src/ip-port-to-multiaddr.js","../../../node_modules/libp2p-utils/src/multiaddr/is-loopback.js","../../../node_modules/libp2p-utils/src/multiaddr/is-private.js","../../../node_modules/libp2p-utils/src/stream-to-ma-conn.js","../../../node_modules/libp2p-websockets/src/constants.js","../../../node_modules/libp2p-websockets/src/filters.js","../../../node_modules/libp2p-websockets/src/index.js","../../../node_modules/libp2p-websockets/src/listener.browser.js","../../../node_modules/libp2p-websockets/src/socket-to-conn.js","../../../node_modules/libp2p/node_modules/any-signal/index.js","../../../node_modules/libp2p/node_modules/streaming-iterables/dist/index.js","../../../node_modules/libp2p/src/address-manager/index.js","../../../node_modules/libp2p/src/circuit/auto-relay.js","../../../node_modules/libp2p/src/circuit/circuit/hop.js","../../../node_modules/libp2p/src/circuit/circuit/stop.js","../../../node_modules/libp2p/src/circuit/circuit/stream-handler.js","../../../node_modules/libp2p/src/circuit/circuit/utils.js","../../../node_modules/libp2p/src/circuit/constants.js","../../../node_modules/libp2p/src/circuit/index.js","../../../node_modules/libp2p/src/circuit/listener.js","../../../node_modules/libp2p/src/circuit/multicodec.js","../../../node_modules/libp2p/src/circuit/protocol/index.js","../../../node_modules/libp2p/src/circuit/transport.js","../../../node_modules/libp2p/src/circuit/utils.js","../../../node_modules/libp2p/src/config.js","../../../node_modules/libp2p/src/connection-manager/auto-dialler.js","../../../node_modules/libp2p/src/connection-manager/index.js","../../../node_modules/libp2p/src/connection-manager/latency-monitor.js","../../../node_modules/libp2p/src/connection-manager/visibility-change-emitter.js","../../../node_modules/libp2p/src/constants.js","../../../node_modules/libp2p/src/content-routing/index.js","../../../node_modules/libp2p/src/content-routing/utils.js","../../../node_modules/libp2p/src/dht/dht-content-routing.js","../../../node_modules/libp2p/src/dht/dht-peer-routing.js","../../../node_modules/libp2p/src/dialer/dial-request.js","../../../node_modules/libp2p/src/dialer/index.js","../../../node_modules/libp2p/src/errors.js","../../../node_modules/libp2p/src/fetch/constants.js","../../../node_modules/libp2p/src/fetch/index.js","../../../node_modules/libp2p/src/fetch/proto.js","../../../node_modules/libp2p/src/get-peer.js","../../../node_modules/libp2p/src/identify/consts.js","../../../node_modules/libp2p/src/identify/index.js","../../../node_modules/libp2p/src/identify/message.js","../../../node_modules/libp2p/src/index.js","../../../node_modules/libp2p/src/keychain/cms.js","../../../node_modules/libp2p/src/keychain/index.js","../../../node_modules/libp2p/src/keychain/util.js","../../../node_modules/libp2p/src/metrics/index.js","../../../node_modules/libp2p/src/metrics/old-peers.js","../../../node_modules/libp2p/src/metrics/stats.js","../../../node_modules/libp2p/src/metrics/tracked-map.js","../../../node_modules/libp2p/src/nat-manager.js","../../../node_modules/libp2p/src/peer-routing.js","../../../node_modules/libp2p/src/peer-store/address-book.js","../../../node_modules/libp2p/src/peer-store/index.js","../../../node_modules/libp2p/src/peer-store/key-book.js","../../../node_modules/libp2p/src/peer-store/metadata-book.js","../../../node_modules/libp2p/src/peer-store/pb/peer.js","../../../node_modules/libp2p/src/peer-store/proto-book.js","../../../node_modules/libp2p/src/peer-store/store.js","../../../node_modules/libp2p/src/ping/constants.js","../../../node_modules/libp2p/src/ping/index.js","../../../node_modules/libp2p/src/pubsub-adapter.js","../../../node_modules/libp2p/src/record/envelope/envelope.js","../../../node_modules/libp2p/src/record/envelope/index.js","../../../node_modules/libp2p/src/record/peer-record/consts.js","../../../node_modules/libp2p/src/record/peer-record/index.js","../../../node_modules/libp2p/src/record/peer-record/peer-record.js","../../../node_modules/libp2p/src/record/utils.js","../../../node_modules/libp2p/src/registrar.js","../../../node_modules/libp2p/src/transport-manager.js","../../../node_modules/libp2p/src/upgrader.js","../../../node_modules/long/src/long.js","../../../node_modules/mafmt/src/index.js","../../../node_modules/merge-options/index.js","../../../node_modules/minimalistic-assert/index.js","../../../node_modules/minimalistic-crypto-utils/lib/utils.js","../../../node_modules/mortice/lib/browser.js","../../../node_modules/mortice/lib/constants.js","../../../node_modules/mortice/lib/index.js","../../../node_modules/mortice/lib/node.js","../../../node_modules/ms/index.js","../../../node_modules/multiaddr-to-uri/index.js","../../../node_modules/multiaddr/src/codec.js","../../../node_modules/multiaddr/src/convert.js","../../../node_modules/multiaddr/src/index.js","../../../node_modules/multiaddr/src/ip.js","../../../node_modules/multiaddr/src/protocols-table.js","../../../node_modules/multiaddr/src/resolvers/dns.browser.js","../../../node_modules/multiaddr/src/resolvers/index.js","../../../node_modules/multibase/src/base.js","../../../node_modules/multibase/src/constants.js","../../../node_modules/multibase/src/index.js","../../../node_modules/multibase/src/rfc4648.js","../../../node_modules/multibase/src/util.js","../../../node_modules/multihashes/node_modules/varint/decode.js","../../../node_modules/multihashes/node_modules/varint/encode.js","../../../node_modules/multihashes/node_modules/varint/index.js","../../../node_modules/multihashes/node_modules/varint/length.js","../../../node_modules/multihashes/src/constants.js","../../../node_modules/multihashes/src/index.js","../../../node_modules/multistream-select/src/constants.js","../../../node_modules/multistream-select/src/handle.js","../../../node_modules/multistream-select/src/index.js","../../../node_modules/multistream-select/src/ls.js","../../../node_modules/multistream-select/src/multistream.js","../../../node_modules/multistream-select/src/select.js","../../../node_modules/mutable-proxy/build/index.js","../../../node_modules/native-fetch/src/index.js","../../../node_modules/netmask/lib/netmask.js","../../../node_modules/node-fetch/browser.js","../../../node_modules/node-forge/lib/aes.js","../../../node_modules/node-forge/lib/asn1.js","../../../node_modules/node-forge/lib/baseN.js","../../../node_modules/node-forge/lib/cipher.js","../../../node_modules/node-forge/lib/cipherModes.js","../../../node_modules/node-forge/lib/des.js","../../../node_modules/node-forge/lib/forge.js","../../../node_modules/node-forge/lib/hmac.js","../../../node_modules/node-forge/lib/jsbn.js","../../../node_modules/node-forge/lib/md.js","../../../node_modules/node-forge/lib/mgf.js","../../../node_modules/node-forge/lib/mgf1.js","../../../node_modules/node-forge/lib/oids.js","../../../node_modules/node-forge/lib/pbe.js","../../../node_modules/node-forge/lib/pbkdf2.js","../../../node_modules/node-forge/lib/pem.js","../../../node_modules/node-forge/lib/pkcs1.js","../../../node_modules/node-forge/lib/pkcs7.js","../../../node_modules/node-forge/lib/pkcs7asn1.js","../../../node_modules/node-forge/lib/prime.js","../../../node_modules/node-forge/lib/prng.js","../../../node_modules/node-forge/lib/pss.js","../../../node_modules/node-forge/lib/random.js","../../../node_modules/node-forge/lib/rc2.js","../../../node_modules/node-forge/lib/rsa.js","../../../node_modules/node-forge/lib/sha1.js","../../../node_modules/node-forge/lib/sha256.js","../../../node_modules/node-forge/lib/sha512.js","../../../node_modules/node-forge/lib/util.js","../../../node_modules/node-forge/lib/x509.js","../../../node_modules/object-is/implementation.js","../../../node_modules/object-is/index.js","../../../node_modules/object-is/polyfill.js","../../../node_modules/object-is/shim.js","../../../node_modules/object-keys/implementation.js","../../../node_modules/object-keys/index.js","../../../node_modules/object-keys/isArguments.js","../../../node_modules/observable-webworkers/lib/index.js","../../../node_modules/p-any/index.js","../../../node_modules/p-cancelable/index.js","../../../node_modules/p-defer/index.js","../../../node_modules/p-fifo/index.js","../../../node_modules/p-finally/index.js","../../../node_modules/p-queue/dist/index.js","../../../node_modules/p-queue/dist/lower-bound.js","../../../node_modules/p-queue/dist/priority-queue.js","../../../node_modules/p-queue/node_modules/p-timeout/index.js","../../../node_modules/p-reflect/index.js","../../../node_modules/p-retry/index.js","../../../node_modules/p-settle/index.js","../../../node_modules/p-settle/node_modules/p-limit/index.js","../../../node_modules/p-some/index.js","../../../node_modules/p-timeout/index.js","../../../node_modules/p-try/index.js","../../../node_modules/peer-id/src/index.js","../../../node_modules/peer-id/src/proto.js","../../../node_modules/private-ip/index.js","../../../node_modules/private-ip/lib/index.js","../../../node_modules/process/browser.js","../../../node_modules/promise-timeout/index.js","../../../node_modules/protobufjs/minimal.js","../../../node_modules/protobufjs/src/index-minimal.js","../../../node_modules/protobufjs/src/reader.js","../../../node_modules/protobufjs/src/reader_buffer.js","../../../node_modules/protobufjs/src/roots.js","../../../node_modules/protobufjs/src/rpc.js","../../../node_modules/protobufjs/src/rpc/service.js","../../../node_modules/protobufjs/src/util/longbits.js","../../../node_modules/protobufjs/src/util/minimal.js","../../../node_modules/protobufjs/src/writer.js","../../../node_modules/protobufjs/src/writer_buffer.js","../../../node_modules/receptacle/index.js","../../../node_modules/retimer/retimer.js","../../../node_modules/retimer/time-browser.js","../../../node_modules/retry/index.js","../../../node_modules/retry/lib/retry.js","../../../node_modules/retry/lib/retry_operation.js","../../../node_modules/sanitize-filename/index.js","../../../node_modules/secp256k1/elliptic.js","../../../node_modules/secp256k1/lib/elliptic.js","../../../node_modules/secp256k1/lib/index.js","../../../node_modules/set-delayed-interval/src/index.js","../../../node_modules/timeout-abort-controller/index.js","../../../node_modules/truncate-utf8-bytes/browser.js","../../../node_modules/truncate-utf8-bytes/lib/truncate.js","../../../node_modules/utf8-byte-length/browser.js","../../../node_modules/util/support/isBufferBrowser.js","../../../node_modules/util/support/types.js","../../../node_modules/util/util.js","../../../node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/uuid/dist/esm-browser/v1.js","../../../node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/uuid/dist/esm-browser/v35.js","../../../node_modules/uuid/dist/esm-browser/md5.js","../../../node_modules/uuid/dist/esm-browser/v3.js","../../../node_modules/uuid/dist/esm-browser/v4.js","../../../node_modules/uuid/dist/esm-browser/sha1.js","../../../node_modules/uuid/dist/esm-browser/v5.js","../../../node_modules/uuid/dist/esm-browser/nil.js","../../../node_modules/uuid/dist/esm-browser/version.js","../../../node_modules/varint/decode.js","../../../node_modules/varint/encode.js","../../../node_modules/varint/index.js","../../../node_modules/varint/length.js","../../../node_modules/wherearewe/src/index.js","../../../node_modules/which-typed-array/index.js","../../../node_modules/available-typed-arrays/index.js","../../../node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","../../../node_modules/datastore-core/esm/src/utils.js","../../../node_modules/datastore-core/esm/src/memory.js","../../../node_modules/datastore-core/esm/src/base.js","../../../node_modules/datastore-core/esm/src/errors.js","../../../node_modules/interface-datastore/esm/src/key.js","../../../node_modules/multiformats/esm/vendor/base-x.js","../../../node_modules/multiformats/esm/src/bases/base.js","../../../node_modules/multiformats/esm/src/bases/base16.js","../../../node_modules/multiformats/esm/src/bases/base32.js","../../../node_modules/multiformats/esm/src/bases/base36.js","../../../node_modules/multiformats/esm/src/bases/base58.js","../../../node_modules/multiformats/esm/src/bases/base64.js","../../../node_modules/multiformats/esm/src/bytes.js","../../../node_modules/multiformats/esm/src/cid.js","../../../node_modules/multiformats/esm/src/hashes/digest.js","../../../node_modules/multiformats/esm/src/hashes/hasher.js","../../../node_modules/multiformats/esm/src/hashes/identity.js","../../../node_modules/multiformats/esm/src/hashes/sha2-browser.js","../../../node_modules/multiformats/esm/vendor/varint.js","../../../node_modules/multiformats/esm/src/varint.js","../../../node_modules/nanoid/url-alphabet/index.js","../../../node_modules/nanoid/index.prod.js","../../../node_modules/uint8arrays/esm/src/concat.js","../../../node_modules/uint8arrays/esm/src/equals.js","../../../node_modules/uint8arrays/esm/src/from-string.js","../../../node_modules/uint8arrays/esm/src/compare.js","../../../node_modules/uint8arrays/esm/src/xor.js","../../../node_modules/uint8arrays/esm/src/to-string.js","../../../node_modules/multiformats/esm/src/bases/identity.js","../../../node_modules/multiformats/esm/src/bases/base2.js","../../../node_modules/multiformats/esm/src/bases/base8.js","../../../node_modules/multiformats/esm/src/bases/base10.js","../../../node_modules/multiformats/esm/src/codecs/raw.js","../../../node_modules/multiformats/esm/src/codecs/json.js","../../../node_modules/multiformats/esm/src/basics.js","../../../node_modules/uint8arrays/esm/src/util/bases.js","../webpack/bootstrap","../webpack/runtime/amd options","../webpack/runtime/compat get default export","../webpack/runtime/define property getters","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/make namespace object","../webpack/runtime/node module decorator","command.ts","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@emotion/memoize/dist/emotion-memoize.browser.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.browser.esm.js","../node_modules/@emotion/sheet/dist/emotion-sheet.browser.esm.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Prefixer.js","../node_modules/stylis/src/Parser.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/weak-memoize/dist/weak-memoize.browser.esm.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/hash/dist/hash.browser.esm.js","../node_modules/@emotion/unitless/dist/unitless.browser.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.browser.esm.js","../node_modules/@livechat/ui-kit/node_modules/@emotion/react/dist/emotion-element-699e6908.browser.esm.js","../node_modules/@livechat/ui-kit/node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@livechat/ui-kit/node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/@livechat/data-utils/dist/data-utils.es.js","../node_modules/@livechat/ui-kit/node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/@livechat/ui-kit/node_modules/react-transition-group/esm/config.js","../node_modules/@livechat/ui-kit/node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/@livechat/ui-kit/node_modules/react-transition-group/esm/Transition.js","../node_modules/dom-helpers/esm/removeClass.js","../node_modules/@livechat/ui-kit/node_modules/react-transition-group/esm/CSSTransition.js","../node_modules/dom-helpers/esm/addClass.js","../node_modules/dom-helpers/esm/hasClass.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@livechat/ui-kit/node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/@livechat/ui-kit/node_modules/react-transition-group/esm/TransitionGroup.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js","../node_modules/clsx/dist/clsx.m.js","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useLayoutEffect.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useId.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/chain.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/mergeProps.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/filterDOMProps.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/focusWithoutScrolling.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/runAfterTransition.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useSyncRef.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useViewportSize.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useDescription.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/platform.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/textSelection.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/utils.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/context.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/usePress.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useGlobalListeners.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocusVisible.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/createEventHandler.ts","../node_modules/@livechat/ui-kit/node_modules/use-composed-ref/dist/use-composed-ref.esm.js","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/node_modules/use-latest/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/node_modules/use-latest/dist/use-latest.esm.js","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/node_modules/use-onclickoutside/dist/use-onclickoutside.browser.esm.js","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/node_modules/use-previous/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/style-value-types/node_modules/tslib/tslib.es6.js","../node_modules/style-value-types/dist/style-value-types.es.js","../node_modules/framesync/dist/framesync.es.js","../node_modules/@popmotion/popcorn/dist/popcorn.es.js","../node_modules/@livechat/dom-utils/dist/dom-utils.es.js","../node_modules/@livechat/ui-kit/node_modules/@livechat/react-hooks/dist/react-hooks.esm.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/construct.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js","../javascript/esm|/home/jenkins/workspace/website/js-waku.wakuconnect.dev/examples/web-chat/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js","../node_modules/polished/dist/polished.esm.js","../node_modules/@livechat/ui-kit/node_modules/@react-aria/button/node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/FocusScope.tsx","../node_modules/@livechat/ui-kit/node_modules/@react-aria/button/node_modules/@react-aria/focus/dist/packages/@react-aria/focus/src/useFocusable.tsx","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useFocus.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/interactions/dist/packages/@react-aria/interactions/src/useKeyboard.ts","../node_modules/@livechat/ui-kit/node_modules/@react-aria/button/dist/packages/@react-aria/button/src/useButton.ts","../node_modules/@livechat/ui-kit/node_modules/react-textarea-autosize/node_modules/use-latest/node_modules/use-isomorphic-layout-effect/dist/use-isomorphic-layout-effect.browser.esm.js","../node_modules/@livechat/ui-kit/node_modules/react-textarea-autosize/node_modules/use-latest/dist/use-latest.esm.js","../node_modules/@livechat/ui-kit/node_modules/react-textarea-autosize/dist/react-textarea-autosize.browser.esm.js","../node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js","ChatList.tsx","WakuContext.ts","MessageInput.tsx","proto/chat_message.ts","chat_message.ts","Room.tsx","Message.ts","App.tsx","index.tsx"],"sourcesContent":["export { getPredefinedBootstrapNodes } from \"./lib/discovery\";\nexport * as discovery from \"./lib/discovery\";\n\nexport * as enr from \"./lib/enr\";\n\nexport * as utf8 from \"./lib/utf8\";\n\nexport * as utils from \"./lib/utils\";\n\nexport * as waku from \"./lib/waku\";\nexport { Waku, DefaultPubSubTopic } from \"./lib/waku\";\n\nexport * as waku_message from \"./lib/waku_message\";\nexport { WakuMessage } from \"./lib/waku_message\";\n\nexport {\n generatePrivateKey,\n generateSymmetricKey,\n getPublicKey,\n} from \"./lib/waku_message/version_1\";\n\nexport * as waku_light_push from \"./lib/waku_light_push\";\nexport {\n WakuLightPush,\n LightPushCodec,\n PushResponse,\n} from \"./lib/waku_light_push\";\n\nexport * as waku_relay from \"./lib/waku_relay\";\nexport { WakuRelay, RelayCodecs } from \"./lib/waku_relay\";\n\nexport * as waku_store from \"./lib/waku_store\";\nexport { PageDirection, WakuStore, StoreCodec } from \"./lib/waku_store\";\n\nexport * as proto from \"./proto\";\n","import debug from \"debug\";\nimport { Multiaddr } from \"multiaddr\";\n\nimport { DnsNodeDiscovery } from \"./dns\";\n\nimport { getPredefinedBootstrapNodes, getPseudoRandomSubset } from \"./index\";\n\nconst dbg = debug(\"waku:discovery:bootstrap\");\n\n/**\n * Setup discovery method used to bootstrap.\n *\n * Only one method is used. `default`, `peers`, `getPeers` and `enr` options are mutually exclusive.\n */\nexport interface BootstrapOptions {\n /**\n * The maximum of peers to connect to as part of the bootstrap process.\n *\n * @default [[Bootstrap.DefaultMaxPeers]]\n */\n maxPeers?: number;\n /**\n * Use the default discovery method. Overrides all other options but `maxPeers`\n *\n * The default discovery method is likely to change overtime as new discovery\n * methods are implemented.\n *\n * @default false\n */\n default?: boolean;\n /**\n * Multiaddrs of peers to connect to.\n */\n peers?: string[];\n /**\n * Getter that retrieve multiaddrs of peers to connect to.\n */\n getPeers?: () => Promise<string[] | Multiaddr[]>;\n /**\n * An EIP-1459 ENR Tree URL. For example:\n * \"enrtree://AOFTICU2XWDULNLZGRMQS4RIZPAZEHYMV4FYHAPW563HNRAOERP7C@test.nodes.vac.dev\"\n */\n enrUrl?: string;\n}\n\n/**\n * Parse options and expose function to return bootstrap peer addresses.\n */\nexport class Bootstrap {\n public static DefaultMaxPeers = 1;\n\n public readonly getBootstrapPeers: (() => Promise<Multiaddr[]>) | undefined;\n\n constructor(opts: BootstrapOptions) {\n const maxPeers = opts.maxPeers ?? Bootstrap.DefaultMaxPeers;\n\n if (opts.default) {\n dbg(\"Use hosted list of peers.\");\n\n this.getBootstrapPeers = (): Promise<Multiaddr[]> => {\n return Promise.resolve(\n getPredefinedBootstrapNodes(undefined, maxPeers)\n );\n };\n } else if (opts.peers !== undefined && opts.peers.length > 0) {\n const allPeers: Multiaddr[] = opts.peers.map(\n (node: string) => new Multiaddr(node)\n );\n const peers = getPseudoRandomSubset(allPeers, maxPeers);\n dbg(\n \"Use provided list of peers (reduced to maxPeers)\",\n allPeers.map((ma) => ma.toString())\n );\n this.getBootstrapPeers = (): Promise<Multiaddr[]> =>\n Promise.resolve(peers);\n } else if (typeof opts.getPeers === \"function\") {\n dbg(\"Bootstrap: Use provided getPeers function.\");\n const getPeers = opts.getPeers;\n\n this.getBootstrapPeers = async (): Promise<Multiaddr[]> => {\n const allPeers = await getPeers();\n return getPseudoRandomSubset<string | Multiaddr>(\n allPeers,\n maxPeers\n ).map((node) => new Multiaddr(node));\n };\n } else if (opts.enrUrl) {\n const enrUrl = opts.enrUrl;\n dbg(\"Use provided EIP-1459 ENR Tree URL.\");\n\n const dns = DnsNodeDiscovery.dnsOverHttp();\n\n this.getBootstrapPeers = async (): Promise<Multiaddr[]> => {\n const enrs = await dns.getPeers(maxPeers, [enrUrl]);\n dbg(`Found ${enrs.length} peers`);\n return enrs.map((enr) => enr.getFullMultiaddrs()).flat();\n };\n } else {\n dbg(\"No bootstrap method specified, no peer will be returned\");\n this.getBootstrapPeers = undefined;\n }\n }\n}\n","import assert from \"assert\";\n\nimport { debug } from \"debug\";\n\nimport { ENR } from \"../enr\";\n\nimport { DnsOverHttps, Endpoints } from \"./dns_over_https\";\nimport { ENRTree } from \"./enrtree\";\n\nconst dbg = debug(\"waku:discovery:dns\");\n\nexport type SearchContext = {\n domain: string;\n publicKey: string;\n visits: { [key: string]: boolean };\n};\n\nexport interface DnsClient {\n resolveTXT: (domain: string) => Promise<string[]>;\n}\n\nexport class DnsNodeDiscovery {\n private readonly dns: DnsClient;\n private readonly _DNSTreeCache: { [key: string]: string };\n private readonly _errorTolerance: number = 10;\n\n public static dnsOverHttp(endpoints?: Endpoints): DnsNodeDiscovery {\n const dnsClient = new DnsOverHttps(endpoints);\n return new DnsNodeDiscovery(dnsClient);\n }\n\n /**\n * Returns a list of verified peers listed in an EIP-1459 DNS tree. Method may\n * return fewer peers than requested if `maxQuantity` is larger than the number\n * of ENR records or the number of errors/duplicate peers encountered by randomized\n * search exceeds `maxQuantity` plus the `errorTolerance` factor.\n */\n async getPeers(maxQuantity: number, enrTreeUrls: string[]): Promise<ENR[]> {\n let totalSearches = 0;\n const peers: ENR[] = [];\n\n const networkIndex = Math.floor(Math.random() * enrTreeUrls.length);\n const { publicKey, domain } = ENRTree.parseTree(enrTreeUrls[networkIndex]);\n\n while (\n peers.length < maxQuantity &&\n totalSearches < maxQuantity + this._errorTolerance\n ) {\n const context: SearchContext = {\n domain,\n publicKey,\n visits: {},\n };\n\n const peer = await this._search(domain, context);\n\n if (peer && isNewPeer(peer, peers)) {\n peers.push(peer);\n dbg(\n `got new peer candidate from DNS address=${peer.nodeId}@${peer.ip}`\n );\n }\n\n totalSearches++;\n }\n return peers;\n }\n\n public constructor(dns: DnsClient) {\n this._DNSTreeCache = {};\n this.dns = dns;\n }\n\n /**\n * Runs a recursive, randomized descent of the DNS tree to retrieve a single\n * ENR record as an ENR. Returns null if parsing or DNS resolution fails.\n */\n private async _search(\n subdomain: string,\n context: SearchContext\n ): Promise<ENR | null> {\n const entry = await this._getTXTRecord(subdomain, context);\n context.visits[subdomain] = true;\n\n let next: string;\n let branches: string[];\n\n const entryType = getEntryType(entry);\n try {\n switch (entryType) {\n case ENRTree.ROOT_PREFIX:\n next = ENRTree.parseAndVerifyRoot(entry, context.publicKey);\n return await this._search(next, context);\n case ENRTree.BRANCH_PREFIX:\n branches = ENRTree.parseBranch(entry);\n next = selectRandomPath(branches, context);\n return await this._search(next, context);\n case ENRTree.RECORD_PREFIX:\n return ENR.decodeTxt(entry);\n default:\n return null;\n }\n } catch (error) {\n dbg(\n `Failed to search DNS tree ${entryType} at subdomain ${subdomain}: ${error}`\n );\n return null;\n }\n }\n\n /**\n * Retrieves the TXT record stored at a location from either\n * this DNS tree cache or via DNS query\n */\n private async _getTXTRecord(\n subdomain: string,\n context: SearchContext\n ): Promise<string> {\n if (this._DNSTreeCache[subdomain]) {\n return this._DNSTreeCache[subdomain];\n }\n\n // Location is either the top level tree entry host or a subdomain of it.\n const location =\n subdomain !== context.domain\n ? `${subdomain}.${context.domain}`\n : context.domain;\n\n const response = await this.dns.resolveTXT(location);\n\n assert(\n response.length,\n \"Received empty result array while fetching TXT record\"\n );\n assert(response[0].length, \"Received empty TXT record\");\n\n // Branch entries can be an array of strings of comma delimited subdomains, with\n // some subdomain strings split across the array elements\n const result = response.join(\"\");\n\n this._DNSTreeCache[subdomain] = result;\n return result;\n }\n}\n\nfunction getEntryType(entry: string): string {\n if (entry.startsWith(ENRTree.ROOT_PREFIX)) return ENRTree.ROOT_PREFIX;\n if (entry.startsWith(ENRTree.BRANCH_PREFIX)) return ENRTree.BRANCH_PREFIX;\n if (entry.startsWith(ENRTree.RECORD_PREFIX)) return ENRTree.RECORD_PREFIX;\n\n return \"\";\n}\n\n/**\n * Returns a randomly selected subdomain string from the list provided by a branch\n * entry record.\n *\n * The client must track subdomains which are already resolved to avoid\n * going into an infinite loop b/c branch entries can contain\n * circular references. Its in the clients best interest to traverse the\n * tree in random order.\n */\nfunction selectRandomPath(branches: string[], context: SearchContext): string {\n // Identify domains already visited in this traversal of the DNS tree.\n // Then filter against them to prevent cycles.\n const circularRefs: { [key: number]: boolean } = {};\n for (const [idx, subdomain] of branches.entries()) {\n if (context.visits[subdomain]) {\n circularRefs[idx] = true;\n }\n }\n // If all possible paths are circular...\n if (Object.keys(circularRefs).length === branches.length) {\n throw new Error(\"Unresolvable circular path detected\");\n }\n\n // Randomly select a viable path\n let index;\n do {\n index = Math.floor(Math.random() * branches.length);\n } while (circularRefs[index]);\n\n return branches[index];\n}\n\n/**\n * @returns false if candidate peer already exists in the\n * current collection of peers based on the node id value;\n * true otherwise.\n */\nfunction isNewPeer(peer: ENR | null, peers: ENR[]): boolean {\n if (!peer || !peer.nodeId) return false;\n\n for (const existingPeer of peers) {\n if (peer.nodeId === existingPeer.nodeId) {\n return false;\n }\n }\n\n return true;\n}\n","import { TxtAnswer } from \"dns-packet\";\nimport {\n endpoints as defaultEndpoints,\n Endpoint,\n EndpointProps,\n query,\n} from \"dns-query\";\n\nimport { bytesToUtf8 } from \"../utf8\";\n\nimport { DnsClient } from \"./dns\";\n\nconst { cloudflare, google, opendns } = defaultEndpoints;\n\nexport type Endpoints =\n | \"doh\"\n | \"dns\"\n | Iterable<Endpoint | EndpointProps | string>;\n\nexport class DnsOverHttps implements DnsClient {\n /**\n * Create new Dns-Over-Http DNS client.\n *\n * @param endpoints The endpoints for Dns-Over-Https queries.\n * See [dns-query](https://www.npmjs.com/package/dns-query) for details.\n * Defaults to cloudflare, google and opendns.\n *\n * @throws {code: string} If DNS query fails.\n */\n public constructor(\n public endpoints: Endpoints = [cloudflare, google, opendns]\n ) {}\n\n async resolveTXT(domain: string): Promise<string[]> {\n const response = await query({\n questions: [{ type: \"TXT\", name: domain }],\n });\n\n const answers = response.answers as TxtAnswer[];\n\n const data = answers.map((a) => a.data);\n\n const result: string[] = [];\n\n data.forEach((d) => {\n if (typeof d === \"string\") {\n result.push(d);\n } else if (Array.isArray(d)) {\n d.forEach((sd) => {\n if (typeof sd === \"string\") {\n result.push(sd);\n } else {\n result.push(bytesToUtf8(sd));\n }\n });\n } else {\n result.push(bytesToUtf8(d));\n }\n });\n\n return result;\n }\n}\n","import assert from \"assert\";\n\nimport * as base32 from \"hi-base32\";\nimport { ecdsaVerify } from \"secp256k1\";\n\nimport { ENR } from \"../enr\";\nimport { utf8ToBytes } from \"../utf8\";\nimport { base64ToBytes, keccak256Buf } from \"../utils\";\n\nexport type ENRRootValues = {\n eRoot: string;\n lRoot: string;\n seq: number;\n signature: string;\n};\n\nexport type ENRTreeValues = {\n publicKey: string;\n domain: string;\n};\n\nexport class ENRTree {\n public static readonly RECORD_PREFIX = ENR.RECORD_PREFIX;\n public static readonly TREE_PREFIX = \"enrtree:\";\n public static readonly BRANCH_PREFIX = \"enrtree-branch:\";\n public static readonly ROOT_PREFIX = \"enrtree-root:\";\n\n /**\n * Extracts the branch subdomain referenced by a DNS tree root string after verifying\n * the root record signature with its base32 compressed public key.\n */\n static parseAndVerifyRoot(root: string, publicKey: string): string {\n assert(\n root.startsWith(this.ROOT_PREFIX),\n `ENRTree root entry must start with '${this.ROOT_PREFIX}'`\n );\n\n const rootValues = ENRTree.parseRootValues(root);\n const decodedPublicKey = base32.decode.asBytes(publicKey);\n\n // The signature is a 65-byte secp256k1 over the keccak256 hash\n // of the record content, excluding the `sig=` part, encoded as URL-safe base64 string\n // (Trailing recovery bit must be trimmed to pass `ecdsaVerify` method)\n const signedComponent = root.split(\" sig\")[0];\n const signedComponentBuffer = utf8ToBytes(signedComponent);\n const signatureBuffer = base64ToBytes(rootValues.signature).slice(0, 64);\n\n const isVerified = ecdsaVerify(\n signatureBuffer,\n keccak256Buf(signedComponentBuffer),\n new Uint8Array(decodedPublicKey)\n );\n\n assert(isVerified, \"Unable to verify ENRTree root signature\");\n\n return rootValues.eRoot;\n }\n\n static parseRootValues(txt: string): ENRRootValues {\n const matches = txt.match(\n /^enrtree-root:v1 e=([^ ]+) l=([^ ]+) seq=(\\d+) sig=([^ ]+)$/\n );\n\n assert.ok(Array.isArray(matches), \"Could not parse ENRTree root entry\");\n\n matches.shift(); // The first entry is the full match\n const [eRoot, lRoot, seq, signature] = matches;\n\n assert.ok(eRoot, \"Could not parse 'e' value from ENRTree root entry\");\n assert.ok(lRoot, \"Could not parse 'l' value from ENRTree root entry\");\n assert.ok(seq, \"Could not parse 'seq' value from ENRTree root entry\");\n assert.ok(signature, \"Could not parse 'sig' value from ENRTree root entry\");\n\n return { eRoot, lRoot, seq: Number(seq), signature };\n }\n\n /**\n * Returns the public key and top level domain of an ENR tree entry.\n * The domain is the starting point for traversing a set of linked DNS TXT records\n * and the public key is used to verify the root entry record\n */\n static parseTree(tree: string): ENRTreeValues {\n assert(\n tree.startsWith(this.TREE_PREFIX),\n `ENRTree tree entry must start with '${this.TREE_PREFIX}'`\n );\n\n const matches = tree.match(/^enrtree:\\/\\/([^@]+)@(.+)$/);\n\n assert.ok(Array.isArray(matches), \"Could not parse ENRTree tree entry\");\n\n matches.shift(); // The first entry is the full match\n const [publicKey, domain] = matches;\n\n assert.ok(publicKey, \"Could not parse public key from ENRTree tree entry\");\n assert.ok(domain, \"Could not parse domain from ENRTree tree entry\");\n\n return { publicKey, domain };\n }\n\n /**\n * Returns subdomains listed in an ENR branch entry. These in turn lead to\n * either further branch entries or ENR records.\n */\n static parseBranch(branch: string): string[] {\n assert(\n branch.startsWith(this.BRANCH_PREFIX),\n `ENRTree branch entry must start with '${this.BRANCH_PREFIX}'`\n );\n\n return branch.split(this.BRANCH_PREFIX)[1].split(\",\");\n }\n}\n","import { shuffle } from \"libp2p-gossipsub/src/utils\";\n\nexport { getPredefinedBootstrapNodes } from \"./predefined\";\nexport * as predefined from \"./predefined\";\nexport { Bootstrap, BootstrapOptions } from \"./bootstrap\";\nexport { DnsClient, DnsNodeDiscovery, SearchContext } from \"./dns\";\nexport { Endpoints, DnsOverHttps } from \"./dns_over_https\";\nexport { ENRTree, ENRTreeValues, ENRRootValues } from \"./enrtree\";\n\nexport function getPseudoRandomSubset<T>(\n values: T[],\n wantedNumber: number\n): T[] {\n if (values.length <= wantedNumber) {\n return values;\n }\n\n return shuffle(values).slice(0, wantedNumber);\n}\n","import { Multiaddr } from \"multiaddr\";\n\nimport { getPseudoRandomSubset } from \"./index\";\n\nexport const DefaultWantedNumber = 1;\n\nexport enum Fleet {\n Prod = \"prod\",\n Test = \"test\",\n}\n\n/**\n * Return list of pre-defined (hardcoded) bootstrap nodes.\n *\n * Default behavior is to return nodes of the nim-waku Status Prod fleet.\n *\n * @param fleet The fleet to be returned. Defaults to production fleet.\n * @param wantedNumber The number of connections desired. Defaults to [[DefaultWantedNumber]].\n *\n * @returns An array of multiaddresses.\n */\nexport function getPredefinedBootstrapNodes(\n fleet: Fleet = Fleet.Prod,\n wantedNumber: number = DefaultWantedNumber\n): Multiaddr[] {\n if (wantedNumber <= 0) {\n return [];\n }\n\n let nodes;\n switch (fleet) {\n case Fleet.Prod:\n nodes = fleets.fleets[\"wakuv2.prod\"][\"waku-websocket\"];\n break;\n case Fleet.Test:\n nodes = fleets.fleets[\"wakuv2.test\"][\"waku-websocket\"];\n break;\n default:\n nodes = fleets.fleets[\"wakuv2.prod\"][\"waku-websocket\"];\n }\n\n nodes = Object.values(nodes) as string[];\n\n nodes = nodes.map((node: string) => new Multiaddr(node));\n return getPseudoRandomSubset(nodes, wantedNumber);\n}\n\nexport const fleets = {\n fleets: {\n \"wakuv2.prod\": {\n \"waku-websocket\": {\n \"node-01.ac-cn-hongkong-c.wakuv2.prod\":\n \"/dns4/node-01.ac-cn-hongkong-c.wakuv2.prod.statusim.net/tcp/443/wss/p2p/16Uiu2HAm4v86W3bmT1BiH6oSPzcsSr24iDQpSN5Qa992BCjjwgrD\",\n \"node-01.do-ams3.wakuv2.prod\":\n \"/dns4/node-01.do-ams3.wakuv2.prod.statusim.net/tcp/443/wss/p2p/16Uiu2HAmL5okWopX7NqZWBUKVqW8iUxCEmd5GMHLVPwCgzYzQv3e\",\n \"node-01.gc-us-central1-a.wakuv2.prod\":\n \"/dns4/node-01.gc-us-central1-a.wakuv2.prod.statusim.net/tcp/443/wss/p2p/16Uiu2HAmVkKntsECaYfefR1V2yCR79CegLATuTPE6B9TxgxBiiiA\",\n },\n },\n \"wakuv2.test\": {\n \"waku-websocket\": {\n \"node-01.ac-cn-hongkong-c.wakuv2.test\":\n \"/dns4/node-01.ac-cn-hongkong-c.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAkvWiyFsgRhuJEb9JfjYxEkoHLgnUQmr1N5mKWnYjxYRVm\",\n \"node-01.do-ams3.wakuv2.test\":\n \"/dns4/node-01.do-ams3.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ\",\n \"node-01.gc-us-central1-a.wakuv2.test\":\n \"/dns4/node-01.gc-us-central1-a.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS\",\n },\n },\n },\n};\n","// Maximum encoded size of an ENR\nexport const MAX_RECORD_SIZE = 300;\n\nexport const ERR_INVALID_ID = \"Invalid record id\";\n\nexport const ERR_NO_SIGNATURE = \"No valid signature found\";\n\n// The maximum length of byte size of a multiaddr to encode in the `multiaddr` field\n// The size is a big endian 16-bit unsigned integer\nexport const MULTIADDR_LENGTH_SIZE = 2;\n","import { bytesToHex } from \"../utils\";\n\nimport { NodeId } from \"./types\";\n\nexport function createNodeId(bytes: Uint8Array): NodeId {\n if (bytes.length !== 32) {\n throw new Error(\"NodeId must be 32 bytes in length\");\n }\n return bytesToHex(bytes);\n}\n","import * as RLP from \"@ethersproject/rlp\";\nimport { Multiaddr, protocols } from \"multiaddr\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore: No types available\nimport muConvert from \"multiaddr/src/convert\";\nimport PeerId from \"peer-id\";\nimport { encode as varintEncode } from \"varint\";\n\nimport { bytesToUtf8, utf8ToBytes } from \"../utf8\";\nimport { base64ToBytes, bytesToBase64, bytesToHex, hexToBytes } from \"../utils\";\n\nimport { ERR_INVALID_ID, ERR_NO_SIGNATURE, MAX_RECORD_SIZE } from \"./constants\";\nimport {\n createKeypair,\n createKeypairFromPeerId,\n createPeerIdFromKeypair,\n IKeypair,\n KeypairType,\n} from \"./keypair\";\nimport { decodeMultiaddrs, encodeMultiaddrs } from \"./multiaddrs_codec\";\nimport { ENRKey, ENRValue, NodeId, SequenceNumber } from \"./types\";\nimport * as v4 from \"./v4\";\n\nexport class ENR extends Map<ENRKey, ENRValue> {\n public static readonly RECORD_PREFIX = \"enr:\";\n public seq: SequenceNumber;\n public signature: Uint8Array | null;\n\n constructor(\n kvs: Record<ENRKey, ENRValue> = {},\n seq: SequenceNumber = 1n,\n signature: Uint8Array | null = null\n ) {\n super(Object.entries(kvs));\n this.seq = seq;\n this.signature = signature;\n }\n\n static createV4(\n publicKey: Uint8Array,\n kvs: Record<ENRKey, ENRValue> = {}\n ): ENR {\n return new ENR({\n ...kvs,\n id: utf8ToBytes(\"v4\"),\n secp256k1: publicKey,\n });\n }\n\n static createFromPeerId(\n peerId: PeerId,\n kvs: Record<ENRKey, ENRValue> = {}\n ): ENR {\n const keypair = createKeypairFromPeerId(peerId);\n switch (keypair.type) {\n case KeypairType.secp256k1:\n return ENR.createV4(keypair.publicKey, kvs);\n default:\n throw new Error();\n }\n }\n\n static decodeFromValues(decoded: Uint8Array[]): ENR {\n if (!Array.isArray(decoded)) {\n throw new Error(\"Decoded ENR must be an array\");\n }\n if (decoded.length % 2 !== 0) {\n throw new Error(\"Decoded ENR must have an even number of elements\");\n }\n const [signature, seq, ...kvs] = decoded;\n if (!signature || Array.isArray(signature)) {\n throw new Error(\"Decoded ENR invalid signature: must be a byte array\");\n }\n if (!seq || Array.isArray(seq)) {\n throw new Error(\n \"Decoded ENR invalid sequence number: must be a byte array\"\n );\n }\n const obj: Record<ENRKey, ENRValue> = {};\n for (let i = 0; i < kvs.length; i += 2) {\n obj[bytesToUtf8(kvs[i])] = kvs[i + 1];\n }\n const enr = new ENR(obj, BigInt(\"0x\" + bytesToHex(seq)), signature);\n\n const rlpEncodedBytes = hexToBytes(RLP.encode([seq, ...kvs]));\n if (!enr.verify(rlpEncodedBytes, signature)) {\n throw new Error(\"Unable to verify ENR signature\");\n }\n return enr;\n }\n\n static decode(encoded: Uint8Array): ENR {\n const decoded = RLP.decode(encoded).map(hexToBytes);\n return ENR.decodeFromValues(decoded);\n }\n\n static decodeTxt(encoded: string): ENR {\n if (!encoded.startsWith(this.RECORD_PREFIX)) {\n throw new Error(\n `\"string encoded ENR must start with '${this.RECORD_PREFIX}'`\n );\n }\n return ENR.decode(base64ToBytes(encoded.slice(4)));\n }\n\n set(k: ENRKey, v: ENRValue): this {\n this.signature = null;\n this.seq++;\n return super.set(k, v);\n }\n\n get id(): string {\n const id = this.get(\"id\");\n if (!id) throw new Error(\"id not found.\");\n return bytesToUtf8(id);\n }\n\n get keypairType(): KeypairType {\n switch (this.id) {\n case \"v4\":\n return KeypairType.secp256k1;\n default:\n throw new Error(ERR_INVALID_ID);\n }\n }\n\n get publicKey(): Uint8Array | undefined {\n switch (this.id) {\n case \"v4\":\n return this.get(\"secp256k1\");\n default:\n throw new Error(ERR_INVALID_ID);\n }\n }\n\n get keypair(): IKeypair | undefined {\n if (this.publicKey) {\n const publicKey = this.publicKey;\n return createKeypair(this.keypairType, undefined, publicKey);\n }\n return;\n }\n\n get peerId(): PeerId | undefined {\n return this.keypair ? createPeerIdFromKeypair(this.keypair) : undefined;\n }\n\n get nodeId(): NodeId | undefined {\n switch (this.id) {\n case \"v4\":\n return this.publicKey ? v4.nodeId(this.publicKey) : undefined;\n default:\n throw new Error(ERR_INVALID_ID);\n }\n }\n\n get ip(): string | undefined {\n const raw = this.get(\"ip\");\n if (raw) {\n return muConvert.toString(protocols.names.ip4.code, raw) as string;\n } else {\n return undefined;\n }\n }\n\n set ip(ip: string | undefined) {\n if (ip) {\n this.set(\"ip\", muConvert.toBytes(protocols.names.ip4.code, ip));\n } else {\n this.delete(\"ip\");\n }\n }\n\n get tcp(): number | undefined {\n const raw = this.get(\"tcp\");\n if (raw) {\n return Number(muConvert.toString(protocols.names.tcp.code, raw));\n } else {\n return undefined;\n }\n }\n\n set tcp(port: number | undefined) {\n if (port === undefined) {\n this.delete(\"tcp\");\n } else {\n this.set(\"tcp\", muConvert.toBytes(protocols.names.tcp.code, port));\n }\n }\n\n get udp(): number | undefined {\n const raw = this.get(\"udp\");\n if (raw) {\n return Number(muConvert.toString(protocols.names.udp.code, raw));\n } else {\n return undefined;\n }\n }\n\n set udp(port: number | undefined) {\n if (port === undefined) {\n this.delete(\"udp\");\n } else {\n this.set(\"udp\", muConvert.toBytes(protocols.names.udp.code, port));\n }\n }\n\n get ip6(): string | undefined {\n const raw = this.get(\"ip6\");\n if (raw) {\n return muConvert.toString(protocols.names.ip6.code, raw) as string;\n } else {\n return undefined;\n }\n }\n\n set ip6(ip: string | undefined) {\n if (ip) {\n this.set(\"ip6\", muConvert.toBytes(protocols.names.ip6.code, ip));\n } else {\n this.delete(\"ip6\");\n }\n }\n\n get tcp6(): number | undefined {\n const raw = this.get(\"tcp6\");\n if (raw) {\n return Number(muConvert.toString(protocols.names.tcp.code, raw));\n } else {\n return undefined;\n }\n }\n\n set tcp6(port: number | undefined) {\n if (port === undefined) {\n this.delete(\"tcp6\");\n } else {\n this.set(\"tcp6\", muConvert.toBytes(protocols.names.tcp.code, port));\n }\n }\n\n get udp6(): number | undefined {\n const raw = this.get(\"udp6\");\n if (raw) {\n return Number(muConvert.toString(protocols.names.udp.code, raw));\n } else {\n return undefined;\n }\n }\n\n set udp6(port: number | undefined) {\n if (port === undefined) {\n this.delete(\"udp6\");\n } else {\n this.set(\"udp6\", muConvert.toBytes(protocols.names.udp.code, port));\n }\n }\n\n /**\n * Get the `multiaddrs` field from ENR.\n *\n * This field is used to store multiaddresses that cannot be stored with the current ENR pre-defined keys.\n * These can be a multiaddresses that include encapsulation (e.g. wss) or do not use `ip4` nor `ip6` for the host\n * address (e.g. `dns4`, `dnsaddr`, etc)..\n *\n * If the peer information only contains information that can be represented with the ENR pre-defined keys\n * (ip, tcp, etc) then the usage of [[getLocationMultiaddr]] should be preferred.\n *\n * The multiaddresses stored in this field are expected to be location multiaddresses, ie, peer id less.\n */\n get multiaddrs(): Multiaddr[] | undefined {\n const raw = this.get(\"multiaddrs\");\n\n if (raw) return decodeMultiaddrs(raw);\n\n return;\n }\n\n /**\n * Set the `multiaddrs` field on the ENR.\n *\n * This field is used to store multiaddresses that cannot be stored with the current ENR pre-defined keys.\n * These can be a multiaddresses that include encapsulation (e.g. wss) or do not use `ip4` nor `ip6` for the host\n * address (e.g. `dns4`, `dnsaddr`, etc)..\n *\n * If the peer information only contains information that can be represented with the ENR pre-defined keys\n * (ip, tcp, etc) then the usage of [[setLocationMultiaddr]] should be preferred.\n * The multiaddresses stored in this field must be location multiaddresses,\n * ie, without a peer id.\n */\n set multiaddrs(multiaddrs: Multiaddr[] | undefined) {\n if (multiaddrs === undefined) {\n this.delete(\"multiaddrs\");\n } else {\n const multiaddrsBuf = encodeMultiaddrs(multiaddrs);\n this.set(\"multiaddrs\", multiaddrsBuf);\n }\n }\n\n getLocationMultiaddr(\n protocol: \"udp\" | \"udp4\" | \"udp6\" | \"tcp\" | \"tcp4\" | \"tcp6\"\n ): Multiaddr | undefined {\n if (protocol === \"udp\") {\n return (\n this.getLocationMultiaddr(\"udp4\") || this.getLocationMultiaddr(\"udp6\")\n );\n }\n if (protocol === \"tcp\") {\n return (\n this.getLocationMultiaddr(\"tcp4\") || this.getLocationMultiaddr(\"tcp6\")\n );\n }\n const isIpv6 = protocol.endsWith(\"6\");\n const ipVal = this.get(isIpv6 ? \"ip6\" : \"ip\");\n if (!ipVal) {\n return undefined;\n }\n\n const isUdp = protocol.startsWith(\"udp\");\n const isTcp = protocol.startsWith(\"tcp\");\n let protoName, protoVal;\n if (isUdp) {\n protoName = \"udp\";\n protoVal = isIpv6 ? this.get(\"udp6\") : this.get(\"udp\");\n } else if (isTcp) {\n protoName = \"tcp\";\n protoVal = isIpv6 ? this.get(\"tcp6\") : this.get(\"tcp\");\n } else {\n return undefined;\n }\n if (!protoVal) {\n return undefined;\n }\n\n // Create raw multiaddr buffer\n // multiaddr length is:\n // 1 byte for the ip protocol (ip4 or ip6)\n // N bytes for the ip address\n // 1 or 2 bytes for the protocol as buffer (tcp or udp)\n // 2 bytes for the port\n const ipMa = protocols.names[isIpv6 ? \"ip6\" : \"ip4\"];\n const ipByteLen = ipMa.size / 8;\n const protoMa = protocols.names[protoName];\n const protoBuf = varintEncode(protoMa.code);\n const maBuf = new Uint8Array(3 + ipByteLen + protoBuf.length);\n maBuf[0] = ipMa.code;\n maBuf.set(ipVal, 1);\n maBuf.set(protoBuf, 1 + ipByteLen);\n maBuf.set(protoVal, 1 + ipByteLen + protoBuf.length);\n\n return new Multiaddr(maBuf);\n }\n\n setLocationMultiaddr(multiaddr: Multiaddr): void {\n const protoNames = multiaddr.protoNames();\n if (\n protoNames.length !== 2 &&\n protoNames[1] !== \"udp\" &&\n protoNames[1] !== \"tcp\"\n ) {\n throw new Error(\"Invalid multiaddr\");\n }\n const tuples = multiaddr.tuples();\n if (!tuples[0][1] || !tuples[1][1]) {\n throw new Error(\"Invalid multiaddr\");\n }\n\n // IPv4\n if (tuples[0][0] === 4) {\n this.set(\"ip\", tuples[0][1]);\n this.set(protoNames[1], tuples[1][1]);\n } else {\n this.set(\"ip6\", tuples[0][1]);\n this.set(protoNames[1] + \"6\", tuples[1][1]);\n }\n }\n\n /**\n * Returns the full multiaddr from the ENR fields matching the provided\n * `protocol` parameter.\n * To return full multiaddrs from the `multiaddrs` ENR field,\n * use [[ENR.getFullMultiaddrs]]\n *\n * @param protocol\n */\n getFullMultiaddr(\n protocol: \"udp\" | \"udp4\" | \"udp6\" | \"tcp\" | \"tcp4\" | \"tcp6\"\n ): Multiaddr | undefined {\n if (this.peerId) {\n const locationMultiaddr = this.getLocationMultiaddr(protocol);\n if (locationMultiaddr) {\n return locationMultiaddr.encapsulate(\n `/p2p/${this.peerId.toB58String()}`\n );\n }\n }\n return;\n }\n\n /**\n * Returns the full multiaddrs from the `multiaddrs` ENR field.\n */\n getFullMultiaddrs(): Multiaddr[] {\n if (this.peerId && this.multiaddrs) {\n const peerId = this.peerId;\n return this.multiaddrs.map((ma) => {\n return ma.encapsulate(`/p2p/${peerId.toB58String()}`);\n });\n }\n return [];\n }\n\n verify(data: Uint8Array, signature: Uint8Array): boolean {\n if (!this.get(\"id\") || this.id !== \"v4\") {\n throw new Error(ERR_INVALID_ID);\n }\n if (!this.publicKey) {\n throw new Error(\"Failed to verify ENR: No public key\");\n }\n return v4.verify(this.publicKey, data, signature);\n }\n\n sign(data: Uint8Array, privateKey: Uint8Array): Uint8Array {\n switch (this.id) {\n case \"v4\":\n this.signature = v4.sign(privateKey, data);\n break;\n default:\n throw new Error(ERR_INVALID_ID);\n }\n return this.signature;\n }\n\n encodeToValues(privateKey?: Uint8Array): (ENRKey | ENRValue | number[])[] {\n // sort keys and flatten into [k, v, k, v, ...]\n const content: Array<ENRKey | ENRValue | number[]> = Array.from(this.keys())\n .sort((a, b) => a.localeCompare(b))\n .map((k) => [k, this.get(k)] as [ENRKey, ENRValue])\n .map(([k, v]) => [utf8ToBytes(k), v])\n .flat();\n content.unshift(new Uint8Array([Number(this.seq)]));\n if (privateKey) {\n content.unshift(this.sign(hexToBytes(RLP.encode(content)), privateKey));\n } else {\n if (!this.signature) {\n throw new Error(ERR_NO_SIGNATURE);\n }\n content.unshift(this.signature);\n }\n return content;\n }\n\n encode(privateKey?: Uint8Array): Uint8Array {\n const encoded = hexToBytes(RLP.encode(this.encodeToValues(privateKey)));\n if (encoded.length >= MAX_RECORD_SIZE) {\n throw new Error(\"ENR must be less than 300 bytes\");\n }\n return encoded;\n }\n\n async encodeTxt(privateKey?: Uint8Array): Promise<string> {\n return ENR.RECORD_PREFIX + (await bytesToBase64(this.encode(privateKey)));\n }\n}\n","import * as v4Crypto from \"./v4\";\nexport const v4 = v4Crypto;\nexport * from \"./constants\";\nexport * from \"./enr\";\nexport * from \"./types\";\nexport * from \"./create\";\nexport * from \"./keypair\";\n","export const ERR_TYPE_NOT_IMPLEMENTED = \"Keypair type not implemented\";\nexport const ERR_INVALID_KEYPAIR_TYPE = \"Invalid keypair type\";\n","import { keys } from \"libp2p-crypto\";\nimport mh from \"multihashes\";\nimport PeerId from \"peer-id\";\n\nconst { keysPBM, supportedKeys } = keys;\n\nimport { ERR_TYPE_NOT_IMPLEMENTED } from \"./constants\";\nimport { Secp256k1Keypair } from \"./secp256k1\";\nimport { IKeypair, KeypairType } from \"./types\";\n\nexport * from \"./types\";\nexport * from \"./secp256k1\";\n\nexport async function generateKeypair(type: KeypairType): Promise<IKeypair> {\n switch (type) {\n case KeypairType.secp256k1:\n return await Secp256k1Keypair.generate();\n default:\n throw new Error(ERR_TYPE_NOT_IMPLEMENTED);\n }\n}\n\nexport function createKeypair(\n type: KeypairType,\n privateKey?: Uint8Array,\n publicKey?: Uint8Array\n): IKeypair {\n switch (type) {\n case KeypairType.secp256k1:\n return new Secp256k1Keypair(privateKey, publicKey);\n default:\n throw new Error(ERR_TYPE_NOT_IMPLEMENTED);\n }\n}\n\nexport function createPeerIdFromKeypair(keypair: IKeypair): PeerId {\n switch (keypair.type) {\n case KeypairType.secp256k1: {\n // manually create a peer id to avoid expensive ops\n const privKey = keypair.hasPrivateKey()\n ? new supportedKeys.secp256k1.Secp256k1PrivateKey(\n keypair.privateKey,\n keypair.publicKey\n )\n : undefined;\n\n const pubKey = new supportedKeys.secp256k1.Secp256k1PublicKey(\n keypair.publicKey\n );\n const id = mh.encode(pubKey.bytes, \"identity\");\n return new PeerId(id, privKey, pubKey);\n }\n default:\n throw new Error(ERR_TYPE_NOT_IMPLEMENTED);\n }\n}\n\nexport function createKeypairFromPeerId(peerId: PeerId): IKeypair {\n // pub/private key bytes from peer-id are encoded in protobuf format\n const pub = keysPBM.PublicKey.decode(peerId.pubKey.bytes);\n return createKeypair(\n pub.Type as KeypairType,\n peerId.privKey ? peerId.privKey.marshal() : undefined,\n pub.Data\n );\n}\n","import crypto from \"crypto\";\n\nimport * as secp256k1 from \"secp256k1\";\n\nimport { AbstractKeypair, IKeypair, IKeypairClass, KeypairType } from \"./types\";\n\nexport function secp256k1PublicKeyToCompressed(\n publicKey: Uint8Array\n): Uint8Array {\n if (publicKey.length === 64) {\n const _publicKey = new Uint8Array(publicKey.length + 1);\n _publicKey.set([4]);\n _publicKey.set(publicKey, 1);\n publicKey = _publicKey;\n }\n return secp256k1.publicKeyConvert(publicKey, true);\n}\n\nexport function secp256k1PublicKeyToFull(publicKey: Uint8Array): Uint8Array {\n if (publicKey.length === 64) {\n const _publicKey = new Uint8Array(publicKey.length + 1);\n _publicKey.set([4]);\n _publicKey.set(publicKey, 1);\n publicKey = _publicKey;\n }\n return secp256k1.publicKeyConvert(publicKey, false);\n}\n\nexport function secp256k1PublicKeyToRaw(publicKey: Uint8Array): Uint8Array {\n return secp256k1.publicKeyConvert(publicKey, false).slice(1);\n}\n\nexport const Secp256k1Keypair: IKeypairClass = class Secp256k1Keypair\n extends AbstractKeypair\n implements IKeypair\n{\n readonly type: KeypairType;\n\n constructor(privateKey?: Uint8Array, publicKey?: Uint8Array) {\n let pub = publicKey;\n if (pub) {\n pub = secp256k1PublicKeyToCompressed(pub);\n }\n super(privateKey, pub);\n this.type = KeypairType.secp256k1;\n }\n\n static async generate(): Promise<Secp256k1Keypair> {\n const privateKey = await randomBytes(32);\n const publicKey = secp256k1.publicKeyCreate(privateKey);\n return new Secp256k1Keypair(privateKey, publicKey);\n }\n\n privateKeyVerify(key = this._privateKey): boolean {\n if (key) {\n return secp256k1.privateKeyVerify(key);\n }\n return true;\n }\n\n publicKeyVerify(key = this._publicKey): boolean {\n if (key) {\n return secp256k1.publicKeyVerify(key);\n }\n return true;\n }\n\n sign(msg: Uint8Array): Uint8Array {\n const { signature, recid } = secp256k1.ecdsaSign(msg, this.privateKey);\n\n const result = new Uint8Array(signature.length + 1);\n result.set(signature);\n result.set([recid], signature.length);\n return result;\n }\n\n verify(msg: Uint8Array, sig: Uint8Array): boolean {\n return secp256k1.ecdsaVerify(sig, msg, this.publicKey);\n }\n};\n\nfunction randomBytes(length: number): Uint8Array {\n if (typeof window !== \"undefined\" && window && window.crypto) {\n const array = new Uint8Array(length);\n window.crypto.getRandomValues(array);\n return array;\n } else {\n return crypto.randomBytes(length);\n }\n}\n","export enum KeypairType {\n rsa = 0,\n ed25519 = 1,\n secp256k1 = 2,\n}\n\nexport interface IKeypair {\n type: KeypairType;\n privateKey: Uint8Array;\n publicKey: Uint8Array;\n privateKeyVerify(): boolean;\n publicKeyVerify(): boolean;\n sign(msg: Uint8Array): Uint8Array;\n verify(msg: Uint8Array, sig: Uint8Array): boolean;\n hasPrivateKey(): boolean;\n}\n\nexport interface IKeypairClass {\n new (privateKey?: Uint8Array, publicKey?: Uint8Array): IKeypair;\n generate(): Promise<IKeypair>;\n}\n\nexport abstract class AbstractKeypair {\n _privateKey?: Uint8Array;\n readonly _publicKey?: Uint8Array;\n\n constructor(privateKey?: Uint8Array, publicKey?: Uint8Array) {\n if ((this._privateKey = privateKey) && !this.privateKeyVerify()) {\n throw new Error(\"Invalid private key\");\n }\n if ((this._publicKey = publicKey) && !this.publicKeyVerify()) {\n throw new Error(\"Invalid private key\");\n }\n }\n\n get privateKey(): Uint8Array {\n if (!this._privateKey) {\n throw new Error();\n }\n return this._privateKey;\n }\n\n get publicKey(): Uint8Array {\n if (!this._publicKey) {\n throw new Error();\n }\n return this._publicKey;\n }\n\n privateKeyVerify(): boolean {\n return true;\n }\n\n publicKeyVerify(): boolean {\n return true;\n }\n\n hasPrivateKey(): boolean {\n return Boolean(this._privateKey);\n }\n}\n","import { Multiaddr } from \"multiaddr\";\n\nimport { MULTIADDR_LENGTH_SIZE } from \"./constants\";\n\nexport function decodeMultiaddrs(bytes: Uint8Array): Multiaddr[] {\n const multiaddrs = [];\n\n let index = 0;\n\n while (index < bytes.length) {\n const sizeDataView = new DataView(\n bytes.buffer,\n index,\n MULTIADDR_LENGTH_SIZE\n );\n const size = sizeDataView.getUint16(0);\n index += MULTIADDR_LENGTH_SIZE;\n\n const multiaddrBytes = bytes.slice(index, index + size);\n index += size;\n\n const multiaddr = new Multiaddr(multiaddrBytes);\n multiaddrs.push(multiaddr);\n }\n return multiaddrs;\n}\n\nexport function encodeMultiaddrs(multiaddrs: Multiaddr[]): Uint8Array {\n const totalLength = multiaddrs.reduce(\n (acc, ma) => acc + MULTIADDR_LENGTH_SIZE + ma.bytes.length,\n 0\n );\n const bytes = new Uint8Array(totalLength);\n const dataView = new DataView(bytes.buffer);\n\n let index = 0;\n multiaddrs.forEach((multiaddr) => {\n if (multiaddr.getPeerId())\n throw new Error(\"`multiaddr` field MUST not contain peer id\");\n\n // Prepend the size of the next entry\n dataView.setUint16(index, multiaddr.bytes.length);\n index += MULTIADDR_LENGTH_SIZE;\n\n bytes.set(multiaddr.bytes, index);\n index += multiaddr.bytes.length;\n });\n\n return bytes;\n}\n","import crypto from \"crypto\";\n\nimport { keccak256 } from \"js-sha3\";\nimport * as secp256k1 from \"secp256k1\";\n\nimport { createNodeId } from \"./create\";\nimport { NodeId } from \"./types\";\n\nexport function hash(input: Uint8Array): Uint8Array {\n return new Uint8Array(keccak256.arrayBuffer(input));\n}\n\nexport async function createPrivateKey(): Promise<Uint8Array> {\n return randomBytes(32);\n}\n\nexport function publicKey(privKey: Uint8Array): Uint8Array {\n return secp256k1.publicKeyCreate(privKey);\n}\n\nexport function sign(privKey: Uint8Array, msg: Uint8Array): Uint8Array {\n const { signature } = secp256k1.ecdsaSign(hash(msg), privKey);\n return signature;\n}\n\nexport function verify(\n pubKey: Uint8Array,\n msg: Uint8Array,\n sig: Uint8Array\n): boolean {\n // Remove the recovery id if present (byte #65)\n return secp256k1.ecdsaVerify(sig.slice(0, 64), hash(msg), pubKey);\n}\n\nexport function nodeId(pubKey: Uint8Array): NodeId {\n const uncompressedPubkey = secp256k1.publicKeyConvert(pubKey, false);\n\n return createNodeId(hash(uncompressedPubkey.slice(1)));\n}\n\nexport class ENRKeyPair {\n public constructor(\n public readonly nodeId: NodeId,\n public readonly privateKey: Uint8Array,\n public readonly publicKey: Uint8Array\n ) {}\n\n public static async create(privateKey?: Uint8Array): Promise<ENRKeyPair> {\n if (privateKey) {\n if (!secp256k1.privateKeyVerify(privateKey)) {\n throw new Error(\"Invalid private key\");\n }\n }\n const _privateKey = privateKey || (await createPrivateKey());\n const _publicKey = publicKey(_privateKey);\n const _nodeId = nodeId(_publicKey);\n\n return new ENRKeyPair(_nodeId, _privateKey, _publicKey);\n }\n\n public sign(msg: Uint8Array): Uint8Array {\n return sign(this.privateKey, msg);\n }\n\n public verify(msg: Uint8Array, sig: Uint8Array): boolean {\n return verify(this.publicKey, msg, sig);\n }\n}\n\nfunction randomBytes(length: number): Uint8Array {\n if (typeof window !== \"undefined\" && window && window.crypto) {\n const array = new Uint8Array(length);\n window.crypto.getRandomValues(array);\n return array;\n } else {\n return crypto.randomBytes(length);\n }\n}\n","import Libp2p from \"libp2p\";\nimport { Peer } from \"libp2p/src/peer-store\";\n\n/**\n * Returns a pseudo-random peer that supports the given protocol.\n * Useful for protocols such as store and light push\n */\nexport async function selectRandomPeer(\n peersIter: AsyncIterable<Peer>\n): Promise<Peer | undefined> {\n const peers = [];\n for await (const peer of peersIter) {\n peers.push(peer);\n }\n\n if (peers.length === 0) return;\n\n const index = Math.round(Math.random() * (peers.length - 1));\n return peers[index];\n}\n\n/**\n * Returns the list of peers that supports the given protocol.\n */\nexport async function* getPeersForProtocol(\n libp2p: Libp2p,\n protocol: string\n): AsyncIterable<Peer> {\n for await (const peer of libp2p.peerStore.getPeers()) {\n if (!peer.protocols.includes(protocol)) {\n continue;\n }\n yield peer;\n }\n}\n","/**\n * Decode bytes to utf-8 string.\n */\n// Thanks https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330\nexport function bytesToUtf8(bytes: Uint8Array): string {\n let i = 0,\n s = \"\";\n while (i < bytes.length) {\n let c = bytes[i++];\n if (c > 127) {\n if (c > 191 && c < 224) {\n if (i >= bytes.length)\n throw new Error(\"UTF-8 decode: incomplete 2-byte sequence\");\n c = ((c & 31) << 6) | (bytes[i++] & 63);\n } else if (c > 223 && c < 240) {\n if (i + 1 >= bytes.length)\n throw new Error(\"UTF-8 decode: incomplete 3-byte sequence\");\n c = ((c & 15) << 12) | ((bytes[i++] & 63) << 6) | (bytes[i++] & 63);\n } else if (c > 239 && c < 248) {\n if (i + 2 >= bytes.length)\n throw new Error(\"UTF-8 decode: incomplete 4-byte sequence\");\n c =\n ((c & 7) << 18) |\n ((bytes[i++] & 63) << 12) |\n ((bytes[i++] & 63) << 6) |\n (bytes[i++] & 63);\n } else\n throw new Error(\n \"UTF-8 decode: unknown multi byte start 0x\" +\n c.toString(16) +\n \" at index \" +\n (i - 1)\n );\n }\n if (c <= 0xffff) s += String.fromCharCode(c);\n else if (c <= 0x10ffff) {\n c -= 0x10000;\n s += String.fromCharCode((c >> 10) | 0xd800);\n s += String.fromCharCode((c & 0x3ff) | 0xdc00);\n } else\n throw new Error(\n \"UTF-8 decode: code point 0x\" + c.toString(16) + \" exceeds UTF-16 reach\"\n );\n }\n return s;\n}\n\n/**\n * Encode utf-8 string to byte array\n */\n// Thanks https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330\nexport function utf8ToBytes(s: string): Uint8Array {\n let i = 0;\n const bytes = new Uint8Array(s.length * 4);\n for (let ci = 0; ci != s.length; ci++) {\n let c = s.charCodeAt(ci);\n if (c < 128) {\n bytes[i++] = c;\n continue;\n }\n if (c < 2048) {\n bytes[i++] = (c >> 6) | 192;\n } else {\n if (c > 0xd7ff && c < 0xdc00) {\n if (++ci >= s.length)\n throw new Error(\"UTF-8 encode: incomplete surrogate pair\");\n const c2 = s.charCodeAt(ci);\n if (c2 < 0xdc00 || c2 > 0xdfff)\n throw new Error(\n \"UTF-8 encode: second surrogate character 0x\" +\n c2.toString(16) +\n \" at index \" +\n ci +\n \" out of range\"\n );\n c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n bytes[i++] = (c >> 18) | 240;\n bytes[i++] = ((c >> 12) & 63) | 128;\n } else bytes[i++] = (c >> 12) | 224;\n bytes[i++] = ((c >> 6) & 63) | 128;\n }\n bytes[i++] = (c & 63) | 128;\n }\n return bytes.subarray(0, i);\n}\n","import { keccak256, Message } from \"js-sha3\";\n\n/**\n * Convert input to a Buffer.\n *\n * @deprecated Use `hexToBytes` instead.\n */\nexport function hexToBuf(hex: string | Buffer | Uint8Array): Buffer {\n if (typeof hex === \"string\") {\n return Buffer.from(hex.replace(/^0x/i, \"\"), \"hex\");\n } else {\n return Buffer.from(hex);\n }\n}\n\n/**\n * Convert input to a byte array.\n */\nexport function hexToBytes(hex: string | Uint8Array): Uint8Array {\n if (typeof hex === \"string\") {\n const _hex = hex.replace(/^0x/i, \"\");\n const bytes = [];\n for (let c = 0; c < _hex.length; c += 2)\n bytes.push(parseInt(_hex.substring(c, c + 2), 16));\n\n return new Uint8Array(bytes);\n }\n return hex;\n}\n\n/**\n * Convert input to hex string (no `0x` prefix).\n *\n * @deprecated Use `bytesToHex` instead.\n */\nexport function bufToHex(buf: Uint8Array | Buffer | ArrayBuffer): string {\n const _buf = Buffer.from(buf);\n return _buf.toString(\"hex\");\n}\n\n/**\n * Convert byte array to hex string (no `0x` prefix).\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n const hex = [];\n for (let i = 0; i < bytes.length; i++) {\n const current = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];\n hex.push((current >>> 4).toString(16));\n hex.push((current & 0xf).toString(16));\n }\n return hex.join(\"\");\n}\n\n/**\n * Compare both inputs, return true if they represent the same byte array.\n */\nexport function equalByteArrays(\n a: Uint8Array | string,\n b: Uint8Array | string\n): boolean {\n let _a: string;\n let _b: string;\n if (typeof a === \"string\") {\n _a = a.replace(/^0x/i, \"\").toLowerCase();\n } else {\n _a = bytesToHex(a);\n }\n\n if (typeof b === \"string\") {\n _b = b.replace(/^0x/i, \"\").toLowerCase();\n } else {\n _b = bytesToHex(b);\n }\n\n return _a === _b;\n}\n\n/**\n * Return Keccak-256 of the input.\n */\nexport function keccak256Buf(message: Message): Uint8Array {\n return new Uint8Array(keccak256.arrayBuffer(message));\n}\n\n/**\n * Convert base64 string to byte array.\n */\nexport function base64ToBytes(base64: string): Uint8Array {\n const e = new Map<string, number>();\n\n const len = base64.length;\n const res = [];\n const A = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\n for (let i = 0; i < 64; i++) {\n e.set(A.charAt(i), i);\n }\n e.set(\"+\", 62);\n e.set(\"/\", 63);\n\n let b = 0,\n l = 0,\n a;\n for (let i = 0; i < len; i++) {\n const c = e.get(base64.charAt(i));\n if (c === undefined)\n throw new Error(`Invalid base64 character ${base64.charAt(i)}`);\n b = (b << 6) + c;\n l += 6;\n while (l >= 8) {\n ((a = (b >>> (l -= 8)) & 0xff) || i < len - 2) && res.push(a);\n }\n }\n return new Uint8Array(res);\n}\n\n/**\n * Convert byte array to base64 string.\n */\nexport async function bytesToBase64(bytes: Uint8Array): Promise<string> {\n const base64url: string = await new Promise((r) => {\n const reader = new window.FileReader();\n reader.onload = (): void => r(reader.result as string);\n reader.readAsDataURL(new Blob([bytes]));\n });\n const base64 = base64url.split(\",\", 2)[1];\n // We want URL and Filename Safe base64: https://datatracker.ietf.org/doc/html/rfc4648#section-5\n // Without trailing padding\n return base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\n","import { Noise } from \"@chainsafe/libp2p-noise/dist/src/noise\";\nimport debug from \"debug\";\nimport Libp2p, { Connection, Libp2pModules, Libp2pOptions } from \"libp2p\";\nimport Libp2pBootstrap from \"libp2p-bootstrap\";\nimport { MuxedStream } from \"libp2p-interfaces/dist/src/stream-muxer/types\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore: No types available\nimport Mplex from \"libp2p-mplex\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore: No types available\nimport Websockets from \"libp2p-websockets\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore: No types available\nimport filters from \"libp2p-websockets/src/filters\";\nimport PingService from \"libp2p/src/ping\";\nimport { Multiaddr, multiaddr } from \"multiaddr\";\nimport PeerId from \"peer-id\";\n\nimport { Bootstrap, BootstrapOptions } from \"./discovery\";\nimport { LightPushCodec, WakuLightPush } from \"./waku_light_push\";\nimport { DecryptionMethod, WakuMessage } from \"./waku_message\";\nimport { RelayCodecs, WakuRelay } from \"./waku_relay\";\nimport { RelayPingContentTopic } from \"./waku_relay/constants\";\nimport { StoreCodec, WakuStore } from \"./waku_store\";\n\nconst websocketsTransportKey = Websockets.prototype[Symbol.toStringTag];\n\nexport const DefaultPingKeepAliveValueSecs = 0;\nexport const DefaultRelayKeepAliveValueSecs = 5 * 60;\n\n/**\n * DefaultPubSubTopic is the default gossipsub topic to use for Waku.\n */\nexport const DefaultPubSubTopic = \"/waku/2/default-waku/proto\";\n\nconst dbg = debug(\"waku:waku\");\n\nexport enum Protocols {\n Relay = \"relay\",\n Store = \"store\",\n LightPush = \"lightpush\",\n}\n\nexport interface CreateOptions {\n /**\n * The PubSub Topic to use. Defaults to {@link DefaultPubSubTopic}.\n *\n * One and only one pubsub topic is used by Waku. This is used by:\n * - WakuRelay to receive, route and send messages,\n * - WakuLightPush to send messages,\n * - WakuStore to retrieve messages.\n *\n * The usage of the default pubsub topic is recommended.\n * See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/) for details.\n *\n * @default {@link DefaultPubSubTopic}\n */\n pubSubTopic?: string;\n /**\n * Set keep alive frequency in seconds: Waku will send a `/ipfs/ping/1.0.0`\n * request to each peer after the set number of seconds. Set to 0 to disable.\n *\n * @default {@link DefaultPingKeepAliveValueSecs}\n */\n pingKeepAlive?: number;\n /**\n * Set keep alive frequency in seconds: Waku will send a ping message over\n * relay to each peer after the set number of seconds. Set to 0 to disable.\n *\n * @default {@link DefaultRelayKeepAliveValueSecs}\n */\n relayKeepAlive?: number;\n /**\n * You can pass options to the `Libp2p` instance used by {@link Waku} using the {@link CreateOptions.libp2p} property.\n * This property is the same type than the one passed to [`Libp2p.create`](https://github.com/libp2p/js-libp2p/blob/master/doc/API.md#create)\n * apart that we made the `modules` property optional and partial,\n * allowing its omission and letting Waku set good defaults.\n * Notes that some values are overridden by {@link Waku} to ensure it implements the Waku protocol.\n */\n libp2p?: Omit<Libp2pOptions & import(\"libp2p\").CreateOptions, \"modules\"> & {\n modules?: Partial<Libp2pModules>;\n };\n /**\n * Byte array used as key for the noise protocol used for connection encryption\n * by [`Libp2p.create`](https://github.com/libp2p/js-libp2p/blob/master/doc/API.md#create)\n * This is only used for test purposes to not run out of entropy during CI runs.\n */\n staticNoiseKey?: Uint8Array;\n /**\n * Use libp2p-bootstrap to discover and connect to new nodes.\n *\n * See [[BootstrapOptions]] for available parameters.\n *\n * Note: It overrides any other peerDiscovery modules that may have been set via\n * {@link CreateOptions.libp2p}.\n */\n bootstrap?: BootstrapOptions;\n decryptionKeys?: Array<Uint8Array | string>;\n}\n\nexport class Waku {\n public libp2p: Libp2p;\n public relay: WakuRelay;\n public store: WakuStore;\n public lightPush: WakuLightPush;\n\n private pingKeepAliveTimers: {\n [peer: string]: ReturnType<typeof setInterval>;\n };\n private relayKeepAliveTimers: {\n [peer: string]: ReturnType<typeof setInterval>;\n };\n\n private constructor(\n options: CreateOptions,\n libp2p: Libp2p,\n store: WakuStore,\n lightPush: WakuLightPush\n ) {\n this.libp2p = libp2p;\n this.relay = libp2p.pubsub as unknown as WakuRelay;\n this.store = store;\n this.lightPush = lightPush;\n this.pingKeepAliveTimers = {};\n this.relayKeepAliveTimers = {};\n\n const pingKeepAlive =\n options.pingKeepAlive || DefaultPingKeepAliveValueSecs;\n const relayKeepAlive =\n options.relayKeepAlive || DefaultRelayKeepAliveValueSecs;\n\n libp2p.connectionManager.on(\"peer:connect\", (connection: Connection) => {\n this.startKeepAlive(connection.remotePeer, pingKeepAlive, relayKeepAlive);\n });\n\n libp2p.connectionManager.on(\"peer:disconnect\", (connection: Connection) => {\n this.stopKeepAlive(connection.remotePeer);\n });\n\n options?.decryptionKeys?.forEach((key) => {\n this.addDecryptionKey(key);\n });\n }\n\n /**\n * Create and start new waku node.\n */\n static async create(options?: CreateOptions): Promise<Waku> {\n // Get an object in case options or libp2p are undefined\n const libp2pOpts = Object.assign({}, options?.libp2p);\n\n // Default for Websocket filter is `all`:\n // Returns all TCP and DNS based addresses, both with ws or wss.\n libp2pOpts.config = Object.assign(\n {\n transport: {\n [websocketsTransportKey]: {\n filter: filters.all,\n },\n },\n },\n options?.libp2p?.config\n );\n\n // Pass pubsub topic to relay\n if (options?.pubSubTopic) {\n libp2pOpts.config.pubsub = Object.assign(\n { pubSubTopic: options.pubSubTopic },\n libp2pOpts.config.pubsub\n );\n }\n\n libp2pOpts.modules = Object.assign({}, options?.libp2p?.modules);\n\n // Default transport for libp2p is Websockets\n libp2pOpts.modules = Object.assign(\n {\n transport: [Websockets],\n },\n options?.libp2p?.modules\n );\n\n // streamMuxer, connection encryption and pubsub are overridden\n // as those are the only ones currently supported by Waku nodes.\n libp2pOpts.modules = Object.assign(libp2pOpts.modules, {\n streamMuxer: [Mplex],\n connEncryption: [new Noise(options?.staticNoiseKey)],\n pubsub: WakuRelay,\n });\n\n if (options?.bootstrap) {\n const bootstrap = new Bootstrap(options?.bootstrap);\n\n if (bootstrap.getBootstrapPeers !== undefined) {\n try {\n const list = await bootstrap.getBootstrapPeers();\n\n // Note: this overrides any other peer discover\n libp2pOpts.modules = Object.assign(libp2pOpts.modules, {\n peerDiscovery: [Libp2pBootstrap],\n });\n\n libp2pOpts.config.peerDiscovery = {\n [Libp2pBootstrap.tag]: {\n list,\n enabled: true,\n },\n };\n } catch (e) {\n dbg(\"Failed to retrieve bootstrap nodes\", e);\n }\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: modules property is correctly set thanks to voodoo\n const libp2p = await Libp2p.create(libp2pOpts);\n\n const wakuStore = new WakuStore(libp2p, {\n pubSubTopic: options?.pubSubTopic,\n });\n const wakuLightPush = new WakuLightPush(libp2p);\n\n await libp2p.start();\n\n return new Waku(options ? options : {}, libp2p, wakuStore, wakuLightPush);\n }\n\n /**\n * Dials to the provided peer.\n *\n * @param peer The peer to dial\n * @param protocols Waku protocols we expect from the peer; Default to Relay\n */\n async dial(\n peer: PeerId | Multiaddr | string,\n protocols?: Protocols[]\n ): Promise<{\n stream: MuxedStream;\n protocol: string;\n }> {\n const _protocols = protocols ?? [Protocols.Relay];\n\n const codecs: string[] = [];\n if (_protocols.includes(Protocols.Relay)) {\n RelayCodecs.forEach((codec) => codecs.push(codec));\n }\n if (_protocols.includes(Protocols.Store)) {\n codecs.push(StoreCodec);\n }\n if (_protocols.includes(Protocols.LightPush)) {\n codecs.push(LightPushCodec);\n }\n\n return this.libp2p.dialProtocol(peer, codecs);\n }\n\n /**\n * Add peer to address book, it will be auto-dialed in the background.\n */\n addPeerToAddressBook(\n peerId: PeerId | string,\n multiaddrs: Multiaddr[] | string[]\n ): void {\n let peer;\n if (typeof peerId === \"string\") {\n peer = PeerId.createFromB58String(peerId);\n } else {\n peer = peerId;\n }\n const addresses = multiaddrs.map((addr: Multiaddr | string) => {\n if (typeof addr === \"string\") {\n return multiaddr(addr);\n } else {\n return addr;\n }\n });\n this.libp2p.peerStore.addressBook.set(peer, addresses);\n }\n\n async stop(): Promise<void> {\n return this.libp2p.stop();\n }\n\n /**\n * Register a decryption key to attempt decryption of messages received via\n * [[WakuRelay]] and [[WakuStore]]. This can either be a private key for\n * asymmetric encryption or a symmetric key.\n *\n * Strings must be in hex format.\n */\n addDecryptionKey(\n key: Uint8Array | string,\n options?: { method?: DecryptionMethod; contentTopics?: string[] }\n ): void {\n this.relay.addDecryptionKey(key, options);\n this.store.addDecryptionKey(key, options);\n }\n\n /**\n * Delete a decryption key that was used to attempt decryption of messages\n * received via [[WakuRelay]] or [[WakuStore]].\n *\n * Strings must be in hex format.\n */\n deleteDecryptionKey(key: Uint8Array | string): void {\n this.relay.deleteDecryptionKey(key);\n this.store.deleteDecryptionKey(key);\n }\n\n /**\n * Return the local multiaddr with peer id on which libp2p is listening.\n *\n * @throws if libp2p is not listening on localhost.\n */\n getLocalMultiaddrWithID(): string {\n const localMultiaddr = this.libp2p.multiaddrs.find((addr) =>\n addr.toString().match(/127\\.0\\.0\\.1/)\n );\n if (!localMultiaddr || localMultiaddr.toString() === \"\") {\n throw \"Not listening on localhost\";\n }\n return localMultiaddr + \"/p2p/\" + this.libp2p.peerId.toB58String();\n }\n\n /**\n * Wait for a remote peer to be ready given the passed protocols.\n * Useful when using the [[CreateOptions.bootstrap]] with [[Waku.create]].\n *\n * @default Remote peer must have Waku Store and Waku Relay enabled.\n */\n async waitForRemotePeer(protocols?: Protocols[]): Promise<void> {\n const desiredProtocols = protocols ?? [Protocols.Relay, Protocols.Store];\n\n const promises = [];\n\n if (desiredProtocols.includes(Protocols.Relay)) {\n const peers = this.relay.getPeers();\n\n if (peers.size == 0) {\n // No peer yet available, wait for a subscription\n const promise = new Promise<void>((resolve) => {\n this.libp2p.pubsub.once(\"pubsub:subscription-change\", () => {\n // Remote peer subscribed to topic, now wait for a heartbeat\n // so that the mesh is updated and the remote peer added to it\n this.libp2p.pubsub.once(\"gossipsub:heartbeat\", resolve);\n });\n });\n promises.push(promise);\n }\n }\n\n if (desiredProtocols.includes(Protocols.Store)) {\n let storePeerFound = false;\n\n for await (const _peer of this.store.peers) {\n storePeerFound = true;\n break;\n }\n\n if (!storePeerFound) {\n // No peer available for this protocol, waiting to connect to one.\n const promise = new Promise<void>((resolve) => {\n this.libp2p.peerStore.on(\n \"change:protocols\",\n ({ protocols: connectedPeerProtocols }) => {\n if (connectedPeerProtocols.includes(StoreCodec)) {\n dbg(\"Resolving for\", StoreCodec, connectedPeerProtocols);\n resolve();\n }\n }\n );\n });\n promises.push(promise);\n }\n }\n\n if (desiredProtocols.includes(Protocols.LightPush)) {\n let lightPushPeerFound = false;\n\n for await (const _peer of this.lightPush.peers) {\n lightPushPeerFound = true;\n break;\n }\n\n if (!lightPushPeerFound) {\n // No peer available for this protocol, waiting to connect to one.\n const promise = new Promise<void>((resolve) => {\n this.libp2p.peerStore.on(\n \"change:protocols\",\n ({ protocols: connectedPeerProtocols }) => {\n if (connectedPeerProtocols.includes(LightPushCodec)) {\n dbg(\"Resolving for\", LightPushCodec, connectedPeerProtocols);\n resolve();\n }\n }\n );\n });\n\n promises.push(promise);\n }\n }\n\n await Promise.all(promises);\n }\n\n private startKeepAlive(\n peerId: PeerId,\n pingPeriodSecs: number,\n relayPeriodSecs: number\n ): void {\n // Just in case a timer already exist for this peer\n this.stopKeepAlive(peerId);\n\n const peerIdStr = peerId.toB58String();\n\n if (pingPeriodSecs !== 0) {\n const pingService = new PingService(this.libp2p);\n this.pingKeepAliveTimers[peerIdStr] = setInterval(() => {\n pingService.ping(peerId).catch((e) => {\n dbg(`Ping failed (${peerIdStr})`, e);\n });\n }, pingPeriodSecs * 1000);\n }\n\n if (relayPeriodSecs !== 0) {\n this.relayKeepAliveTimers[peerIdStr] = setInterval(() => {\n WakuMessage.fromBytes(new Uint8Array(), RelayPingContentTopic).then(\n (wakuMsg) => this.relay.send(wakuMsg)\n );\n }, relayPeriodSecs * 1000);\n }\n }\n\n private stopKeepAlive(peerId: PeerId): void {\n const peerIdStr = peerId.toB58String();\n\n if (this.pingKeepAliveTimers[peerIdStr]) {\n clearInterval(this.pingKeepAliveTimers[peerIdStr]);\n delete this.pingKeepAliveTimers[peerIdStr];\n }\n\n if (this.relayKeepAliveTimers[peerIdStr]) {\n clearInterval(this.relayKeepAliveTimers[peerIdStr]);\n delete this.relayKeepAliveTimers[peerIdStr];\n }\n }\n}\n","import concat from \"it-concat\";\nimport lp from \"it-length-prefixed\";\nimport pipe from \"it-pipe\";\nimport Libp2p from \"libp2p\";\nimport { Peer } from \"libp2p/src/peer-store\";\nimport PeerId from \"peer-id\";\n\nimport { PushResponse } from \"../../proto/waku/v2/light_push\";\nimport { getPeersForProtocol, selectRandomPeer } from \"../select_peer\";\nimport { DefaultPubSubTopic } from \"../waku\";\nimport { WakuMessage } from \"../waku_message\";\n\nimport { PushRPC } from \"./push_rpc\";\n\nexport const LightPushCodec = \"/vac/waku/lightpush/2.0.0-beta1\";\nexport { PushResponse };\n\nexport interface CreateOptions {\n /**\n * The PubSub Topic to use. Defaults to {@link DefaultPubSubTopic}.\n *\n * The usage of the default pubsub topic is recommended.\n * See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/) for details.\n *\n * @default {@link DefaultPubSubTopic}\n */\n pubSubTopic?: string;\n}\n\nexport interface PushOptions {\n peerId?: PeerId;\n pubSubTopic?: string;\n}\n\n/**\n * Implements the [Waku v2 Light Push protocol](https://rfc.vac.dev/spec/19/).\n */\nexport class WakuLightPush {\n pubSubTopic: string;\n\n constructor(public libp2p: Libp2p, options?: CreateOptions) {\n if (options?.pubSubTopic) {\n this.pubSubTopic = options.pubSubTopic;\n } else {\n this.pubSubTopic = DefaultPubSubTopic;\n }\n }\n\n async push(\n message: WakuMessage,\n opts?: PushOptions\n ): Promise<PushResponse | null> {\n let peer;\n if (opts?.peerId) {\n peer = await this.libp2p.peerStore.get(opts.peerId);\n if (!peer) throw \"Peer is unknown\";\n } else {\n peer = await this.randomPeer;\n }\n if (!peer) throw \"No peer available\";\n if (!peer.protocols.includes(LightPushCodec))\n throw \"Peer does not register waku light push protocol\";\n\n const connection = this.libp2p.connectionManager.get(peer.id);\n if (!connection) throw \"Failed to get a connection to the peer\";\n\n const { stream } = await connection.newStream(LightPushCodec);\n try {\n const pubSubTopic = opts?.pubSubTopic\n ? opts.pubSubTopic\n : this.pubSubTopic;\n const query = PushRPC.createRequest(message, pubSubTopic);\n const res = await pipe(\n [query.encode()],\n lp.encode(),\n stream,\n lp.decode(),\n concat\n );\n try {\n const response = PushRPC.decode(res.slice()).response;\n\n if (!response) {\n console.log(\"No response in PushRPC\");\n return null;\n }\n\n return response;\n } catch (err) {\n console.log(\"Failed to decode push reply\", err);\n }\n } catch (err) {\n console.log(\"Failed to send waku light push request\", err);\n }\n return null;\n }\n\n /**\n * Returns known peers from the address book (`libp2p.peerStore`) that support\n * light push protocol. Waku may or may not be currently connected to these peers.\n */\n get peers(): AsyncIterable<Peer> {\n return getPeersForProtocol(this.libp2p, LightPushCodec);\n }\n\n /**\n * Returns a random peer that supports light push protocol from the address\n * book (`libp2p.peerStore`). Waku may or may not be currently connected to\n * this peer.\n */\n get randomPeer(): Promise<Peer | undefined> {\n return selectRandomPeer(this.peers);\n }\n}\n","import { Reader } from \"protobufjs/minimal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport * as proto from \"../../proto/waku/v2/light_push\";\nimport { WakuMessage } from \"../waku_message\";\n\nexport class PushRPC {\n public constructor(public proto: proto.PushRPC) {}\n\n static createRequest(message: WakuMessage, pubSubTopic: string): PushRPC {\n return new PushRPC({\n requestId: uuid(),\n request: {\n message: message.proto,\n pubSubTopic: pubSubTopic,\n },\n response: undefined,\n });\n }\n\n static decode(bytes: Uint8Array): PushRPC {\n const res = proto.PushRPC.decode(Reader.create(bytes));\n return new PushRPC(res);\n }\n\n encode(): Uint8Array {\n return proto.PushRPC.encode(this.proto).finish();\n }\n\n get query(): proto.PushRequest | undefined {\n return this.proto.request;\n }\n\n get response(): proto.PushResponse | undefined {\n return this.proto.response;\n }\n}\n","import debug from \"debug\";\nimport { Reader } from \"protobufjs/minimal\";\n\n// Protecting the user from protobuf oddities\nimport * as proto from \"../../proto/waku/v2/message\";\nimport { bytesToUtf8, utf8ToBytes } from \"../utf8\";\n\nimport * as version_1 from \"./version_1\";\n\nconst DefaultVersion = 0;\nconst dbg = debug(\"waku:message\");\n\nexport enum DecryptionMethod {\n Asymmetric = \"asymmetric\",\n Symmetric = \"symmetric\",\n}\n\nexport interface Options {\n /**\n * Timestamp to set on the message, defaults to now if not passed.\n */\n timestamp?: Date;\n /**\n * Public Key to use to encrypt the messages using ECIES (Asymmetric Encryption).\n *\n * @throws if both `encPublicKey` and `symKey` are passed\n */\n encPublicKey?: Uint8Array | string;\n /**\n * Key to use to encrypt the messages using AES (Symmetric Encryption).\n *\n * @throws if both `encPublicKey` and `symKey` are passed\n */\n symKey?: Uint8Array | string;\n /**\n * Private key to use to sign the message, either `encPublicKey` or `symKey` must be provided as only\n * encrypted messages are signed.\n */\n sigPrivKey?: Uint8Array;\n}\n\nexport class WakuMessage {\n private constructor(\n public proto: proto.WakuMessage,\n private _signaturePublicKey?: Uint8Array,\n private _signature?: Uint8Array\n ) {}\n\n /**\n * Create Message with an utf-8 string as payload.\n */\n static async fromUtf8String(\n utf8: string,\n contentTopic: string,\n opts?: Options\n ): Promise<WakuMessage> {\n const payload = utf8ToBytes(utf8);\n return WakuMessage.fromBytes(payload, contentTopic, opts);\n }\n\n /**\n * Create a Waku Message with the given payload.\n *\n * By default, the payload is kept clear (version 0).\n * If `opts.encPublicKey` is passed, the payload is encrypted using\n * asymmetric encryption (version 1).\n *\n * If `opts.sigPrivKey` is passed and version 1 is used, the payload is signed\n * before encryption.\n *\n * @throws if both `opts.encPublicKey` and `opt.symKey` are passed\n */\n static async fromBytes(\n payload: Uint8Array,\n contentTopic: string,\n opts?: Options\n ): Promise<WakuMessage> {\n const { timestamp, encPublicKey, symKey, sigPrivKey } = Object.assign(\n { timestamp: new Date() },\n opts ? opts : {}\n );\n\n let _payload = payload;\n let version = DefaultVersion;\n let sig;\n\n if (encPublicKey && symKey) {\n throw \"Pass either `encPublicKey` or `symKey`, not both.\";\n }\n\n if (encPublicKey) {\n const enc = version_1.clearEncode(_payload, sigPrivKey);\n _payload = await version_1.encryptAsymmetric(enc.payload, encPublicKey);\n sig = enc.sig;\n version = 1;\n } else if (symKey) {\n const enc = version_1.clearEncode(_payload, sigPrivKey);\n _payload = await version_1.encryptSymmetric(enc.payload, symKey);\n sig = enc.sig;\n version = 1;\n }\n\n return new WakuMessage(\n {\n payload: _payload,\n timestamp: timestamp.valueOf() / 1000,\n version,\n contentTopic,\n },\n sig?.publicKey,\n sig?.signature\n );\n }\n\n /**\n * Decode a byte array into Waku Message.\n *\n * @params bytes The message encoded using protobuf as defined in [14/WAKU2-MESSAGE](https://rfc.vac.dev/spec/14/).\n * @params decryptionKeys If the payload is encrypted (version = 1), then the\n * keys are used to attempt decryption of the message. The passed key can either\n * be asymmetric private keys or symmetric keys, both method are tried for each\n * key until the message is decrypted or combinations are run out.\n */\n static async decode(\n bytes: Uint8Array,\n decryptionKeys?: Array<{\n key: Uint8Array;\n method?: DecryptionMethod;\n contentTopic?: string[];\n }>\n ): Promise<WakuMessage | undefined> {\n const protoBuf = proto.WakuMessage.decode(Reader.create(bytes));\n\n return WakuMessage.decodeProto(protoBuf, decryptionKeys);\n }\n\n /**\n * Decode and decrypt Waku Message Protobuf Object into Waku Message.\n *\n * @params protoBuf The message to decode and decrypt.\n * @params decryptionKeys If the payload is encrypted (version = 1), then the\n * keys are used to attempt decryption of the message. The passed key can either\n * be asymmetric private keys or symmetric keys, both method are tried for each\n * key until the message is decrypted or combinations are run out.\n */\n static async decodeProto(\n protoBuf: proto.WakuMessage,\n decryptionKeys?: Array<{\n key: Uint8Array;\n method?: DecryptionMethod;\n contentTopics?: string[];\n }>\n ): Promise<WakuMessage | undefined> {\n if (protoBuf.payload === undefined) {\n dbg(\"Payload is undefined\");\n return;\n }\n const payload = protoBuf.payload;\n\n let signaturePublicKey;\n let signature;\n if (protoBuf.version === 1 && protoBuf.payload) {\n if (decryptionKeys === undefined) {\n dbg(\"Payload is encrypted but no private keys have been provided.\");\n return;\n }\n\n // Returns a bunch of `undefined` and hopefully one decrypted result\n const allResults = await Promise.all(\n decryptionKeys.map(async ({ key, method, contentTopics }) => {\n if (\n !contentTopics ||\n (protoBuf.contentTopic &&\n contentTopics.includes(protoBuf.contentTopic))\n ) {\n switch (method) {\n case DecryptionMethod.Asymmetric:\n try {\n return await version_1.decryptAsymmetric(payload, key);\n } catch (e) {\n dbg(\n \"Failed to decrypt message using symmetric encryption despite decryption method being specified\",\n e\n );\n return;\n }\n case DecryptionMethod.Symmetric:\n try {\n return await version_1.decryptSymmetric(payload, key);\n } catch (e) {\n dbg(\n \"Failed to decrypt message using asymmetric encryption despite decryption method being specified\",\n e\n );\n return;\n }\n default:\n try {\n return await version_1.decryptSymmetric(payload, key);\n } catch (e) {\n dbg(\n \"Failed to decrypt message using symmetric encryption\",\n e\n );\n try {\n return await version_1.decryptAsymmetric(payload, key);\n } catch (e) {\n dbg(\n \"Failed to decrypt message using asymmetric encryption\",\n e\n );\n return;\n }\n }\n }\n } else {\n // No key available for this content topic\n return;\n }\n })\n );\n\n const isDefined = (dec: Uint8Array | undefined): dec is Uint8Array => {\n return !!dec;\n };\n\n const decodedResults = allResults.filter(isDefined);\n\n if (decodedResults.length === 0) {\n dbg(\"Failed to decrypt payload.\");\n return;\n }\n const dec = decodedResults[0];\n\n const res = await version_1.clearDecode(dec);\n if (!res) {\n dbg(\"Failed to decode payload.\");\n return;\n }\n Object.assign(protoBuf, { payload: res.payload });\n signaturePublicKey = res.sig?.publicKey;\n signature = res.sig?.signature;\n }\n\n return new WakuMessage(protoBuf, signaturePublicKey, signature);\n }\n\n encode(): Uint8Array {\n return proto.WakuMessage.encode(this.proto).finish();\n }\n\n get payloadAsUtf8(): string {\n if (!this.proto.payload) {\n return \"\";\n }\n\n return bytesToUtf8(this.proto.payload);\n }\n\n get payload(): Uint8Array | undefined {\n return this.proto.payload;\n }\n\n get contentTopic(): string | undefined {\n return this.proto.contentTopic;\n }\n\n get version(): number | undefined {\n return this.proto.version;\n }\n\n get timestamp(): Date | undefined {\n if (this.proto.timestamp) {\n return new Date(this.proto.timestamp * 1000);\n }\n return;\n }\n\n /**\n * The public key used to sign the message.\n *\n * MAY be present if the message is version 1.\n */\n get signaturePublicKey(): Uint8Array | undefined {\n return this._signaturePublicKey;\n }\n\n /**\n * The signature of the message.\n *\n * MAY be present if the message is version 1.\n */\n get signature(): Uint8Array | undefined {\n return this._signature;\n }\n}\n","import { IvSize } from \"./index\";\n\ndeclare global {\n interface Window {\n msCrypto?: Crypto;\n }\n interface Crypto {\n webkitSubtle?: SubtleCrypto;\n }\n}\n\nconst crypto = window.crypto || window.msCrypto;\nconst subtle: SubtleCrypto = crypto.subtle || crypto.webkitSubtle;\n\nconst Algorithm = { name: \"AES-GCM\", length: 128 };\n\nif (subtle === undefined) {\n throw new Error(\"Failed to load Subtle CryptoAPI\");\n}\n\nexport async function encrypt(\n iv: Buffer | Uint8Array,\n key: Buffer,\n clearText: Buffer\n): Promise<Buffer> {\n return subtle\n .importKey(\"raw\", key, Algorithm, false, [\"encrypt\"])\n .then((cryptoKey) =>\n subtle.encrypt({ iv, ...Algorithm }, cryptoKey, clearText)\n )\n .then(Buffer.from);\n}\n\nexport async function decrypt(\n iv: Buffer,\n key: Buffer,\n cipherText: Buffer\n): Promise<Buffer> {\n return subtle\n .importKey(\"raw\", key, Algorithm, false, [\"decrypt\"])\n .then((cryptoKey) =>\n subtle.decrypt({ iv, ...Algorithm }, cryptoKey, cipherText)\n )\n .then(Buffer.from);\n}\n\nexport function generateIv(): Uint8Array {\n const iv = new Uint8Array(IvSize);\n crypto.getRandomValues(iv);\n return iv;\n}\n","export const SymmetricKeySize = 32;\nexport const IvSize = 12;\nexport const TagSize = 16;\n\nexport interface Symmetric {\n /**\n * Proceed with symmetric encryption of `clearText` value.\n */\n encrypt: (\n iv: Buffer | Uint8Array,\n key: Buffer,\n clearText: Buffer\n ) => Promise<Buffer>;\n /**\n * Proceed with symmetric decryption of `cipherText` value.\n */\n decrypt: (iv: Buffer, key: Buffer, cipherText: Buffer) => Promise<Buffer>;\n /**\n * Generate an Initialization Vector (iv) for for Symmetric encryption purposes.\n */\n generateIv: () => Uint8Array;\n}\n\nexport let symmetric: Symmetric = {} as unknown as Symmetric;\n\nimport(\"./browser\")\n .then((mod) => {\n symmetric = mod;\n })\n .catch((eBrowser) => {\n import(\"./node\")\n .then((mod) => {\n symmetric = mod;\n })\n .catch((eNode) => {\n throw `Could not load any symmetric crypto modules: ${eBrowser}, ${eNode}`;\n });\n });\n","import { createCipheriv, createDecipheriv, randomBytes } from \"crypto\";\n\nimport { IvSize, TagSize } from \"./index\";\n\nconst Algorithm = \"aes-256-gcm\";\n\nexport async function encrypt(\n iv: Buffer | Uint8Array,\n key: Buffer,\n clearText: Buffer\n): Promise<Buffer> {\n const cipher = createCipheriv(Algorithm, key, iv);\n const a = cipher.update(clearText);\n const b = cipher.final();\n const tag = cipher.getAuthTag();\n return Buffer.concat([a, b, tag]);\n}\n\nexport async function decrypt(\n iv: Buffer,\n key: Buffer,\n data: Buffer\n): Promise<Buffer> {\n const tagStart = data.length - TagSize;\n const cipherText = data.slice(0, tagStart);\n const tag = data.slice(tagStart);\n const decipher = createDecipheriv(Algorithm, key, iv);\n decipher.setAuthTag(tag);\n const a = decipher.update(cipherText);\n const b = decipher.final();\n return Buffer.concat([a, b]);\n}\n\nexport function generateIv(): Buffer {\n return randomBytes(IvSize);\n}\n","import { Buffer } from \"buffer\";\nimport * as crypto from \"crypto\";\n\nimport * as ecies from \"ecies-geth\";\nimport { keccak256 } from \"js-sha3\";\nimport * as secp256k1 from \"secp256k1\";\n\nimport { hexToBytes } from \"../utils\";\n\nimport { IvSize, symmetric, SymmetricKeySize } from \"./symmetric\";\n\nconst FlagsLength = 1;\nconst FlagMask = 3; // 0011\nconst IsSignedMask = 4; // 0100\nconst PaddingTarget = 256;\nconst SignatureLength = 65;\n\nexport const PrivateKeySize = 32;\n\n/**\n * Encode the payload pre-encryption.\n *\n * @internal\n * @param messagePayload: The payload to include in the message\n * @param sigPrivKey: If set, a signature using this private key is added.\n * @returns The encoded payload, ready for encryption using {@link encryptAsymmetric}\n * or {@link encryptSymmetric}.\n */\nexport function clearEncode(\n messagePayload: Uint8Array,\n sigPrivKey?: Uint8Array\n): { payload: Uint8Array; sig?: Signature } {\n let envelope = Buffer.from([0]); // No flags\n envelope = addPayloadSizeField(envelope, messagePayload);\n envelope = Buffer.concat([envelope, Buffer.from(messagePayload)]);\n\n // Calculate padding:\n let rawSize =\n FlagsLength +\n getSizeOfPayloadSizeField(messagePayload) +\n messagePayload.length;\n\n if (sigPrivKey) {\n rawSize += SignatureLength;\n }\n\n const remainder = rawSize % PaddingTarget;\n const paddingSize = PaddingTarget - remainder;\n const pad = Buffer.from(randomBytes(paddingSize));\n\n if (!validateDataIntegrity(pad, paddingSize)) {\n throw new Error(\"failed to generate random padding of size \" + paddingSize);\n }\n\n envelope = Buffer.concat([envelope, pad]);\n\n let sig;\n if (sigPrivKey) {\n envelope[0] |= IsSignedMask;\n const hash = keccak256(envelope);\n const s = secp256k1.ecdsaSign(hexToBytes(hash), sigPrivKey);\n envelope = Buffer.concat([envelope, s.signature, Buffer.from([s.recid])]);\n sig = {\n signature: Buffer.from(s.signature),\n publicKey: getPublicKey(sigPrivKey),\n };\n }\n\n return { payload: envelope, sig };\n}\n\nexport type Signature = {\n signature: Uint8Array;\n publicKey: Uint8Array;\n};\n\n/**\n * Decode a decrypted payload.\n *\n * @internal\n */\nexport function clearDecode(\n message: Uint8Array | Buffer\n): { payload: Uint8Array; sig?: Signature } | undefined {\n const buf = Buffer.from(message);\n let start = 1;\n let sig;\n\n const sizeOfPayloadSizeField = buf.readUIntLE(0, 1) & FlagMask;\n\n if (sizeOfPayloadSizeField === 0) return;\n\n const payloadSize = buf.readUIntLE(start, sizeOfPayloadSizeField);\n start += sizeOfPayloadSizeField;\n const payload = buf.slice(start, start + payloadSize);\n\n const isSigned = (buf.readUIntLE(0, 1) & IsSignedMask) == IsSignedMask;\n if (isSigned) {\n const signature = getSignature(buf);\n const hash = getHash(buf, isSigned);\n const publicKey = ecRecoverPubKey(hash, signature);\n sig = { signature, publicKey };\n }\n\n return { payload, sig };\n}\n\n/**\n * Proceed with Asymmetric encryption of the data as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/).\n * The data MUST be flags | payload-length | payload | [signature].\n * The returned result can be set to `WakuMessage.payload`.\n *\n * @internal\n */\nexport async function encryptAsymmetric(\n data: Uint8Array | Buffer,\n publicKey: Uint8Array | Buffer | string\n): Promise<Uint8Array> {\n return ecies.encrypt(Buffer.from(hexToBytes(publicKey)), Buffer.from(data));\n}\n\n/**\n * Proceed with Asymmetric decryption of the data as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/).\n * The return data is expect to be flags | payload-length | payload | [signature].\n *\n * @internal\n */\nexport async function decryptAsymmetric(\n payload: Uint8Array | Buffer,\n privKey: Uint8Array | Buffer\n): Promise<Uint8Array> {\n return ecies.decrypt(Buffer.from(privKey), Buffer.from(payload));\n}\n\n/**\n * Proceed with Symmetric encryption of the data as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/).\n *\n * @param data The data to encrypt, expected to be `flags | payload-length | payload | [signature]`.\n * @param key The key to use for encryption.\n * @returns The decrypted data, `cipherText | tag | iv` and can be set to `WakuMessage.payload`.\n *\n * @internal\n */\nexport async function encryptSymmetric(\n data: Uint8Array | Buffer,\n key: Uint8Array | Buffer | string\n): Promise<Uint8Array> {\n const iv = symmetric.generateIv();\n\n // Returns `cipher | tag`\n const cipher = await symmetric.encrypt(\n iv,\n Buffer.from(hexToBytes(key)),\n Buffer.from(data)\n );\n return Buffer.concat([cipher, Buffer.from(iv)]);\n}\n\n/**\n * Proceed with Symmetric decryption of the data as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/).\n *\n * @param payload The cipher data, it is expected to be `cipherText | tag | iv`.\n * @param key The key to use for decryption.\n * @returns The decrypted data, expected to be `flags | payload-length | payload | [signature]`.\n *\n * @internal\n */\nexport async function decryptSymmetric(\n payload: Uint8Array | Buffer,\n key: Uint8Array | Buffer | string\n): Promise<Uint8Array> {\n const data = Buffer.from(payload);\n const ivStart = data.length - IvSize;\n const cipher = data.slice(0, ivStart);\n const iv = data.slice(ivStart);\n\n return symmetric.decrypt(iv, Buffer.from(hexToBytes(key)), cipher);\n}\n\n/**\n * Generate a new private key to be used for asymmetric encryption.\n *\n * Use {@link getPublicKey} to get the corresponding Public Key.\n */\nexport function generatePrivateKey(): Uint8Array {\n return randomBytes(PrivateKeySize);\n}\n\n/**\n * Generate a new symmetric key to be used for symmetric encryption.\n */\nexport function generateSymmetricKey(): Uint8Array {\n return randomBytes(SymmetricKeySize);\n}\n\n/**\n * Return the public key for the given private key, to be used for asymmetric\n * encryption.\n */\nexport function getPublicKey(privateKey: Uint8Array | Buffer): Uint8Array {\n return secp256k1.publicKeyCreate(privateKey, false);\n}\n\n/**\n * Computes the flags & auxiliary-field as per [26/WAKU-PAYLOAD](https://rfc.vac.dev/spec/26/).\n */\nfunction addPayloadSizeField(msg: Buffer, payload: Uint8Array): Buffer {\n const fieldSize = getSizeOfPayloadSizeField(payload);\n let field = Buffer.alloc(4);\n field.writeUInt32LE(payload.length, 0);\n field = field.slice(0, fieldSize);\n msg = Buffer.concat([msg, field]);\n msg[0] |= fieldSize;\n return msg;\n}\n\n/**\n * Returns the size of the auxiliary-field which in turns contains the payload size\n */\nfunction getSizeOfPayloadSizeField(payload: Uint8Array): number {\n let s = 1;\n for (let i = payload.length; i >= 256; i /= 256) {\n s++;\n }\n return s;\n}\n\nfunction validateDataIntegrity(\n value: Uint8Array,\n expectedSize: number\n): boolean {\n if (value.length !== expectedSize) {\n return false;\n }\n\n return !(\n expectedSize > 3 && Buffer.from(value).equals(Buffer.alloc(value.length))\n );\n}\n\nfunction getSignature(message: Buffer): Buffer {\n return message.slice(message.length - SignatureLength, message.length);\n}\n\nfunction getHash(message: Buffer, isSigned: boolean): string {\n if (isSigned) {\n return keccak256(message.slice(0, message.length - SignatureLength));\n }\n return keccak256(message);\n}\n\nfunction ecRecoverPubKey(messageHash: string, signature: Buffer): Uint8Array {\n const recovery = signature.slice(64).readIntBE(0, 1);\n return secp256k1.ecdsaRecover(\n signature.slice(0, 64),\n recovery,\n hexToBytes(messageHash),\n false\n );\n}\n\nfunction randomBytes(length: number): Uint8Array {\n if (typeof window !== \"undefined\" && window && window.crypto) {\n const array = new Uint8Array(length);\n window.crypto.getRandomValues(array);\n return array;\n } else {\n return crypto.randomBytes(length);\n }\n}\n","export const second = 1000;\nexport const minute = 60 * second;\n\n/**\n * RelayCodec is the libp2p identifier for the waku relay protocol\n */\nexport const RelayCodecs = [\n \"/vac/waku/relay/2.0.0-beta2\",\n \"/vac/waku/relay/2.0.0\",\n];\n\nexport const RelayPingContentTopic = \"/relay-ping/1/ping/null\";\n\n/**\n * RelayGossipFactor affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to RelayGossipFactor * (total number of non-mesh peers), or\n * RelayDlazy, whichever is greater.\n */\nexport const RelayGossipFactor = 0.25;\n\n/**\n * GossipsubHeartbeatInitialDelay is the short delay before the heartbeat timer begins\n * after the router is initialized.\n */\nexport const RelayHeartbeatInitialDelay = 100;\n\n/**\n * RelayHeartbeatInterval controls the time between heartbeats.\n */\nexport const RelayHeartbeatInterval = second;\n\n/**\n * RelayPrunePeers controls the number of peers to include in prune Peer eXchange.\n * When we prune a peer that's eligible for PX (has a good score, etc), we will try to\n * send them signed peer records for up to RelayPrunePeers other peers that we\n * know of.\n */\nexport const RelayPrunePeers = 16;\n\n/**\n * RelayPruneBackoff controls the backoff time for pruned peers. This is how long\n * a peer must wait before attempting to graft into our mesh again after being pruned.\n * When pruning a peer, we send them our value of RelayPruneBackoff so they know\n * the minimum time to wait. Peers running older versions may not send a backoff time,\n * so if we receive a prune message without one, we will wait at least RelayPruneBackoff\n * before attempting to re-graft.\n */\nexport const RelayPruneBackoff = minute;\n\n/**\n * RelayFanoutTTL controls how long we keep track of the fanout state. If it's been\n * RelayFanoutTTL since we've published to a topic that we're not subscribed to,\n * we'll delete the fanout map for that topic.\n */\nexport const RelayFanoutTTL = minute;\n\n/**\n * RelayOpportunisticGraftTicks is the number of heartbeat ticks for attempting to improve the mesh\n * with opportunistic grafting. Every RelayOpportunisticGraftTicks we will attempt to select some\n * high-scoring mesh peers to replace lower-scoring ones, if the median score of our mesh peers falls\n * below a threshold\n */\nexport const RelayOpportunisticGraftTicks = 60;\n\n/**\n * RelayOpportunisticGraftPeers is the number of peers to opportunistically graft.\n */\nexport const RelayOpportunisticGraftPeers = 2;\n\n/**\n * RelayMaxIHaveLength is the maximum number of messages to include in an IHAVE message.\n * Also controls the maximum number of IHAVE ids we will accept and request with IWANT from a\n * peer within a heartbeat, to protect from IHAVE floods. You should adjust this value from the\n * default if your system is pushing more than 5000 messages in GossipsubHistoryGossip heartbeats;\n * with the defaults this is 1666 messages/s.\n */\nexport const RelayMaxIHaveLength = 5000;\n","import Gossipsub from \"libp2p-gossipsub\";\nimport { shuffle } from \"libp2p-gossipsub/src/utils\";\n\nimport { RelayCodecs } from \"./index\";\n\n/**\n * Given a topic, returns up to count peers subscribed to that topic\n * that pass an optional filter function\n *\n * @param {Gossipsub} router\n * @param {String} topic\n * @param {Number} count\n * @param {Function} [filter] a function to filter acceptable peers\n * @returns {Set<string>}\n *\n */\nexport function getRelayPeers(\n router: Gossipsub,\n topic: string,\n count: number,\n filter: (id: string) => boolean = (): boolean => true\n): Set<string> {\n const peersInTopic = router.topics.get(topic);\n if (!peersInTopic) {\n return new Set();\n }\n\n // Adds all peers using our protocol\n // that also pass the filter function\n let peers: string[] = [];\n peersInTopic.forEach((id: string) => {\n const peerStreams = router.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (RelayCodecs.includes(peerStreams.protocol) && filter(id)) {\n peers.push(id);\n }\n });\n\n // Pseudo-randomly shuffles peers\n peers = shuffle(peers);\n if (count > 0 && peers.length > count) {\n peers = peers.slice(0, count);\n }\n\n return new Set(peers);\n}\n","import debug from \"debug\";\nimport Libp2p from \"libp2p\";\nimport Gossipsub from \"libp2p-gossipsub\";\nimport { AddrInfo, MessageIdFunction } from \"libp2p-gossipsub/src/interfaces\";\nimport { MessageCache } from \"libp2p-gossipsub/src/message-cache\";\nimport { RPC } from \"libp2p-gossipsub/src/message/rpc\";\nimport {\n PeerScoreParams,\n PeerScoreThresholds,\n} from \"libp2p-gossipsub/src/score\";\nimport { createGossipRpc, shuffle } from \"libp2p-gossipsub/src/utils\";\nimport { InMessage } from \"libp2p-interfaces/src/pubsub\";\nimport { SignaturePolicy } from \"libp2p-interfaces/src/pubsub/signature-policy\";\nimport PeerId from \"peer-id\";\n\nimport { hexToBytes } from \"../utils\";\nimport { CreateOptions, DefaultPubSubTopic } from \"../waku\";\nimport { DecryptionMethod, WakuMessage } from \"../waku_message\";\n\nimport * as constants from \"./constants\";\nimport { RelayCodecs } from \"./constants\";\nimport { getRelayPeers } from \"./get_relay_peers\";\nimport { RelayHeartbeat } from \"./relay_heartbeat\";\n\nconst dbg = debug(\"waku:relay\");\n\nexport { RelayCodecs };\n\n/**\n * See constructor libp2p-gossipsub [API](https://github.com/ChainSafe/js-libp2p-gossipsub#api).\n */\nexport interface GossipOptions {\n emitSelf: boolean;\n gossipIncoming: boolean;\n fallbackToFloodsub: boolean;\n floodPublish: boolean;\n doPX: boolean;\n msgIdFn: MessageIdFunction;\n messageCache: MessageCache;\n // This option is always overridden\n // globalSignaturePolicy: string;\n scoreParams: Partial<PeerScoreParams>;\n scoreThresholds: Partial<PeerScoreThresholds>;\n directPeers: AddrInfo[];\n D: number;\n Dlo: number;\n Dhi: number;\n Dscore: number;\n Dout: number;\n Dlazy: number;\n}\n\n/**\n * Implements the [Waku v2 Relay protocol]{@link https://rfc.vac.dev/spec/11/}.\n * Must be passed as a `pubsub` module to a {Libp2p} instance.\n *\n * @implements {require('libp2p-interfaces/src/pubsub')}\n * @noInheritDoc\n */\nexport class WakuRelay extends Gossipsub {\n heartbeat: RelayHeartbeat;\n pubSubTopic: string;\n\n public decryptionKeys: Map<\n Uint8Array,\n { method?: DecryptionMethod; contentTopics?: string[] }\n >;\n\n /**\n * observers called when receiving new message.\n * Observers under key `\"\"` are always called.\n */\n public observers: {\n [contentTopic: string]: Set<(message: WakuMessage) => void>;\n };\n\n constructor(\n libp2p: Libp2p,\n options?: Partial<CreateOptions & GossipOptions>\n ) {\n super(\n libp2p,\n Object.assign(options, {\n // Ensure that no signature is included nor expected in the messages.\n globalSignaturePolicy: SignaturePolicy.StrictNoSign,\n })\n );\n\n this.heartbeat = new RelayHeartbeat(this);\n this.observers = {};\n this.decryptionKeys = new Map();\n\n const multicodecs = constants.RelayCodecs;\n\n Object.assign(this, { multicodecs });\n\n this.pubSubTopic = options?.pubSubTopic || DefaultPubSubTopic;\n\n options?.decryptionKeys?.forEach((key) => {\n this.addDecryptionKey(key);\n });\n }\n\n /**\n * Mounts the gossipsub protocol onto the libp2p node\n * and subscribes to the default topic.\n *\n * @override\n * @returns {void}\n */\n public async start(): Promise<void> {\n await super.start();\n this.subscribe(this.pubSubTopic);\n }\n\n /**\n * Send Waku message.\n *\n * @param {WakuMessage} message\n * @returns {Promise<void>}\n */\n public async send(message: WakuMessage): Promise<void> {\n const msg = message.encode();\n await super.publish(this.pubSubTopic, msg);\n }\n\n /**\n * Register a decryption key to attempt decryption of received messages.\n * This can either be a private key for asymmetric encryption or a symmetric\n * key. `WakuRelay` will attempt to decrypt messages using both methods.\n *\n * Strings must be in hex format.\n */\n addDecryptionKey(\n key: Uint8Array | string,\n options?: { method?: DecryptionMethod; contentTopics?: string[] }\n ): void {\n this.decryptionKeys.set(hexToBytes(key), options ?? {});\n }\n\n /**\n * Delete a decryption key that was used to attempt decryption of received\n * messages.\n *\n * Strings must be in hex format.\n */\n deleteDecryptionKey(key: Uint8Array | string): void {\n this.decryptionKeys.delete(hexToBytes(key));\n }\n\n /**\n * Register an observer of new messages received via waku relay\n *\n * @param callback called when a new message is received via waku relay\n * @param contentTopics Content Topics for which the callback with be called,\n * all of them if undefined, [] or [\"\",..] is passed.\n * @returns {void}\n */\n addObserver(\n callback: (message: WakuMessage) => void,\n contentTopics: string[] = []\n ): void {\n if (contentTopics.length === 0) {\n if (!this.observers[\"\"]) {\n this.observers[\"\"] = new Set();\n }\n this.observers[\"\"].add(callback);\n } else {\n contentTopics.forEach((contentTopic) => {\n if (!this.observers[contentTopic]) {\n this.observers[contentTopic] = new Set();\n }\n this.observers[contentTopic].add(callback);\n });\n }\n }\n\n /**\n * Remove an observer of new messages received via waku relay.\n * Useful to ensure the same observer is not registered several time\n * (e.g when loading React components)\n */\n deleteObserver(\n callback: (message: WakuMessage) => void,\n contentTopics: string[] = []\n ): void {\n if (contentTopics.length === 0) {\n if (this.observers[\"\"]) {\n this.observers[\"\"].delete(callback);\n }\n } else {\n contentTopics.forEach((contentTopic) => {\n if (this.observers[contentTopic]) {\n this.observers[contentTopic].delete(callback);\n }\n });\n }\n }\n\n /**\n * Return the relay peers we are connected to, and we would publish a message to\n */\n getPeers(): Set<string> {\n return getRelayPeers(this, this.pubSubTopic, this._options.D, (id) => {\n // Filter peers we would not publish to\n return (\n this.score.score(id) >= this._options.scoreThresholds.publishThreshold\n );\n });\n }\n\n /**\n * Subscribe to a pubsub topic and start emitting Waku messages to observers.\n *\n * @override\n */\n subscribe(pubSubTopic: string): void {\n this.on(pubSubTopic, (event) => {\n const decryptionKeys = Array.from(this.decryptionKeys).map(\n ([key, { method, contentTopics }]) => {\n return {\n key,\n method,\n contentTopics,\n };\n }\n );\n\n dbg(`Message received on ${pubSubTopic}`);\n WakuMessage.decode(event.data, decryptionKeys)\n .then((wakuMsg) => {\n if (!wakuMsg) {\n dbg(\"Failed to decode Waku Message\");\n return;\n }\n\n if (this.observers[\"\"]) {\n this.observers[\"\"].forEach((callbackFn) => {\n callbackFn(wakuMsg);\n });\n }\n if (wakuMsg.contentTopic) {\n if (this.observers[wakuMsg.contentTopic]) {\n this.observers[wakuMsg.contentTopic].forEach((callbackFn) => {\n callbackFn(wakuMsg);\n });\n }\n }\n })\n .catch((e) => {\n dbg(\"Failed to decode Waku Message\", e);\n });\n });\n\n super.subscribe(pubSubTopic);\n }\n\n /**\n * Join pubsub topic.\n * This is present to override the behavior of Gossipsub and should not\n * be used by API Consumers\n *\n * @internal\n * @param {string} topic\n * @returns {void}\n * @override\n */\n join(topic: string): void {\n if (!this.started) {\n throw new Error(\"WakuRelayPubSub has not started\");\n }\n\n const fanoutPeers = this.fanout.get(topic);\n if (fanoutPeers) {\n // these peers have a score above the publish threshold, which may be negative\n // so drop the ones with a negative score\n fanoutPeers.forEach((id) => {\n if (this.score.score(id) < 0) {\n fanoutPeers.delete(id);\n }\n });\n if (fanoutPeers.size < this._options.D) {\n // we need more peers; eager, as this would get fixed in the next heartbeat\n getRelayPeers(\n this,\n topic,\n this._options.D - fanoutPeers.size,\n (id: string): boolean => {\n // filter our current peers, direct peers, and peers with negative scores\n return (\n !fanoutPeers.has(id) &&\n !this.direct.has(id) &&\n this.score.score(id) >= 0\n );\n }\n ).forEach((id) => fanoutPeers.add(id));\n }\n this.mesh.set(topic, fanoutPeers);\n this.fanout.delete(topic);\n this.lastpub.delete(topic);\n } else {\n const peers = getRelayPeers(\n this,\n topic,\n this._options.D,\n (id: string): boolean => {\n // filter direct peers and peers with negative score\n return !this.direct.has(id) && this.score.score(id) >= 0;\n }\n );\n this.mesh.set(topic, peers);\n }\n this.mesh.get(topic)?.forEach((id) => {\n this.log(\"JOIN: Add mesh link to %s in %s\", id, topic);\n this._sendGraft(id, topic);\n });\n }\n\n /**\n * Publish messages.\n * This is present to override the behavior of Gossipsub and should not\n * be used by API Consumers\n *\n * @ignore\n * @override\n * @param {InMessage} msg\n * @returns {void}\n */\n async _publish(msg: InMessage): Promise<void> {\n const msgIdStr = await this.getCanonicalMsgIdStr(msg);\n if (msg.receivedFrom !== this.peerId.toB58String()) {\n this.score.deliverMessage(msg, msgIdStr);\n this.gossipTracer.deliverMessage(msgIdStr);\n }\n\n // put in seen cache\n this.seenCache.put(msgIdStr);\n\n this.messageCache.put(msg, msgIdStr);\n\n const toSend = new Set<string>();\n msg.topicIDs.forEach((topic) => {\n const peersInTopic = this.topics.get(topic);\n if (!peersInTopic) {\n return;\n }\n\n // direct peers\n this.direct.forEach((id) => {\n toSend.add(id);\n });\n\n let meshPeers = this.mesh.get(topic);\n if (!meshPeers || !meshPeers.size) {\n // We are not in the mesh for topic, use fanout peers\n meshPeers = this.fanout.get(topic);\n if (!meshPeers) {\n // If we are not in the fanout, then pick peers in topic above the publishThreshold\n const peers = getRelayPeers(this, topic, this._options.D, (id) => {\n return (\n this.score.score(id) >=\n this._options.scoreThresholds.publishThreshold\n );\n });\n\n if (peers.size > 0) {\n meshPeers = peers;\n this.fanout.set(topic, peers);\n } else {\n meshPeers = new Set();\n }\n }\n // Store the latest publishing time\n this.lastpub.set(topic, this._now());\n }\n\n meshPeers?.forEach((peer) => {\n toSend.add(peer);\n });\n });\n // Publish messages to peers\n const rpc = createGossipRpc([Gossipsub.utils.normalizeOutRpcMessage(msg)]);\n dbg(`Relay message to ${toSend.size} peers`);\n toSend.forEach((id) => {\n if (id === msg.from) {\n return;\n }\n dbg(\"Relay message to\", id);\n this._sendRpc(id, rpc);\n });\n }\n\n /**\n * Emits gossip to peers in a particular topic.\n *\n * This is present to override the behavior of Gossipsub and should not\n * be used by API Consumers\n *\n * @ignore\n * @override\n * @param {string} topic\n * @param {Set<string>} exclude peers to exclude\n * @returns {void}\n */\n _emitGossip(topic: string, exclude: Set<string>): void {\n const messageIDs = this.messageCache.getGossipIDs(topic);\n if (!messageIDs.length) {\n return;\n }\n\n // shuffle to emit in random order\n shuffle(messageIDs);\n\n // if we are emitting more than GossipsubMaxIHaveLength ids, truncate the list\n if (messageIDs.length > constants.RelayMaxIHaveLength) {\n // we do the truncation (with shuffling) per peer below\n this.log(\n \"too many messages for gossip; will truncate IHAVE list (%d messages)\",\n messageIDs.length\n );\n }\n\n // Send gossip to GossipFactor peers above threshold with a minimum of D_lazy\n // First we collect the peers above gossipThreshold that are not in the exclude set\n // and then randomly select from that set\n // We also exclude direct peers, as there is no reason to emit gossip to them\n const peersToGossip: string[] = [];\n const topicPeers = this.topics.get(topic);\n if (!topicPeers) {\n // no topic peers, no gossip\n return;\n }\n topicPeers.forEach((id) => {\n const peerStreams = this.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (\n !exclude.has(id) &&\n !this.direct.has(id) &&\n constants.RelayCodecs.includes(peerStreams.protocol) &&\n this.score.score(id) >= this._options.scoreThresholds.gossipThreshold\n ) {\n peersToGossip.push(id);\n }\n });\n\n let target = this._options.Dlazy;\n const factor = constants.RelayGossipFactor * peersToGossip.length;\n if (factor > target) {\n target = factor;\n }\n if (target > peersToGossip.length) {\n target = peersToGossip.length;\n } else {\n shuffle(peersToGossip);\n }\n // Emit the IHAVE gossip to the selected peers up to the target\n peersToGossip.slice(0, target).forEach((id) => {\n let peerMessageIDs = messageIDs;\n if (messageIDs.length > constants.RelayMaxIHaveLength) {\n // shuffle and slice message IDs per peer so that we emit a different set for each peer\n // we have enough redundancy in the system that this will significantly increase the message\n // coverage when we do truncate\n peerMessageIDs = shuffle(peerMessageIDs.slice()).slice(\n 0,\n constants.RelayMaxIHaveLength\n );\n }\n this._pushGossip(id, {\n topicID: topic,\n messageIDs: peerMessageIDs,\n });\n });\n }\n\n /**\n * Make a PRUNE control message for a peer in a topic.\n * This is present to override the behavior of Gossipsub and should not\n * be used by API Consumers\n *\n * @ignore\n * @override\n * @param {string} id\n * @param {string} topic\n * @param {boolean} doPX\n * @returns {Promise<RPC.IControlPrune>}\n */\n async _makePrune(\n id: string,\n topic: string,\n doPX: boolean\n ): Promise<RPC.IControlPrune> {\n // backoff is measured in seconds\n // RelayPruneBackoff is measured in milliseconds\n const backoff = constants.RelayPruneBackoff / 1000;\n if (!doPX) {\n return {\n topicID: topic,\n peers: [],\n backoff: backoff,\n };\n }\n\n // select peers for Peer eXchange\n const peers = getRelayPeers(\n this,\n topic,\n constants.RelayPrunePeers,\n (xid: string): boolean => {\n return xid !== id && this.score.score(xid) >= 0;\n }\n );\n const px = await Promise.all(\n Array.from(peers).map(async (p) => {\n // see if we have a signed record to send back; if we don't, just send\n // the peer ID and let the pruned peer find them in the DHT -- we can't trust\n // unsigned address records through PX anyways\n // Finding signed records in the DHT is not supported at the time of writing in js-libp2p\n const peerId = PeerId.createFromB58String(p);\n return {\n peerID: peerId.toBytes(),\n signedPeerRecord:\n await this._libp2p.peerStore.addressBook.getRawEnvelope(peerId),\n };\n })\n );\n return {\n topicID: topic,\n peers: px,\n backoff: backoff,\n };\n }\n}\n","/**\n * @hidden\n * @module\n */\n\nimport Gossipsub from \"libp2p-gossipsub\";\nimport { Heartbeat } from \"libp2p-gossipsub/src/heartbeat\";\nimport { shuffle } from \"libp2p-gossipsub/src/utils\";\n\nimport * as constants from \"./constants\";\nimport { getRelayPeers } from \"./get_relay_peers\";\n\nexport class RelayHeartbeat extends Heartbeat {\n /**\n * @param {Object} gossipsub\n * @constructor\n */\n constructor(gossipsub: Gossipsub) {\n super(gossipsub);\n }\n\n start(): void {\n if (this._heartbeatTimer) {\n return;\n }\n\n const heartbeat = this._heartbeat.bind(this);\n\n const timeout = setTimeout(() => {\n heartbeat();\n this._heartbeatTimer?.runPeriodically(\n heartbeat,\n constants.RelayHeartbeatInterval\n );\n }, constants.RelayHeartbeatInitialDelay);\n\n this._heartbeatTimer = {\n _intervalId: undefined,\n runPeriodically: (fn, period): void => {\n // this._heartbeatTimer cannot be null, it is being assigned.\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._heartbeatTimer!._intervalId = setInterval(fn, period);\n },\n cancel: (): void => {\n clearTimeout(timeout);\n clearInterval(this._heartbeatTimer?._intervalId as NodeJS.Timeout);\n },\n };\n }\n\n /**\n * Unmounts the gossipsub protocol and shuts down every connection\n * @override\n * @returns {void}\n */\n stop(): void {\n if (!this._heartbeatTimer) {\n return;\n }\n\n this._heartbeatTimer.cancel();\n this._heartbeatTimer = null;\n }\n\n /**\n * Maintains the mesh and fanout maps in gossipsub.\n *\n * @returns {void}\n */\n _heartbeat(): void {\n const { D, Dlo, Dhi, Dscore, Dout } = this.gossipsub._options;\n this.gossipsub.heartbeatTicks++;\n\n // cache scores through the heartbeat\n const scores = new Map<string, number>();\n const getScore = (id: string): number => {\n let s = scores.get(id);\n if (s === undefined) {\n s = this.gossipsub.score.score(id);\n scores.set(id, s);\n }\n return s;\n };\n\n // peer id => topic[]\n const toGraft = new Map<string, string[]>();\n // peer id => topic[]\n const toPrune = new Map<string, string[]>();\n // peer id => don't px\n const noPX = new Map<string, boolean>();\n\n // clean up expired backoffs\n this.gossipsub._clearBackoff();\n\n // clean up peerhave/iasked counters\n this.gossipsub.peerhave.clear();\n this.gossipsub.iasked.clear();\n\n // apply IWANT request penalties\n this.gossipsub._applyIwantPenalties();\n\n // ensure direct peers are connected\n this.gossipsub._directConnect();\n\n // maintain the mesh for topics we have joined\n this.gossipsub.mesh.forEach((peers, topic) => {\n // prune/graft helper functions (defined per topic)\n const prunePeer = (id: string): void => {\n this.gossipsub.log(\n \"HEARTBEAT: Remove mesh link to %s in %s\",\n id,\n topic\n );\n // update peer score\n this.gossipsub.score.prune(id, topic);\n // add prune backoff record\n this.gossipsub._addBackoff(id, topic);\n // remove peer from mesh\n peers.delete(id);\n // add to toPrune\n const topics = toPrune.get(id);\n if (!topics) {\n toPrune.set(id, [topic]);\n } else {\n topics.push(topic);\n }\n };\n const graftPeer = (id: string): void => {\n this.gossipsub.log(\"HEARTBEAT: Add mesh link to %s in %s\", id, topic);\n // update peer score\n this.gossipsub.score.graft(id, topic);\n // add peer to mesh\n peers.add(id);\n // add to toGraft\n const topics = toGraft.get(id);\n if (!topics) {\n toGraft.set(id, [topic]);\n } else {\n topics.push(topic);\n }\n };\n\n // drop all peers with negative score, without PX\n peers.forEach((id) => {\n const score = getScore(id);\n if (score < 0) {\n this.gossipsub.log(\n \"HEARTBEAT: Prune peer %s with negative score: score=%d, topic=%s\",\n id,\n score,\n topic\n );\n prunePeer(id);\n noPX.set(id, true);\n }\n });\n\n // do we have enough peers?\n if (peers.size < Dlo) {\n const backoff = this.gossipsub.backoff.get(topic);\n const ineed = D - peers.size;\n const peersSet = getRelayPeers(\n this.gossipsub,\n topic,\n ineed,\n (id: string) => {\n // filter out mesh peers, direct peers, peers we are backing off, peers with negative score\n return (\n !peers.has(id) &&\n !this.gossipsub.direct.has(id) &&\n (!backoff || !backoff.has(id)) &&\n getScore(id) >= 0\n );\n }\n );\n\n peersSet.forEach(graftPeer);\n }\n\n // do we have to many peers?\n if (peers.size > Dhi) {\n let peersArray = Array.from(peers);\n // sort by score\n peersArray.sort((a, b) => getScore(b) - getScore(a));\n // We keep the first D_score peers by score and the remaining up to D randomly\n // under the constraint that we keep D_out peers in the mesh (if we have that many)\n peersArray = peersArray\n .slice(0, Dscore)\n .concat(shuffle(peersArray.slice(Dscore)));\n\n // count the outbound peers we are keeping\n let outbound = 0;\n peersArray.slice(0, D).forEach((p) => {\n if (this.gossipsub.outbound.get(p)) {\n outbound++;\n }\n });\n\n // if it's less than D_out, bubble up some outbound peers from the random selection\n if (outbound < Dout) {\n const rotate = (i: number): void => {\n // rotate the peersArray to the right and put the ith peer in the front\n const p = peersArray[i];\n for (let j = i; j > 0; j--) {\n peersArray[j] = peersArray[j - 1];\n }\n peersArray[0] = p;\n };\n\n // first bubble up all outbound peers already in the selection to the front\n if (outbound > 0) {\n let ihave = outbound;\n for (let i = 1; i < D && ihave > 0; i++) {\n if (this.gossipsub.outbound.get(peersArray[i])) {\n rotate(i);\n ihave--;\n }\n }\n }\n\n // now bubble up enough outbound peers outside the selection to the front\n let ineed = D - outbound;\n for (let i = D; i < peersArray.length && ineed > 0; i++) {\n if (this.gossipsub.outbound.get(peersArray[i])) {\n rotate(i);\n ineed--;\n }\n }\n }\n\n // prune the excess peers\n peersArray.slice(D).forEach(prunePeer);\n }\n\n // do we have enough outbound peers?\n if (peers.size >= Dlo) {\n // count the outbound peers we have\n let outbound = 0;\n peers.forEach((p) => {\n if (this.gossipsub.outbound.get(p)) {\n outbound++;\n }\n });\n\n // if it's less than D_out, select some peers with outbound connections and graft them\n if (outbound < Dout) {\n const ineed = Dout - outbound;\n const backoff = this.gossipsub.backoff.get(topic);\n getRelayPeers(this.gossipsub, topic, ineed, (id: string): boolean => {\n // filter our current mesh peers, direct peers, peers we are backing off, peers with negative score\n return (\n !peers.has(id) &&\n !this.gossipsub.direct.has(id) &&\n (!backoff || !backoff.has(id)) &&\n getScore(id) >= 0\n );\n }).forEach(graftPeer);\n }\n }\n\n // should we try to improve the mesh with opportunistic grafting?\n if (\n this.gossipsub.heartbeatTicks %\n constants.RelayOpportunisticGraftTicks ===\n 0 &&\n peers.size > 1\n ) {\n // Opportunistic grafting works as follows: we check the median score of peers in the\n // mesh; if this score is below the opportunisticGraftThreshold, we select a few peers at\n // random with score over the median.\n // The intention is to (slowly) improve an under performing mesh by introducing good\n // scoring peers that may have been gossiping at us. This allows us to get out of sticky\n // situations where we are stuck with poor peers and also recover from churn of good peers.\n\n // now compute the median peer score in the mesh\n const peersList = Array.from(peers).sort(\n (a, b) => getScore(a) - getScore(b)\n );\n const medianIndex = Math.floor(peers.size / 2);\n const medianScore = getScore(peersList[medianIndex]);\n\n // if the median score is below the threshold, select a better peer (if any) and GRAFT\n if (\n medianScore <\n this.gossipsub._options.scoreThresholds.opportunisticGraftThreshold\n ) {\n const backoff = this.gossipsub.backoff.get(topic);\n const peersToGraft = getRelayPeers(\n this.gossipsub,\n topic,\n constants.RelayOpportunisticGraftPeers,\n (id: string): boolean => {\n // filter out current mesh peers, direct peers, peers we are backing off, peers below or at threshold\n return (\n peers.has(id) &&\n !this.gossipsub.direct.has(id) &&\n (!backoff || !backoff.has(id)) &&\n getScore(id) > medianScore\n );\n }\n );\n peersToGraft.forEach((id: string) => {\n this.gossipsub.log(\n \"HEARTBEAT: Opportunistically graft peer %s on topic %s\",\n id,\n topic\n );\n graftPeer(id);\n });\n }\n }\n\n // 2nd arg are mesh peers excluded from gossip. We have already pushed\n // messages to them, so its redundant to gossip IHAVEs.\n this.gossipsub._emitGossip(topic, peers);\n });\n\n // expire fanout for topics we haven't published to in a while\n const now = this.gossipsub._now();\n this.gossipsub.lastpub.forEach((lastpub, topic) => {\n if (lastpub + constants.RelayFanoutTTL < now) {\n this.gossipsub.fanout.delete(topic);\n this.gossipsub.lastpub.delete(topic);\n }\n });\n\n // maintain our fanout for topics we are publishing but we have not joined\n this.gossipsub.fanout.forEach((fanoutPeers, topic) => {\n // checks whether our peers are still in the topic and have a score above the publish threshold\n const topicPeers = this.gossipsub.topics.get(topic);\n fanoutPeers.forEach((id) => {\n if (\n !topicPeers?.has(id) ||\n getScore(id) <\n this.gossipsub._options.scoreThresholds.publishThreshold\n ) {\n fanoutPeers.delete(id);\n }\n });\n\n // do we need more peers?\n if (fanoutPeers.size < D) {\n const ineed = D - fanoutPeers.size;\n const peersSet = getRelayPeers(\n this.gossipsub,\n topic,\n ineed,\n (id: string): boolean => {\n // filter out existing fanout peers, direct peers, and peers with score above the publish threshold\n return (\n !fanoutPeers.has(id) &&\n !this.gossipsub.direct.has(id) &&\n getScore(id) >=\n this.gossipsub._options.scoreThresholds.publishThreshold\n );\n }\n );\n peersSet.forEach((id: string) => {\n fanoutPeers.add(id);\n });\n }\n\n // 2nd arg are fanout peers excluded from gossip.\n // We have already pushed messages to them, so its redundant to gossip IHAVEs\n this.gossipsub._emitGossip(topic, fanoutPeers);\n });\n\n // send coalesced GRAFT/PRUNE messages (will piggyback gossip)\n this.gossipsub._sendGraftPrune(toGraft, toPrune, noPX);\n\n // flush pending gossip that wasn't piggybacked above\n this.gossipsub._flush();\n\n // advance the message history window\n this.gossipsub.messageCache.shift();\n\n this.gossipsub.emit(\"gossipsub:heartbeat\");\n }\n}\n","import { Reader } from \"protobufjs/minimal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport * as proto from \"../../proto/waku/v2/store\";\n\nexport enum PageDirection {\n BACKWARD = \"backward\",\n FORWARD = \"forward\",\n}\n\nexport interface Params {\n contentTopics: string[];\n pubSubTopic: string;\n pageDirection: PageDirection;\n pageSize: number;\n startTime?: number;\n endTime?: number;\n cursor?: proto.Index;\n}\n\nexport class HistoryRPC {\n public constructor(public proto: proto.HistoryRPC) {}\n\n /**\n * Create History Query.\n */\n static createQuery(params: Params): HistoryRPC {\n const direction = directionToProto(params.pageDirection);\n const pagingInfo = {\n pageSize: params.pageSize,\n cursor: params.cursor,\n direction,\n };\n\n const contentFilters = params.contentTopics.map((contentTopic) => {\n return { contentTopic };\n });\n\n return new HistoryRPC({\n requestId: uuid(),\n query: {\n pubSubTopic: params.pubSubTopic,\n contentFilters,\n pagingInfo,\n startTime: params.startTime,\n endTime: params.endTime,\n },\n response: undefined,\n });\n }\n\n static decode(bytes: Uint8Array): HistoryRPC {\n const res = proto.HistoryRPC.decode(Reader.create(bytes));\n return new HistoryRPC(res);\n }\n\n encode(): Uint8Array {\n return proto.HistoryRPC.encode(this.proto).finish();\n }\n\n get query(): proto.HistoryQuery | undefined {\n return this.proto.query;\n }\n\n get response(): proto.HistoryResponse | undefined {\n return this.proto.response;\n }\n}\n\nfunction directionToProto(\n pageDirection: PageDirection\n): proto.PagingInfo_Direction {\n switch (pageDirection) {\n case PageDirection.BACKWARD:\n return proto.PagingInfo_Direction.DIRECTION_BACKWARD_UNSPECIFIED;\n case PageDirection.FORWARD:\n return proto.PagingInfo_Direction.DIRECTION_FORWARD;\n default:\n return proto.PagingInfo_Direction.DIRECTION_BACKWARD_UNSPECIFIED;\n }\n}\n","import debug from \"debug\";\nimport concat from \"it-concat\";\nimport lp from \"it-length-prefixed\";\nimport pipe from \"it-pipe\";\nimport Libp2p from \"libp2p\";\nimport { Peer } from \"libp2p/src/peer-store\";\nimport PeerId from \"peer-id\";\n\nimport { HistoryResponse_Error } from \"../../proto\";\nimport { getPeersForProtocol, selectRandomPeer } from \"../select_peer\";\nimport { hexToBytes } from \"../utils\";\nimport { DefaultPubSubTopic } from \"../waku\";\nimport { DecryptionMethod, WakuMessage } from \"../waku_message\";\n\nimport { HistoryRPC, PageDirection } from \"./history_rpc\";\n\nconst dbg = debug(\"waku:store\");\n\nexport const StoreCodec = \"/vac/waku/store/2.0.0-beta3\";\n\nexport const DefaultPageSize = 10;\n\nexport { PageDirection };\n\nexport interface CreateOptions {\n /**\n * The PubSub Topic to use. Defaults to {@link DefaultPubSubTopic}.\n *\n * The usage of the default pubsub topic is recommended.\n * See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/) for details.\n *\n * @default {@link DefaultPubSubTopic}\n */\n pubSubTopic?: string;\n}\n\nexport interface TimeFilter {\n startTime: Date;\n endTime: Date;\n}\n\nexport interface QueryOptions {\n /**\n * The peer to query. If undefined, a pseudo-random peer is selected from the connected Waku Store peers.\n */\n peerId?: PeerId;\n /**\n * The pubsub topic to pass to the query.\n * See [Waku v2 Topic Usage Recommendations](https://rfc.vac.dev/spec/23/).\n */\n pubSubTopic?: string;\n /**\n * The direction in which pages are retrieved:\n * - [[PageDirection.BACKWARD]]: Most recent page first.\n * - [[PageDirection.FORWARD]]: Oldest page first.\n *\n * Note: This does not affect the ordering of messages with the page\n * (oldest message is always first).\n *\n * @default [[PageDirection.BACKWARD]]\n */\n pageDirection?: PageDirection;\n /**\n * The number of message per page.\n *\n * @default [[DefaultPageSize]]\n */\n pageSize?: number;\n /**\n * Retrieve messages with a timestamp within the provided values.\n */\n timeFilter?: TimeFilter;\n /**\n * Callback called on pages of stored messages as they are retrieved.\n *\n * Allows for a faster access to the results as it is called as soon as a page\n * is received. Traversal of the pages is done automatically so this function\n * will invoked for each retrieved page.\n *\n * If the call on a page returns `true`, then traversal of the pages is aborted.\n * For example, this can be used for the caller to stop the query after a\n * specific message is found.\n */\n callback?: (messages: WakuMessage[]) => void | boolean;\n /**\n * Keys that will be used to decrypt messages.\n *\n * It can be Asymmetric Private Keys and Symmetric Keys in the same array,\n * all keys will be tried with both methods.\n */\n decryptionKeys?: Array<Uint8Array | string>;\n}\n\n/**\n * Implements the [Waku v2 Store protocol](https://rfc.vac.dev/spec/13/).\n *\n * The Waku Store protocol can be used to retrieved historical messages.\n */\nexport class WakuStore {\n pubSubTopic: string;\n public decryptionKeys: Map<\n Uint8Array,\n { method?: DecryptionMethod; contentTopics?: string[] }\n >;\n\n constructor(public libp2p: Libp2p, options?: CreateOptions) {\n if (options?.pubSubTopic) {\n this.pubSubTopic = options.pubSubTopic;\n } else {\n this.pubSubTopic = DefaultPubSubTopic;\n }\n\n this.decryptionKeys = new Map();\n }\n\n /**\n * Do a query to a Waku Store to retrieve historical/missed messages.\n *\n * @param contentTopics The content topics to pass to the query, leave empty to\n * retrieve all messages.\n * @param options Optional parameters.\n *\n * @throws If not able to reach a Waku Store peer to query\n * or if an error is encountered when processing the reply.\n */\n async queryHistory(\n contentTopics: string[],\n options?: QueryOptions\n ): Promise<WakuMessage[]> {\n let startTime, endTime;\n if (options?.timeFilter) {\n startTime = options.timeFilter.startTime.getTime() / 1000;\n endTime = options.timeFilter.endTime.getTime() / 1000;\n }\n\n const opts = Object.assign(\n {\n pubSubTopic: this.pubSubTopic,\n pageDirection: PageDirection.BACKWARD,\n pageSize: DefaultPageSize,\n },\n options,\n {\n startTime,\n endTime,\n },\n { contentTopics }\n );\n dbg(\"Querying history with the following options\", {\n peerId: options?.peerId?.toB58String(),\n ...options,\n });\n\n let peer;\n if (opts.peerId) {\n peer = await this.libp2p.peerStore.get(opts.peerId);\n if (!peer)\n throw `Failed to retrieve connection details for provided peer in peer store: ${opts.peerId.toB58String()}`;\n } else {\n peer = await this.randomPeer;\n if (!peer)\n throw \"Failed to find known peer that registers waku store protocol\";\n }\n if (!peer.protocols.includes(StoreCodec))\n throw `Peer does not register waku store protocol: ${peer.id.toB58String()}`;\n const connection = this.libp2p.connectionManager.get(peer.id);\n if (!connection) throw \"Failed to get a connection to the peer\";\n\n const decryptionKeys = Array.from(this.decryptionKeys).map(\n ([key, { method, contentTopics }]) => {\n return {\n key,\n method,\n contentTopics,\n };\n }\n );\n\n // Add the decryption keys passed to this function against the\n // content topics also passed to this function.\n if (opts.decryptionKeys) {\n opts.decryptionKeys.forEach((key) => {\n decryptionKeys.push({\n key: hexToBytes(key),\n contentTopics: contentTopics.length ? contentTopics : undefined,\n method: undefined,\n });\n });\n }\n\n const messages: WakuMessage[] = [];\n let cursor = undefined;\n while (true) {\n const { stream } = await connection.newStream(StoreCodec);\n const queryOpts = Object.assign(opts, { cursor });\n const historyRpcQuery = HistoryRPC.createQuery(queryOpts);\n dbg(\"Querying store peer\", connection.remoteAddr.toString());\n\n const res = await pipe(\n [historyRpcQuery.encode()],\n lp.encode(),\n stream,\n lp.decode(),\n concat\n );\n const reply = HistoryRPC.decode(res.slice());\n\n const response = reply.response;\n if (!response) {\n throw \"History response misses response field\";\n }\n\n if (\n response.error &&\n response.error === HistoryResponse_Error.ERROR_INVALID_CURSOR\n ) {\n throw \"History response contains an Error: INVALID CURSOR\";\n }\n\n if (!response.messages || !response.messages.length) {\n // No messages left (or stored)\n console.log(\"No messages present in HistoryRPC response\");\n return messages;\n }\n\n dbg(\n `${response.messages.length} messages retrieved for pubsub topic ${opts.pubSubTopic}`\n );\n\n const pageMessages: WakuMessage[] = [];\n await Promise.all(\n response.messages.map(async (protoMsg) => {\n const msg = await WakuMessage.decodeProto(protoMsg, decryptionKeys);\n\n if (msg) {\n messages.push(msg);\n pageMessages.push(msg);\n }\n })\n );\n\n let abort = false;\n if (opts.callback) {\n abort = Boolean(opts.callback(pageMessages));\n }\n\n const responsePageSize = response.pagingInfo?.pageSize;\n const queryPageSize = historyRpcQuery.query?.pagingInfo?.pageSize;\n if (\n abort ||\n // Response page size smaller than query, meaning this is the last page\n (responsePageSize && queryPageSize && responsePageSize < queryPageSize)\n ) {\n return messages;\n }\n\n cursor = response.pagingInfo?.cursor;\n if (cursor === undefined) {\n // If the server does not return cursor then there is an issue,\n // Need to abort or we end up in an infinite loop\n console.log(\"No cursor returned by peer.\");\n return messages;\n }\n }\n }\n\n /**\n * Register a decryption key to attempt decryption of messages received in any\n * subsequent [[queryHistory]] call. This can either be a private key for\n * asymmetric encryption or a symmetric key. [[WakuStore]] will attempt to\n * decrypt messages using both methods.\n *\n * Strings must be in hex format.\n */\n addDecryptionKey(\n key: Uint8Array | string,\n options?: { method?: DecryptionMethod; contentTopics?: string[] }\n ): void {\n this.decryptionKeys.set(hexToBytes(key), options ?? {});\n }\n\n /**\n * Delete a decryption key that was used to attempt decryption of messages\n * received in subsequent [[queryHistory]] calls.\n *\n * Strings must be in hex format.\n */\n deleteDecryptionKey(key: Uint8Array | string): void {\n this.decryptionKeys.delete(hexToBytes(key));\n }\n\n /**\n * Returns known peers from the address book (`libp2p.peerStore`) that support\n * store protocol. Waku may or may not be currently connected to these peers.\n */\n get peers(): AsyncIterable<Peer> {\n return getPeersForProtocol(this.libp2p, StoreCodec);\n }\n\n /**\n * Returns a random peer that supports store protocol from the address\n * book (`libp2p.peerStore`). Waku may or may not be currently connected to\n * this peer.\n */\n get randomPeer(): Promise<Peer | undefined> {\n return selectRandomPeer(this.peers);\n }\n}\n","export { WakuMessage } from \"./waku/v2/message\";\n\nexport {\n Index,\n PagingInfo,\n PagingInfo_Direction,\n ContentFilter,\n HistoryQuery,\n HistoryResponse,\n HistoryResponse_Error,\n HistoryRPC,\n} from \"./waku/v2/store\";\n","/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { WakuMessage } from \"../../waku/v2/message\";\n\nexport const protobufPackage = \"waku.v2\";\n\nexport interface PushRequest {\n pubSubTopic: string;\n message: WakuMessage | undefined;\n}\n\nexport interface PushResponse {\n isSuccess: boolean;\n info: string;\n}\n\nexport interface PushRPC {\n requestId: string;\n request: PushRequest | undefined;\n response: PushResponse | undefined;\n}\n\nfunction createBasePushRequest(): PushRequest {\n return { pubSubTopic: \"\", message: undefined };\n}\n\nexport const PushRequest = {\n encode(\n message: PushRequest,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.pubSubTopic !== \"\") {\n writer.uint32(10).string(message.pubSubTopic);\n }\n if (message.message !== undefined) {\n WakuMessage.encode(message.message, writer.uint32(18).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PushRequest {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePushRequest();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.pubSubTopic = reader.string();\n break;\n case 2:\n message.message = WakuMessage.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): PushRequest {\n return {\n pubSubTopic: isSet(object.pubSubTopic) ? String(object.pubSubTopic) : \"\",\n message: isSet(object.message)\n ? WakuMessage.fromJSON(object.message)\n : undefined,\n };\n },\n\n toJSON(message: PushRequest): unknown {\n const obj: any = {};\n message.pubSubTopic !== undefined &&\n (obj.pubSubTopic = message.pubSubTopic);\n message.message !== undefined &&\n (obj.message = message.message\n ? WakuMessage.toJSON(message.message)\n : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<PushRequest>, I>>(\n object: I\n ): PushRequest {\n const message = createBasePushRequest();\n message.pubSubTopic = object.pubSubTopic ?? \"\";\n message.message =\n object.message !== undefined && object.message !== null\n ? WakuMessage.fromPartial(object.message)\n : undefined;\n return message;\n },\n};\n\nfunction createBasePushResponse(): PushResponse {\n return { isSuccess: false, info: \"\" };\n}\n\nexport const PushResponse = {\n encode(\n message: PushResponse,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.isSuccess === true) {\n writer.uint32(8).bool(message.isSuccess);\n }\n if (message.info !== \"\") {\n writer.uint32(18).string(message.info);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PushResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePushResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.isSuccess = reader.bool();\n break;\n case 2:\n message.info = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): PushResponse {\n return {\n isSuccess: isSet(object.isSuccess) ? Boolean(object.isSuccess) : false,\n info: isSet(object.info) ? String(object.info) : \"\",\n };\n },\n\n toJSON(message: PushResponse): unknown {\n const obj: any = {};\n message.isSuccess !== undefined && (obj.isSuccess = message.isSuccess);\n message.info !== undefined && (obj.info = message.info);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<PushResponse>, I>>(\n object: I\n ): PushResponse {\n const message = createBasePushResponse();\n message.isSuccess = object.isSuccess ?? false;\n message.info = object.info ?? \"\";\n return message;\n },\n};\n\nfunction createBasePushRPC(): PushRPC {\n return { requestId: \"\", request: undefined, response: undefined };\n}\n\nexport const PushRPC = {\n encode(\n message: PushRPC,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.requestId !== \"\") {\n writer.uint32(10).string(message.requestId);\n }\n if (message.request !== undefined) {\n PushRequest.encode(message.request, writer.uint32(18).fork()).ldelim();\n }\n if (message.response !== undefined) {\n PushResponse.encode(message.response, writer.uint32(26).fork()).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PushRPC {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePushRPC();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.requestId = reader.string();\n break;\n case 2:\n message.request = PushRequest.decode(reader, reader.uint32());\n break;\n case 3:\n message.response = PushResponse.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): PushRPC {\n return {\n requestId: isSet(object.requestId) ? String(object.requestId) : \"\",\n request: isSet(object.request)\n ? PushRequest.fromJSON(object.request)\n : undefined,\n response: isSet(object.response)\n ? PushResponse.fromJSON(object.response)\n : undefined,\n };\n },\n\n toJSON(message: PushRPC): unknown {\n const obj: any = {};\n message.requestId !== undefined && (obj.requestId = message.requestId);\n message.request !== undefined &&\n (obj.request = message.request\n ? PushRequest.toJSON(message.request)\n : undefined);\n message.response !== undefined &&\n (obj.response = message.response\n ? PushResponse.toJSON(message.response)\n : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<PushRPC>, I>>(object: I): PushRPC {\n const message = createBasePushRPC();\n message.requestId = object.requestId ?? \"\";\n message.request =\n object.request !== undefined && object.request !== null\n ? PushRequest.fromPartial(object.request)\n : undefined;\n message.response =\n object.response !== undefined && object.response !== null\n ? PushResponse.fromPartial(object.response)\n : undefined;\n return message;\n },\n};\n\ntype Builtin =\n | Date\n | Function\n | Uint8Array\n | string\n | number\n | boolean\n | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<\n Exclude<keyof I, KeysOfUnion<P>>,\n never\n >;\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n","/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\n\nexport const protobufPackage = \"waku.v2\";\n\nexport interface WakuMessage {\n payload?: Uint8Array | undefined;\n contentTopic?: string | undefined;\n version?: number | undefined;\n timestamp?: number | undefined;\n}\n\nfunction createBaseWakuMessage(): WakuMessage {\n return {\n payload: undefined,\n contentTopic: undefined,\n version: undefined,\n timestamp: undefined,\n };\n}\n\nexport const WakuMessage = {\n encode(\n message: WakuMessage,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.payload !== undefined) {\n writer.uint32(10).bytes(message.payload);\n }\n if (message.contentTopic !== undefined) {\n writer.uint32(18).string(message.contentTopic);\n }\n if (message.version !== undefined) {\n writer.uint32(24).uint32(message.version);\n }\n if (message.timestamp !== undefined) {\n writer.uint32(33).double(message.timestamp);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): WakuMessage {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseWakuMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.payload = reader.bytes();\n break;\n case 2:\n message.contentTopic = reader.string();\n break;\n case 3:\n message.version = reader.uint32();\n break;\n case 4:\n message.timestamp = reader.double();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): WakuMessage {\n return {\n payload: isSet(object.payload)\n ? bytesFromBase64(object.payload)\n : undefined,\n contentTopic: isSet(object.contentTopic)\n ? String(object.contentTopic)\n : undefined,\n version: isSet(object.version) ? Number(object.version) : undefined,\n timestamp: isSet(object.timestamp) ? Number(object.timestamp) : undefined,\n };\n },\n\n toJSON(message: WakuMessage): unknown {\n const obj: any = {};\n message.payload !== undefined &&\n (obj.payload =\n message.payload !== undefined\n ? base64FromBytes(message.payload)\n : undefined);\n message.contentTopic !== undefined &&\n (obj.contentTopic = message.contentTopic);\n message.version !== undefined &&\n (obj.version = Math.round(message.version));\n message.timestamp !== undefined && (obj.timestamp = message.timestamp);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<WakuMessage>, I>>(\n object: I\n ): WakuMessage {\n const message = createBaseWakuMessage();\n message.payload = object.payload ?? undefined;\n message.contentTopic = object.contentTopic ?? undefined;\n message.version = object.version ?? undefined;\n message.timestamp = object.timestamp ?? undefined;\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n throw \"Unable to locate global object\";\n})();\n\nconst atob: (b64: string) => string =\n globalThis.atob ||\n ((b64) => globalThis.Buffer.from(b64, \"base64\").toString(\"binary\"));\nfunction bytesFromBase64(b64: string): Uint8Array {\n const bin = atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n}\n\nconst btoa: (bin: string) => string =\n globalThis.btoa ||\n ((bin) => globalThis.Buffer.from(bin, \"binary\").toString(\"base64\"));\nfunction base64FromBytes(arr: Uint8Array): string {\n const bin: string[] = [];\n for (const byte of arr) {\n bin.push(String.fromCharCode(byte));\n }\n return btoa(bin.join(\"\"));\n}\n\ntype Builtin =\n | Date\n | Function\n | Uint8Array\n | string\n | number\n | boolean\n | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<\n Exclude<keyof I, KeysOfUnion<P>>,\n never\n >;\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n","/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\nimport { WakuMessage } from \"../../waku/v2/message\";\n\nexport const protobufPackage = \"waku.v2\";\n\nexport interface Index {\n digest: Uint8Array;\n receivedTime: number;\n senderTime: number;\n}\n\nexport interface PagingInfo {\n pageSize: number;\n cursor: Index | undefined;\n direction: PagingInfo_Direction;\n}\n\nexport enum PagingInfo_Direction {\n DIRECTION_BACKWARD_UNSPECIFIED = 0,\n DIRECTION_FORWARD = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function pagingInfo_DirectionFromJSON(\n object: any\n): PagingInfo_Direction {\n switch (object) {\n case 0:\n case \"DIRECTION_BACKWARD_UNSPECIFIED\":\n return PagingInfo_Direction.DIRECTION_BACKWARD_UNSPECIFIED;\n case 1:\n case \"DIRECTION_FORWARD\":\n return PagingInfo_Direction.DIRECTION_FORWARD;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return PagingInfo_Direction.UNRECOGNIZED;\n }\n}\n\nexport function pagingInfo_DirectionToJSON(\n object: PagingInfo_Direction\n): string {\n switch (object) {\n case PagingInfo_Direction.DIRECTION_BACKWARD_UNSPECIFIED:\n return \"DIRECTION_BACKWARD_UNSPECIFIED\";\n case PagingInfo_Direction.DIRECTION_FORWARD:\n return \"DIRECTION_FORWARD\";\n default:\n return \"UNKNOWN\";\n }\n}\n\nexport interface ContentFilter {\n contentTopic: string;\n}\n\nexport interface HistoryQuery {\n pubSubTopic?: string | undefined;\n contentFilters: ContentFilter[];\n pagingInfo?: PagingInfo | undefined;\n startTime?: number | undefined;\n endTime?: number | undefined;\n}\n\nexport interface HistoryResponse {\n messages: WakuMessage[];\n pagingInfo: PagingInfo | undefined;\n error: HistoryResponse_Error;\n}\n\nexport enum HistoryResponse_Error {\n ERROR_NONE_UNSPECIFIED = 0,\n ERROR_INVALID_CURSOR = 1,\n UNRECOGNIZED = -1,\n}\n\nexport function historyResponse_ErrorFromJSON(\n object: any\n): HistoryResponse_Error {\n switch (object) {\n case 0:\n case \"ERROR_NONE_UNSPECIFIED\":\n return HistoryResponse_Error.ERROR_NONE_UNSPECIFIED;\n case 1:\n case \"ERROR_INVALID_CURSOR\":\n return HistoryResponse_Error.ERROR_INVALID_CURSOR;\n case -1:\n case \"UNRECOGNIZED\":\n default:\n return HistoryResponse_Error.UNRECOGNIZED;\n }\n}\n\nexport function historyResponse_ErrorToJSON(\n object: HistoryResponse_Error\n): string {\n switch (object) {\n case HistoryResponse_Error.ERROR_NONE_UNSPECIFIED:\n return \"ERROR_NONE_UNSPECIFIED\";\n case HistoryResponse_Error.ERROR_INVALID_CURSOR:\n return \"ERROR_INVALID_CURSOR\";\n default:\n return \"UNKNOWN\";\n }\n}\n\nexport interface HistoryRPC {\n requestId: string;\n query: HistoryQuery | undefined;\n response: HistoryResponse | undefined;\n}\n\nfunction createBaseIndex(): Index {\n return { digest: new Uint8Array(), receivedTime: 0, senderTime: 0 };\n}\n\nexport const Index = {\n encode(message: Index, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer {\n if (message.digest.length !== 0) {\n writer.uint32(10).bytes(message.digest);\n }\n if (message.receivedTime !== 0) {\n writer.uint32(17).double(message.receivedTime);\n }\n if (message.senderTime !== 0) {\n writer.uint32(25).double(message.senderTime);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): Index {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseIndex();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.digest = reader.bytes();\n break;\n case 2:\n message.receivedTime = reader.double();\n break;\n case 3:\n message.senderTime = reader.double();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): Index {\n return {\n digest: isSet(object.digest)\n ? bytesFromBase64(object.digest)\n : new Uint8Array(),\n receivedTime: isSet(object.receivedTime)\n ? Number(object.receivedTime)\n : 0,\n senderTime: isSet(object.senderTime) ? Number(object.senderTime) : 0,\n };\n },\n\n toJSON(message: Index): unknown {\n const obj: any = {};\n message.digest !== undefined &&\n (obj.digest = base64FromBytes(\n message.digest !== undefined ? message.digest : new Uint8Array()\n ));\n message.receivedTime !== undefined &&\n (obj.receivedTime = message.receivedTime);\n message.senderTime !== undefined && (obj.senderTime = message.senderTime);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<Index>, I>>(object: I): Index {\n const message = createBaseIndex();\n message.digest = object.digest ?? new Uint8Array();\n message.receivedTime = object.receivedTime ?? 0;\n message.senderTime = object.senderTime ?? 0;\n return message;\n },\n};\n\nfunction createBasePagingInfo(): PagingInfo {\n return { pageSize: 0, cursor: undefined, direction: 0 };\n}\n\nexport const PagingInfo = {\n encode(\n message: PagingInfo,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.pageSize !== 0) {\n writer.uint32(8).uint64(message.pageSize);\n }\n if (message.cursor !== undefined) {\n Index.encode(message.cursor, writer.uint32(18).fork()).ldelim();\n }\n if (message.direction !== 0) {\n writer.uint32(24).int32(message.direction);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): PagingInfo {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBasePagingInfo();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.pageSize = longToNumber(reader.uint64() as Long);\n break;\n case 2:\n message.cursor = Index.decode(reader, reader.uint32());\n break;\n case 3:\n message.direction = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): PagingInfo {\n return {\n pageSize: isSet(object.pageSize) ? Number(object.pageSize) : 0,\n cursor: isSet(object.cursor) ? Index.fromJSON(object.cursor) : undefined,\n direction: isSet(object.direction)\n ? pagingInfo_DirectionFromJSON(object.direction)\n : 0,\n };\n },\n\n toJSON(message: PagingInfo): unknown {\n const obj: any = {};\n message.pageSize !== undefined &&\n (obj.pageSize = Math.round(message.pageSize));\n message.cursor !== undefined &&\n (obj.cursor = message.cursor ? Index.toJSON(message.cursor) : undefined);\n message.direction !== undefined &&\n (obj.direction = pagingInfo_DirectionToJSON(message.direction));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<PagingInfo>, I>>(\n object: I\n ): PagingInfo {\n const message = createBasePagingInfo();\n message.pageSize = object.pageSize ?? 0;\n message.cursor =\n object.cursor !== undefined && object.cursor !== null\n ? Index.fromPartial(object.cursor)\n : undefined;\n message.direction = object.direction ?? 0;\n return message;\n },\n};\n\nfunction createBaseContentFilter(): ContentFilter {\n return { contentTopic: \"\" };\n}\n\nexport const ContentFilter = {\n encode(\n message: ContentFilter,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.contentTopic !== \"\") {\n writer.uint32(10).string(message.contentTopic);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ContentFilter {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseContentFilter();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.contentTopic = reader.string();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ContentFilter {\n return {\n contentTopic: isSet(object.contentTopic)\n ? String(object.contentTopic)\n : \"\",\n };\n },\n\n toJSON(message: ContentFilter): unknown {\n const obj: any = {};\n message.contentTopic !== undefined &&\n (obj.contentTopic = message.contentTopic);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ContentFilter>, I>>(\n object: I\n ): ContentFilter {\n const message = createBaseContentFilter();\n message.contentTopic = object.contentTopic ?? \"\";\n return message;\n },\n};\n\nfunction createBaseHistoryQuery(): HistoryQuery {\n return {\n pubSubTopic: undefined,\n contentFilters: [],\n pagingInfo: undefined,\n startTime: undefined,\n endTime: undefined,\n };\n}\n\nexport const HistoryQuery = {\n encode(\n message: HistoryQuery,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.pubSubTopic !== undefined) {\n writer.uint32(18).string(message.pubSubTopic);\n }\n for (const v of message.contentFilters) {\n ContentFilter.encode(v!, writer.uint32(26).fork()).ldelim();\n }\n if (message.pagingInfo !== undefined) {\n PagingInfo.encode(message.pagingInfo, writer.uint32(34).fork()).ldelim();\n }\n if (message.startTime !== undefined) {\n writer.uint32(41).double(message.startTime);\n }\n if (message.endTime !== undefined) {\n writer.uint32(49).double(message.endTime);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): HistoryQuery {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHistoryQuery();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n message.pubSubTopic = reader.string();\n break;\n case 3:\n message.contentFilters.push(\n ContentFilter.decode(reader, reader.uint32())\n );\n break;\n case 4:\n message.pagingInfo = PagingInfo.decode(reader, reader.uint32());\n break;\n case 5:\n message.startTime = reader.double();\n break;\n case 6:\n message.endTime = reader.double();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): HistoryQuery {\n return {\n pubSubTopic: isSet(object.pubSubTopic)\n ? String(object.pubSubTopic)\n : undefined,\n contentFilters: Array.isArray(object?.contentFilters)\n ? object.contentFilters.map((e: any) => ContentFilter.fromJSON(e))\n : [],\n pagingInfo: isSet(object.pagingInfo)\n ? PagingInfo.fromJSON(object.pagingInfo)\n : undefined,\n startTime: isSet(object.startTime) ? Number(object.startTime) : undefined,\n endTime: isSet(object.endTime) ? Number(object.endTime) : undefined,\n };\n },\n\n toJSON(message: HistoryQuery): unknown {\n const obj: any = {};\n message.pubSubTopic !== undefined &&\n (obj.pubSubTopic = message.pubSubTopic);\n if (message.contentFilters) {\n obj.contentFilters = message.contentFilters.map((e) =>\n e ? ContentFilter.toJSON(e) : undefined\n );\n } else {\n obj.contentFilters = [];\n }\n message.pagingInfo !== undefined &&\n (obj.pagingInfo = message.pagingInfo\n ? PagingInfo.toJSON(message.pagingInfo)\n : undefined);\n message.startTime !== undefined && (obj.startTime = message.startTime);\n message.endTime !== undefined && (obj.endTime = message.endTime);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<HistoryQuery>, I>>(\n object: I\n ): HistoryQuery {\n const message = createBaseHistoryQuery();\n message.pubSubTopic = object.pubSubTopic ?? undefined;\n message.contentFilters =\n object.contentFilters?.map((e) => ContentFilter.fromPartial(e)) || [];\n message.pagingInfo =\n object.pagingInfo !== undefined && object.pagingInfo !== null\n ? PagingInfo.fromPartial(object.pagingInfo)\n : undefined;\n message.startTime = object.startTime ?? undefined;\n message.endTime = object.endTime ?? undefined;\n return message;\n },\n};\n\nfunction createBaseHistoryResponse(): HistoryResponse {\n return { messages: [], pagingInfo: undefined, error: 0 };\n}\n\nexport const HistoryResponse = {\n encode(\n message: HistoryResponse,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n for (const v of message.messages) {\n WakuMessage.encode(v!, writer.uint32(18).fork()).ldelim();\n }\n if (message.pagingInfo !== undefined) {\n PagingInfo.encode(message.pagingInfo, writer.uint32(26).fork()).ldelim();\n }\n if (message.error !== 0) {\n writer.uint32(32).int32(message.error);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): HistoryResponse {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHistoryResponse();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 2:\n message.messages.push(WakuMessage.decode(reader, reader.uint32()));\n break;\n case 3:\n message.pagingInfo = PagingInfo.decode(reader, reader.uint32());\n break;\n case 4:\n message.error = reader.int32() as any;\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): HistoryResponse {\n return {\n messages: Array.isArray(object?.messages)\n ? object.messages.map((e: any) => WakuMessage.fromJSON(e))\n : [],\n pagingInfo: isSet(object.pagingInfo)\n ? PagingInfo.fromJSON(object.pagingInfo)\n : undefined,\n error: isSet(object.error)\n ? historyResponse_ErrorFromJSON(object.error)\n : 0,\n };\n },\n\n toJSON(message: HistoryResponse): unknown {\n const obj: any = {};\n if (message.messages) {\n obj.messages = message.messages.map((e) =>\n e ? WakuMessage.toJSON(e) : undefined\n );\n } else {\n obj.messages = [];\n }\n message.pagingInfo !== undefined &&\n (obj.pagingInfo = message.pagingInfo\n ? PagingInfo.toJSON(message.pagingInfo)\n : undefined);\n message.error !== undefined &&\n (obj.error = historyResponse_ErrorToJSON(message.error));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<HistoryResponse>, I>>(\n object: I\n ): HistoryResponse {\n const message = createBaseHistoryResponse();\n message.messages =\n object.messages?.map((e) => WakuMessage.fromPartial(e)) || [];\n message.pagingInfo =\n object.pagingInfo !== undefined && object.pagingInfo !== null\n ? PagingInfo.fromPartial(object.pagingInfo)\n : undefined;\n message.error = object.error ?? 0;\n return message;\n },\n};\n\nfunction createBaseHistoryRPC(): HistoryRPC {\n return { requestId: \"\", query: undefined, response: undefined };\n}\n\nexport const HistoryRPC = {\n encode(\n message: HistoryRPC,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.requestId !== \"\") {\n writer.uint32(10).string(message.requestId);\n }\n if (message.query !== undefined) {\n HistoryQuery.encode(message.query, writer.uint32(18).fork()).ldelim();\n }\n if (message.response !== undefined) {\n HistoryResponse.encode(\n message.response,\n writer.uint32(26).fork()\n ).ldelim();\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): HistoryRPC {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseHistoryRPC();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.requestId = reader.string();\n break;\n case 2:\n message.query = HistoryQuery.decode(reader, reader.uint32());\n break;\n case 3:\n message.response = HistoryResponse.decode(reader, reader.uint32());\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): HistoryRPC {\n return {\n requestId: isSet(object.requestId) ? String(object.requestId) : \"\",\n query: isSet(object.query)\n ? HistoryQuery.fromJSON(object.query)\n : undefined,\n response: isSet(object.response)\n ? HistoryResponse.fromJSON(object.response)\n : undefined,\n };\n },\n\n toJSON(message: HistoryRPC): unknown {\n const obj: any = {};\n message.requestId !== undefined && (obj.requestId = message.requestId);\n message.query !== undefined &&\n (obj.query = message.query\n ? HistoryQuery.toJSON(message.query)\n : undefined);\n message.response !== undefined &&\n (obj.response = message.response\n ? HistoryResponse.toJSON(message.response)\n : undefined);\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<HistoryRPC>, I>>(\n object: I\n ): HistoryRPC {\n const message = createBaseHistoryRPC();\n message.requestId = object.requestId ?? \"\";\n message.query =\n object.query !== undefined && object.query !== null\n ? HistoryQuery.fromPartial(object.query)\n : undefined;\n message.response =\n object.response !== undefined && object.response !== null\n ? HistoryResponse.fromPartial(object.response)\n : undefined;\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n throw \"Unable to locate global object\";\n})();\n\nconst atob: (b64: string) => string =\n globalThis.atob ||\n ((b64) => globalThis.Buffer.from(b64, \"base64\").toString(\"binary\"));\nfunction bytesFromBase64(b64: string): Uint8Array {\n const bin = atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n}\n\nconst btoa: (bin: string) => string =\n globalThis.btoa ||\n ((bin) => globalThis.Buffer.from(bin, \"binary\").toString(\"base64\"));\nfunction base64FromBytes(arr: Uint8Array): string {\n const bin: string[] = [];\n for (const byte of arr) {\n bin.push(String.fromCharCode(byte));\n }\n return btoa(bin.join(\"\"));\n}\n\ntype Builtin =\n | Date\n | Function\n | Uint8Array\n | string\n | number\n | boolean\n | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<\n Exclude<keyof I, KeysOfUnion<P>>,\n never\n >;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n\nfunction isSet(value: any): boolean {\n return value !== null && value !== undefined;\n}\n","/** @license React vundefined\n * use-subscription.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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'use strict';var e=require(\"object-assign\"),g=require(\"react\");\nexports.useSubscription=function(a){var c=a.getCurrentValue,d=a.subscribe,b=g.useState(function(){return{getCurrentValue:c,subscribe:d,value:c()}});a=b[0];var f=b[1];b=a.value;if(a.getCurrentValue!==c||a.subscribe!==d)b=c(),f({getCurrentValue:c,subscribe:d,value:b});g.useDebugValue(b);g.useEffect(function(){function b(){if(!a){var b=c();f(function(a){return a.getCurrentValue!==c||a.subscribe!==d||a.value===b?a:e({},a,{value:b})})}}var a=!1,h=d(b);b();return function(){a=!0;h()}},[c,d]);return b};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/use-subscription.production.min.js');\n} else {\n module.exports = require('./cjs/use-subscription.development.js');\n}\n","'use strict';\n\nconst asn1 = exports;\n\nasn1.bignum = require('bn.js');\n\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');\n","'use strict';\n\nconst encoders = require('./encoders');\nconst decoders = require('./decoders');\nconst inherits = require('inherits');\n\nconst api = exports;\n\napi.define = function define(name, body) {\n return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n this.name = name;\n this.body = body;\n\n this.decoders = {};\n this.encoders = {};\n}\n\nEntity.prototype._createNamed = function createNamed(Base) {\n const name = this.name;\n\n function Generated(entity) {\n this._initNamed(entity, name);\n }\n inherits(Generated, Base);\n Generated.prototype._initNamed = function _initNamed(entity, name) {\n Base.call(this, entity, name);\n };\n\n return new Generated(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n enc = enc || 'der';\n // Lazily create decoder\n if (!this.decoders.hasOwnProperty(enc))\n this.decoders[enc] = this._createNamed(decoders[enc]);\n return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n enc = enc || 'der';\n // Lazily create encoder\n if (!this.encoders.hasOwnProperty(enc))\n this.encoders[enc] = this._createNamed(encoders[enc]);\n return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc, /* internal */ reporter) {\n return this._getEncoder(enc).encode(data, reporter);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Reporter = require('../base/reporter').Reporter;\nconst Buffer = require('safer-buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n Reporter.call(this, options);\n if (!Buffer.isBuffer(base)) {\n this.error('Input not Buffer');\n return;\n }\n\n this.base = base;\n this.offset = 0;\n this.length = base.length;\n}\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.isDecoderBuffer = function isDecoderBuffer(data) {\n if (data instanceof DecoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n Buffer.isBuffer(data.base) &&\n data.constructor.name === 'DecoderBuffer' &&\n typeof data.offset === 'number' &&\n typeof data.length === 'number' &&\n typeof data.save === 'function' &&\n typeof data.restore === 'function' &&\n typeof data.isEmpty === 'function' &&\n typeof data.readUInt8 === 'function' &&\n typeof data.skip === 'function' &&\n typeof data.raw === 'function';\n\n return isCompatible;\n};\n\nDecoderBuffer.prototype.save = function save() {\n return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n // Return skipped data\n const res = new DecoderBuffer(this.base);\n res.offset = save.offset;\n res.length = this.offset;\n\n this.offset = save.offset;\n Reporter.prototype.restore.call(this, save.reporter);\n\n return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n if (this.offset + 1 <= this.length)\n return this.base.readUInt8(this.offset++, true);\n else\n return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n if (!(this.offset + bytes <= this.length))\n return this.error(fail || 'DecoderBuffer overrun');\n\n const res = new DecoderBuffer(this.base);\n\n // Share reporter state\n res._reporterState = this._reporterState;\n\n res.offset = this.offset;\n res.length = this.offset + bytes;\n this.offset += bytes;\n return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n if (Array.isArray(value)) {\n this.length = 0;\n this.value = value.map(function(item) {\n if (!EncoderBuffer.isEncoderBuffer(item))\n item = new EncoderBuffer(item, reporter);\n this.length += item.length;\n return item;\n }, this);\n } else if (typeof value === 'number') {\n if (!(0 <= value && value <= 0xff))\n return reporter.error('non-byte EncoderBuffer value');\n this.value = value;\n this.length = 1;\n } else if (typeof value === 'string') {\n this.value = value;\n this.length = Buffer.byteLength(value);\n } else if (Buffer.isBuffer(value)) {\n this.value = value;\n this.length = value.length;\n } else {\n return reporter.error('Unsupported type: ' + typeof value);\n }\n}\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.isEncoderBuffer = function isEncoderBuffer(data) {\n if (data instanceof EncoderBuffer) {\n return true;\n }\n\n // Or accept compatible API\n const isCompatible = typeof data === 'object' &&\n data.constructor.name === 'EncoderBuffer' &&\n typeof data.length === 'number' &&\n typeof data.join === 'function';\n\n return isCompatible;\n};\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n if (!out)\n out = Buffer.alloc(this.length);\n if (!offset)\n offset = 0;\n\n if (this.length === 0)\n return out;\n\n if (Array.isArray(this.value)) {\n this.value.forEach(function(item) {\n item.join(out, offset);\n offset += item.length;\n });\n } else {\n if (typeof this.value === 'number')\n out[offset] = this.value;\n else if (typeof this.value === 'string')\n out.write(this.value, offset);\n else if (Buffer.isBuffer(this.value))\n this.value.copy(out, offset);\n offset += this.length;\n }\n\n return out;\n};\n","'use strict';\n\nconst base = exports;\n\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');\n","'use strict';\n\nconst Reporter = require('../base/reporter').Reporter;\nconst EncoderBuffer = require('../base/buffer').EncoderBuffer;\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst assert = require('minimalistic-assert');\n\n// Supported tags\nconst tags = [\n 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',\n 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',\n 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',\n 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'\n];\n\n// Public methods list\nconst methods = [\n 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',\n 'any', 'contains'\n].concat(tags);\n\n// Overrided methods list\nconst overrided = [\n '_peekTag', '_decodeTag', '_use',\n '_decodeStr', '_decodeObjid', '_decodeTime',\n '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',\n\n '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',\n '_encodeNull', '_encodeInt', '_encodeBool'\n];\n\nfunction Node(enc, parent, name) {\n const state = {};\n this._baseState = state;\n\n state.name = name;\n state.enc = enc;\n\n state.parent = parent || null;\n state.children = null;\n\n // State\n state.tag = null;\n state.args = null;\n state.reverseArgs = null;\n state.choice = null;\n state.optional = false;\n state.any = false;\n state.obj = false;\n state.use = null;\n state.useDecoder = null;\n state.key = null;\n state['default'] = null;\n state.explicit = null;\n state.implicit = null;\n state.contains = null;\n\n // Should create new instance on each method\n if (!state.parent) {\n state.children = [];\n this._wrap();\n }\n}\nmodule.exports = Node;\n\nconst stateProps = [\n 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',\n 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',\n 'implicit', 'contains'\n];\n\nNode.prototype.clone = function clone() {\n const state = this._baseState;\n const cstate = {};\n stateProps.forEach(function(prop) {\n cstate[prop] = state[prop];\n });\n const res = new this.constructor(cstate.parent);\n res._baseState = cstate;\n return res;\n};\n\nNode.prototype._wrap = function wrap() {\n const state = this._baseState;\n methods.forEach(function(method) {\n this[method] = function _wrappedMethod() {\n const clone = new this.constructor(this);\n state.children.push(clone);\n return clone[method].apply(clone, arguments);\n };\n }, this);\n};\n\nNode.prototype._init = function init(body) {\n const state = this._baseState;\n\n assert(state.parent === null);\n body.call(this);\n\n // Filter children\n state.children = state.children.filter(function(child) {\n return child._baseState.parent === this;\n }, this);\n assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n const state = this._baseState;\n\n // Filter children and args\n const children = args.filter(function(arg) {\n return arg instanceof this.constructor;\n }, this);\n args = args.filter(function(arg) {\n return !(arg instanceof this.constructor);\n }, this);\n\n if (children.length !== 0) {\n assert(state.children === null);\n state.children = children;\n\n // Replace parent to maintain backward link\n children.forEach(function(child) {\n child._baseState.parent = this;\n }, this);\n }\n if (args.length !== 0) {\n assert(state.args === null);\n state.args = args;\n state.reverseArgs = args.map(function(arg) {\n if (typeof arg !== 'object' || arg.constructor !== Object)\n return arg;\n\n const res = {};\n Object.keys(arg).forEach(function(key) {\n if (key == (key | 0))\n key |= 0;\n const value = arg[key];\n res[value] = key;\n });\n return res;\n });\n }\n};\n\n//\n// Overrided methods\n//\n\noverrided.forEach(function(method) {\n Node.prototype[method] = function _overrided() {\n const state = this._baseState;\n throw new Error(method + ' not implemented for encoding: ' + state.enc);\n };\n});\n\n//\n// Public methods\n//\n\ntags.forEach(function(tag) {\n Node.prototype[tag] = function _tagMethod() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n assert(state.tag === null);\n state.tag = tag;\n\n this._useArgs(args);\n\n return this;\n };\n});\n\nNode.prototype.use = function use(item) {\n assert(item);\n const state = this._baseState;\n\n assert(state.use === null);\n state.use = item;\n\n return this;\n};\n\nNode.prototype.optional = function optional() {\n const state = this._baseState;\n\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.def = function def(val) {\n const state = this._baseState;\n\n assert(state['default'] === null);\n state['default'] = val;\n state.optional = true;\n\n return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.explicit = num;\n\n return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n const state = this._baseState;\n\n assert(state.explicit === null && state.implicit === null);\n state.implicit = num;\n\n return this;\n};\n\nNode.prototype.obj = function obj() {\n const state = this._baseState;\n const args = Array.prototype.slice.call(arguments);\n\n state.obj = true;\n\n if (args.length !== 0)\n this._useArgs(args);\n\n return this;\n};\n\nNode.prototype.key = function key(newKey) {\n const state = this._baseState;\n\n assert(state.key === null);\n state.key = newKey;\n\n return this;\n};\n\nNode.prototype.any = function any() {\n const state = this._baseState;\n\n state.any = true;\n\n return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n const state = this._baseState;\n\n assert(state.choice === null);\n state.choice = obj;\n this._useArgs(Object.keys(obj).map(function(key) {\n return obj[key];\n }));\n\n return this;\n};\n\nNode.prototype.contains = function contains(item) {\n const state = this._baseState;\n\n assert(state.use === null);\n state.contains = item;\n\n return this;\n};\n\n//\n// Decoding\n//\n\nNode.prototype._decode = function decode(input, options) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return input.wrapResult(state.children[0]._decode(input, options));\n\n let result = state['default'];\n let present = true;\n\n let prevKey = null;\n if (state.key !== null)\n prevKey = input.enterKey(state.key);\n\n // Check if tag is there\n if (state.optional) {\n let tag = null;\n if (state.explicit !== null)\n tag = state.explicit;\n else if (state.implicit !== null)\n tag = state.implicit;\n else if (state.tag !== null)\n tag = state.tag;\n\n if (tag === null && !state.any) {\n // Trial and Error\n const save = input.save();\n try {\n if (state.choice === null)\n this._decodeGeneric(state.tag, input, options);\n else\n this._decodeChoice(input, options);\n present = true;\n } catch (e) {\n present = false;\n }\n input.restore(save);\n } else {\n present = this._peekTag(input, tag, state.any);\n\n if (input.isError(present))\n return present;\n }\n }\n\n // Push object on stack\n let prevObj;\n if (state.obj && present)\n prevObj = input.enterObject();\n\n if (present) {\n // Unwrap explicit values\n if (state.explicit !== null) {\n const explicit = this._decodeTag(input, state.explicit);\n if (input.isError(explicit))\n return explicit;\n input = explicit;\n }\n\n const start = input.offset;\n\n // Unwrap implicit and normal values\n if (state.use === null && state.choice === null) {\n let save;\n if (state.any)\n save = input.save();\n const body = this._decodeTag(\n input,\n state.implicit !== null ? state.implicit : state.tag,\n state.any\n );\n if (input.isError(body))\n return body;\n\n if (state.any)\n result = input.raw(save);\n else\n input = body;\n }\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), start, input.length, 'tagged');\n\n if (options && options.track && state.tag !== null)\n options.track(input.path(), input.offset, input.length, 'content');\n\n // Select proper method for tag\n if (state.any) {\n // no-op\n } else if (state.choice === null) {\n result = this._decodeGeneric(state.tag, input, options);\n } else {\n result = this._decodeChoice(input, options);\n }\n\n if (input.isError(result))\n return result;\n\n // Decode children\n if (!state.any && state.choice === null && state.children !== null) {\n state.children.forEach(function decodeChildren(child) {\n // NOTE: We are ignoring errors here, to let parser continue with other\n // parts of encoded data\n child._decode(input, options);\n });\n }\n\n // Decode contained/encoded by schema, only in bit or octet strings\n if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n const data = new DecoderBuffer(result);\n result = this._getUse(state.contains, input._reporterState.obj)\n ._decode(data, options);\n }\n }\n\n // Pop object\n if (state.obj && present)\n result = input.leaveObject(prevObj);\n\n // Set key\n if (state.key !== null && (result !== null || present === true))\n input.leaveKey(prevKey, state.key, result);\n else if (prevKey !== null)\n input.exitKey(prevKey);\n\n return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n const state = this._baseState;\n\n if (tag === 'seq' || tag === 'set')\n return null;\n if (tag === 'seqof' || tag === 'setof')\n return this._decodeList(input, tag, state.args[0], options);\n else if (/str$/.test(tag))\n return this._decodeStr(input, tag, options);\n else if (tag === 'objid' && state.args)\n return this._decodeObjid(input, state.args[0], state.args[1], options);\n else if (tag === 'objid')\n return this._decodeObjid(input, null, null, options);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._decodeTime(input, tag, options);\n else if (tag === 'null_')\n return this._decodeNull(input, options);\n else if (tag === 'bool')\n return this._decodeBool(input, options);\n else if (tag === 'objDesc')\n return this._decodeStr(input, tag, options);\n else if (tag === 'int' || tag === 'enum')\n return this._decodeInt(input, state.args && state.args[0], options);\n\n if (state.use !== null) {\n return this._getUse(state.use, input._reporterState.obj)\n ._decode(input, options);\n } else {\n return input.error('unknown tag: ' + tag);\n }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n\n const state = this._baseState;\n // Create altered use decoder if implicit is set\n state.useDecoder = this._use(entity, obj);\n assert(state.useDecoder._baseState.parent === null);\n state.useDecoder = state.useDecoder._baseState.children[0];\n if (state.implicit !== state.useDecoder._baseState.implicit) {\n state.useDecoder = state.useDecoder.clone();\n state.useDecoder._baseState.implicit = state.implicit;\n }\n return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n const state = this._baseState;\n let result = null;\n let match = false;\n\n Object.keys(state.choice).some(function(key) {\n const save = input.save();\n const node = state.choice[key];\n try {\n const value = node._decode(input, options);\n if (input.isError(value))\n return false;\n\n result = { type: key, value: value };\n match = true;\n } catch (e) {\n input.restore(save);\n return false;\n }\n return true;\n }, this);\n\n if (!match)\n return input.error('Choice not matched');\n\n return result;\n};\n\n//\n// Encoding\n//\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n const state = this._baseState;\n if (state['default'] !== null && state['default'] === data)\n return;\n\n const result = this._encodeValue(data, reporter, parent);\n if (result === undefined)\n return;\n\n if (this._skipDefault(result, reporter, parent))\n return;\n\n return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n const state = this._baseState;\n\n // Decode root node\n if (state.parent === null)\n return state.children[0]._encode(data, reporter || new Reporter());\n\n let result = null;\n\n // Set reporter to share it with a child class\n this.reporter = reporter;\n\n // Check if data is there\n if (state.optional && data === undefined) {\n if (state['default'] !== null)\n data = state['default'];\n else\n return;\n }\n\n // Encode children first\n let content = null;\n let primitive = false;\n if (state.any) {\n // Anything that was given is translated to buffer\n result = this._createEncoderBuffer(data);\n } else if (state.choice) {\n result = this._encodeChoice(data, reporter);\n } else if (state.contains) {\n content = this._getUse(state.contains, parent)._encode(data, reporter);\n primitive = true;\n } else if (state.children) {\n content = state.children.map(function(child) {\n if (child._baseState.tag === 'null_')\n return child._encode(null, reporter, data);\n\n if (child._baseState.key === null)\n return reporter.error('Child should have a key');\n const prevKey = reporter.enterKey(child._baseState.key);\n\n if (typeof data !== 'object')\n return reporter.error('Child expected, but input is not object');\n\n const res = child._encode(data[child._baseState.key], reporter, data);\n reporter.leaveKey(prevKey);\n\n return res;\n }, this).filter(function(child) {\n return child;\n });\n content = this._createEncoderBuffer(content);\n } else {\n if (state.tag === 'seqof' || state.tag === 'setof') {\n // TODO(indutny): this should be thrown on DSL level\n if (!(state.args && state.args.length === 1))\n return reporter.error('Too many args for : ' + state.tag);\n\n if (!Array.isArray(data))\n return reporter.error('seqof/setof, but data is not Array');\n\n const child = this.clone();\n child._baseState.implicit = null;\n content = this._createEncoderBuffer(data.map(function(item) {\n const state = this._baseState;\n\n return this._getUse(state.args[0], data)._encode(item, reporter);\n }, child));\n } else if (state.use !== null) {\n result = this._getUse(state.use, parent)._encode(data, reporter);\n } else {\n content = this._encodePrimitive(state.tag, data);\n primitive = true;\n }\n }\n\n // Encode data itself\n if (!state.any && state.choice === null) {\n const tag = state.implicit !== null ? state.implicit : state.tag;\n const cls = state.implicit === null ? 'universal' : 'context';\n\n if (tag === null) {\n if (state.use === null)\n reporter.error('Tag could be omitted only for .use()');\n } else {\n if (state.use === null)\n result = this._encodeComposite(tag, primitive, cls, content);\n }\n }\n\n // Wrap in explicit\n if (state.explicit !== null)\n result = this._encodeComposite(state.explicit, false, 'context', result);\n\n return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n const state = this._baseState;\n\n const node = state.choice[data.type];\n if (!node) {\n assert(\n false,\n data.type + ' not found in ' +\n JSON.stringify(Object.keys(state.choice)));\n }\n return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n const state = this._baseState;\n\n if (/str$/.test(tag))\n return this._encodeStr(data, tag);\n else if (tag === 'objid' && state.args)\n return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);\n else if (tag === 'objid')\n return this._encodeObjid(data, null, null);\n else if (tag === 'gentime' || tag === 'utctime')\n return this._encodeTime(data, tag);\n else if (tag === 'null_')\n return this._encodeNull();\n else if (tag === 'int' || tag === 'enum')\n return this._encodeInt(data, state.args && state.reverseArgs[0]);\n else if (tag === 'bool')\n return this._encodeBool(data);\n else if (tag === 'objDesc')\n return this._encodeStr(data, tag);\n else\n throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str);\n};\n","'use strict';\n\nconst inherits = require('inherits');\n\nfunction Reporter(options) {\n this._reporterState = {\n obj: null,\n path: [],\n options: options || {},\n errors: []\n };\n}\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n const state = this._reporterState;\n\n return { obj: state.obj, pathLen: state.path.length };\n};\n\nReporter.prototype.restore = function restore(data) {\n const state = this._reporterState;\n\n state.obj = data.obj;\n state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n const state = this._reporterState;\n\n state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n const state = this._reporterState;\n\n this.exitKey(index);\n if (state.obj !== null)\n state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n const state = this._reporterState;\n\n const prev = state.obj;\n state.obj = {};\n return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n const state = this._reporterState;\n\n const now = state.obj;\n state.obj = prev;\n return now;\n};\n\nReporter.prototype.error = function error(msg) {\n let err;\n const state = this._reporterState;\n\n const inherited = msg instanceof ReporterError;\n if (inherited) {\n err = msg;\n } else {\n err = new ReporterError(state.path.map(function(elem) {\n return '[' + JSON.stringify(elem) + ']';\n }).join(''), msg.message || msg, msg.stack);\n }\n\n if (!state.options.partial)\n throw err;\n\n if (!inherited)\n state.errors.push(err);\n\n return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n const state = this._reporterState;\n if (!state.options.partial)\n return result;\n\n return {\n result: this.isError(result) ? null : result,\n errors: state.errors\n };\n};\n\nfunction ReporterError(path, msg) {\n this.path = path;\n this.rethrow(msg);\n}\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n this.message = msg + ' at: ' + (this.path || '(shallow)');\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, ReporterError);\n\n if (!this.stack) {\n try {\n // IE only adds stack when thrown\n throw new Error(this.message);\n } catch (e) {\n this.stack = e.stack;\n }\n }\n return this;\n};\n","'use strict';\n\n// Helper\nfunction reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n}\n\nexports.tagClass = {\n 0: 'universal',\n 1: 'application',\n 2: 'context',\n 3: 'private'\n};\nexports.tagClassByName = reverse(exports.tagClass);\n\nexports.tag = {\n 0x00: 'end',\n 0x01: 'bool',\n 0x02: 'int',\n 0x03: 'bitstr',\n 0x04: 'octstr',\n 0x05: 'null_',\n 0x06: 'objid',\n 0x07: 'objDesc',\n 0x08: 'external',\n 0x09: 'real',\n 0x0a: 'enum',\n 0x0b: 'embed',\n 0x0c: 'utf8str',\n 0x0d: 'relativeOid',\n 0x10: 'seq',\n 0x11: 'set',\n 0x12: 'numstr',\n 0x13: 'printstr',\n 0x14: 't61str',\n 0x15: 'videostr',\n 0x16: 'ia5str',\n 0x17: 'utctime',\n 0x18: 'gentime',\n 0x19: 'graphstr',\n 0x1a: 'iso646str',\n 0x1b: 'genstr',\n 0x1c: 'unistr',\n 0x1d: 'charstr',\n 0x1e: 'bmpstr'\n};\nexports.tagByName = reverse(exports.tag);\n","'use strict';\n\nconst constants = exports;\n\n// Helper\nconstants._reverse = function reverse(map) {\n const res = {};\n\n Object.keys(map).forEach(function(key) {\n // Convert key to integer if it is stringified\n if ((key | 0) == key)\n key = key | 0;\n\n const value = map[key];\n res[value] = key;\n });\n\n return res;\n};\n\nconstants.der = require('./der');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst bignum = require('bn.js');\nconst DecoderBuffer = require('../base/buffer').DecoderBuffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DERDecoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n if (!DecoderBuffer.isDecoderBuffer(data)) {\n data = new DecoderBuffer(data, options);\n }\n\n return this.tree._decode(data, options);\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n if (buffer.isEmpty())\n return false;\n\n const state = buffer.save();\n const decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n buffer.restore(state);\n\n return decodedTag.tag === tag || decodedTag.tagStr === tag ||\n (decodedTag.tagStr + 'of') === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n const decodedTag = derDecodeTag(buffer,\n 'Failed to decode tag of \"' + tag + '\"');\n if (buffer.isError(decodedTag))\n return decodedTag;\n\n let len = derDecodeLen(buffer,\n decodedTag.primitive,\n 'Failed to get length of \"' + tag + '\"');\n\n // Failure\n if (buffer.isError(len))\n return len;\n\n if (!any &&\n decodedTag.tag !== tag &&\n decodedTag.tagStr !== tag &&\n decodedTag.tagStr + 'of' !== tag) {\n return buffer.error('Failed to match tag: \"' + tag + '\"');\n }\n\n if (decodedTag.primitive || len !== null)\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n\n // Indefinite length... find END tag\n const state = buffer.save();\n const res = this._skipUntilEnd(\n buffer,\n 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n if (buffer.isError(res))\n return res;\n\n len = buffer.offset - state.offset;\n buffer.restore(state);\n return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n for (;;) {\n const tag = derDecodeTag(buffer, fail);\n if (buffer.isError(tag))\n return tag;\n const len = derDecodeLen(buffer, tag.primitive, fail);\n if (buffer.isError(len))\n return len;\n\n let res;\n if (tag.primitive || len !== null)\n res = buffer.skip(len);\n else\n res = this._skipUntilEnd(buffer, fail);\n\n // Failure\n if (buffer.isError(res))\n return res;\n\n if (tag.tagStr === 'end')\n break;\n }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,\n options) {\n const result = [];\n while (!buffer.isEmpty()) {\n const possibleEnd = this._peekTag(buffer, 'end');\n if (buffer.isError(possibleEnd))\n return possibleEnd;\n\n const res = decoder.decode(buffer, 'der', options);\n if (buffer.isError(res) && possibleEnd)\n break;\n result.push(res);\n }\n return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n if (tag === 'bitstr') {\n const unused = buffer.readUInt8();\n if (buffer.isError(unused))\n return unused;\n return { unused: unused, data: buffer.raw() };\n } else if (tag === 'bmpstr') {\n const raw = buffer.raw();\n if (raw.length % 2 === 1)\n return buffer.error('Decoding of string type: bmpstr length mismatch');\n\n let str = '';\n for (let i = 0; i < raw.length / 2; i++) {\n str += String.fromCharCode(raw.readUInt16BE(i * 2));\n }\n return str;\n } else if (tag === 'numstr') {\n const numstr = buffer.raw().toString('ascii');\n if (!this._isNumstr(numstr)) {\n return buffer.error('Decoding of string type: ' +\n 'numstr unsupported characters');\n }\n return numstr;\n } else if (tag === 'octstr') {\n return buffer.raw();\n } else if (tag === 'objDesc') {\n return buffer.raw();\n } else if (tag === 'printstr') {\n const printstr = buffer.raw().toString('ascii');\n if (!this._isPrintstr(printstr)) {\n return buffer.error('Decoding of string type: ' +\n 'printstr unsupported characters');\n }\n return printstr;\n } else if (/str$/.test(tag)) {\n return buffer.raw().toString();\n } else {\n return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n let result;\n const identifiers = [];\n let ident = 0;\n let subident = 0;\n while (!buffer.isEmpty()) {\n subident = buffer.readUInt8();\n ident <<= 7;\n ident |= subident & 0x7f;\n if ((subident & 0x80) === 0) {\n identifiers.push(ident);\n ident = 0;\n }\n }\n if (subident & 0x80)\n identifiers.push(ident);\n\n const first = (identifiers[0] / 40) | 0;\n const second = identifiers[0] % 40;\n\n if (relative)\n result = identifiers;\n else\n result = [first, second].concat(identifiers.slice(1));\n\n if (values) {\n let tmp = values[result.join(' ')];\n if (tmp === undefined)\n tmp = values[result.join('.')];\n if (tmp !== undefined)\n result = tmp;\n }\n\n return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n const str = buffer.raw().toString();\n\n let year;\n let mon;\n let day;\n let hour;\n let min;\n let sec;\n if (tag === 'gentime') {\n year = str.slice(0, 4) | 0;\n mon = str.slice(4, 6) | 0;\n day = str.slice(6, 8) | 0;\n hour = str.slice(8, 10) | 0;\n min = str.slice(10, 12) | 0;\n sec = str.slice(12, 14) | 0;\n } else if (tag === 'utctime') {\n year = str.slice(0, 2) | 0;\n mon = str.slice(2, 4) | 0;\n day = str.slice(4, 6) | 0;\n hour = str.slice(6, 8) | 0;\n min = str.slice(8, 10) | 0;\n sec = str.slice(10, 12) | 0;\n if (year < 70)\n year = 2000 + year;\n else\n year = 1900 + year;\n } else {\n return buffer.error('Decoding ' + tag + ' time is not supported yet');\n }\n\n return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull() {\n return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n const res = buffer.readUInt8();\n if (buffer.isError(res))\n return res;\n else\n return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n // Bigint, return as it is (assume big endian)\n const raw = buffer.raw();\n let res = new bignum(raw);\n\n if (values)\n res = values[res.toString(10)] || res;\n\n return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getDecoder('der').tree;\n};\n\n// Utility methods\n\nfunction derDecodeTag(buf, fail) {\n let tag = buf.readUInt8(fail);\n if (buf.isError(tag))\n return tag;\n\n const cls = der.tagClass[tag >> 6];\n const primitive = (tag & 0x20) === 0;\n\n // Multi-octet tag - load\n if ((tag & 0x1f) === 0x1f) {\n let oct = tag;\n tag = 0;\n while ((oct & 0x80) === 0x80) {\n oct = buf.readUInt8(fail);\n if (buf.isError(oct))\n return oct;\n\n tag <<= 7;\n tag |= oct & 0x7f;\n }\n } else {\n tag &= 0x1f;\n }\n const tagStr = der.tag[tag];\n\n return {\n cls: cls,\n primitive: primitive,\n tag: tag,\n tagStr: tagStr\n };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n let len = buf.readUInt8(fail);\n if (buf.isError(len))\n return len;\n\n // Indefinite form\n if (!primitive && len === 0x80)\n return null;\n\n // Definite form\n if ((len & 0x80) === 0) {\n // Short form\n return len;\n }\n\n // Long form\n const num = len & 0x7f;\n if (num > 4)\n return buf.error('length octect is too long');\n\n len = 0;\n for (let i = 0; i < num; i++) {\n len <<= 8;\n const j = buf.readUInt8(fail);\n if (buf.isError(j))\n return j;\n len |= j;\n }\n\n return len;\n}\n","'use strict';\n\nconst decoders = exports;\n\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\n\nconst DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n DERDecoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n const lines = data.toString().split(/[\\r\\n]+/g);\n\n const label = options.label.toUpperCase();\n\n const re = /^-----(BEGIN|END) ([^-]+)-----$/;\n let start = -1;\n let end = -1;\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(re);\n if (match === null)\n continue;\n\n if (match[2] !== label)\n continue;\n\n if (start === -1) {\n if (match[1] !== 'BEGIN')\n break;\n start = i;\n } else {\n if (match[1] !== 'END')\n break;\n end = i;\n break;\n }\n }\n if (start === -1 || end === -1)\n throw new Error('PEM section not found for: ' + label);\n\n const base64 = lines.slice(start + 1, end).join('');\n // Remove excessive symbols\n base64.replace(/[^a-z0-9+/=]+/gi, '');\n\n const input = Buffer.from(base64, 'base64');\n return DERDecoder.prototype.decode.call(this, input, options);\n};\n","'use strict';\n\nconst inherits = require('inherits');\nconst Buffer = require('safer-buffer').Buffer;\nconst Node = require('../base/node');\n\n// Import DER constants\nconst der = require('../constants/der');\n\nfunction DEREncoder(entity) {\n this.enc = 'der';\n this.name = entity.name;\n this.entity = entity;\n\n // Construct base tree\n this.tree = new DERNode();\n this.tree._init(entity.body);\n}\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n return this.tree._encode(data, reporter).join();\n};\n\n// Tree methods\n\nfunction DERNode(parent) {\n Node.call(this, 'der', parent);\n}\ninherits(DERNode, Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag,\n primitive,\n cls,\n content) {\n const encodedTag = encodeTag(tag, primitive, cls, this.reporter);\n\n // Short form\n if (content.length < 0x80) {\n const header = Buffer.alloc(2);\n header[0] = encodedTag;\n header[1] = content.length;\n return this._createEncoderBuffer([ header, content ]);\n }\n\n // Long form\n // Count octets required to store length\n let lenOctets = 1;\n for (let i = content.length; i >= 0x100; i >>= 8)\n lenOctets++;\n\n const header = Buffer.alloc(1 + 1 + lenOctets);\n header[0] = encodedTag;\n header[1] = 0x80 | lenOctets;\n\n for (let i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)\n header[i] = j & 0xff;\n\n return this._createEncoderBuffer([ header, content ]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n if (tag === 'bitstr') {\n return this._createEncoderBuffer([ str.unused | 0, str.data ]);\n } else if (tag === 'bmpstr') {\n const buf = Buffer.alloc(str.length * 2);\n for (let i = 0; i < str.length; i++) {\n buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n }\n return this._createEncoderBuffer(buf);\n } else if (tag === 'numstr') {\n if (!this._isNumstr(str)) {\n return this.reporter.error('Encoding of string type: numstr supports ' +\n 'only digits and space');\n }\n return this._createEncoderBuffer(str);\n } else if (tag === 'printstr') {\n if (!this._isPrintstr(str)) {\n return this.reporter.error('Encoding of string type: printstr supports ' +\n 'only latin upper and lower case letters, ' +\n 'digits, space, apostrophe, left and rigth ' +\n 'parenthesis, plus sign, comma, hyphen, ' +\n 'dot, slash, colon, equal sign, ' +\n 'question mark');\n }\n return this._createEncoderBuffer(str);\n } else if (/str$/.test(tag)) {\n return this._createEncoderBuffer(str);\n } else if (tag === 'objDesc') {\n return this._createEncoderBuffer(str);\n } else {\n return this.reporter.error('Encoding of string type: ' + tag +\n ' unsupported');\n }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n if (typeof id === 'string') {\n if (!values)\n return this.reporter.error('string objid given, but no values map found');\n if (!values.hasOwnProperty(id))\n return this.reporter.error('objid not found in values map');\n id = values[id].split(/[\\s.]+/g);\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n } else if (Array.isArray(id)) {\n id = id.slice();\n for (let i = 0; i < id.length; i++)\n id[i] |= 0;\n }\n\n if (!Array.isArray(id)) {\n return this.reporter.error('objid() should be either array or string, ' +\n 'got: ' + JSON.stringify(id));\n }\n\n if (!relative) {\n if (id[1] >= 40)\n return this.reporter.error('Second objid identifier OOB');\n id.splice(0, 2, id[0] * 40 + id[1]);\n }\n\n // Count number of octets\n let size = 0;\n for (let i = 0; i < id.length; i++) {\n let ident = id[i];\n for (size++; ident >= 0x80; ident >>= 7)\n size++;\n }\n\n const objid = Buffer.alloc(size);\n let offset = objid.length - 1;\n for (let i = id.length - 1; i >= 0; i--) {\n let ident = id[i];\n objid[offset--] = ident & 0x7f;\n while ((ident >>= 7) > 0)\n objid[offset--] = 0x80 | (ident & 0x7f);\n }\n\n return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n if (num < 10)\n return '0' + num;\n else\n return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n let str;\n const date = new Date(time);\n\n if (tag === 'gentime') {\n str = [\n two(date.getUTCFullYear()),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else if (tag === 'utctime') {\n str = [\n two(date.getUTCFullYear() % 100),\n two(date.getUTCMonth() + 1),\n two(date.getUTCDate()),\n two(date.getUTCHours()),\n two(date.getUTCMinutes()),\n two(date.getUTCSeconds()),\n 'Z'\n ].join('');\n } else {\n this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n }\n\n return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n if (typeof num === 'string') {\n if (!values)\n return this.reporter.error('String int or enum given, but no values map');\n if (!values.hasOwnProperty(num)) {\n return this.reporter.error('Values map doesn\\'t contain: ' +\n JSON.stringify(num));\n }\n num = values[num];\n }\n\n // Bignum, assume big endian\n if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n const numArray = num.toArray();\n if (!num.sign && numArray[0] & 0x80) {\n numArray.unshift(0);\n }\n num = Buffer.from(numArray);\n }\n\n if (Buffer.isBuffer(num)) {\n let size = num.length;\n if (num.length === 0)\n size++;\n\n const out = Buffer.alloc(size);\n num.copy(out);\n if (num.length === 0)\n out[0] = 0;\n return this._createEncoderBuffer(out);\n }\n\n if (num < 0x80)\n return this._createEncoderBuffer(num);\n\n if (num < 0x100)\n return this._createEncoderBuffer([0, num]);\n\n let size = 1;\n for (let i = num; i >= 0x100; i >>= 8)\n size++;\n\n const out = new Array(size);\n for (let i = out.length - 1; i >= 0; i--) {\n out[i] = num & 0xff;\n num >>= 8;\n }\n if(out[0] & 0x80) {\n out.unshift(0);\n }\n\n return this._createEncoderBuffer(Buffer.from(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n if (typeof entity === 'function')\n entity = entity(obj);\n return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n const state = this._baseState;\n let i;\n if (state['default'] === null)\n return false;\n\n const data = dataBuffer.join();\n if (state.defaultBuffer === undefined)\n state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n\n if (data.length !== state.defaultBuffer.length)\n return false;\n\n for (i=0; i < data.length; i++)\n if (data[i] !== state.defaultBuffer[i])\n return false;\n\n return true;\n};\n\n// Utility methods\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n let res;\n\n if (tag === 'seqof')\n tag = 'seq';\n else if (tag === 'setof')\n tag = 'set';\n\n if (der.tagByName.hasOwnProperty(tag))\n res = der.tagByName[tag];\n else if (typeof tag === 'number' && (tag | 0) === tag)\n res = tag;\n else\n return reporter.error('Unknown tag: ' + tag);\n\n if (res >= 0x1f)\n return reporter.error('Multi-octet tag encoding unsupported');\n\n if (!primitive)\n res |= 0x20;\n\n res |= (der.tagClassByName[cls || 'universal'] << 6);\n\n return res;\n}\n","'use strict';\n\nconst encoders = exports;\n\nencoders.der = require('./der');\nencoders.pem = require('./pem');\n","'use strict';\n\nconst inherits = require('inherits');\n\nconst DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n DEREncoder.call(this, entity);\n this.enc = 'pem';\n}\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n const buf = DEREncoder.prototype.encode.call(this, data);\n\n const p = buf.toString('base64');\n const out = [ '-----BEGIN ' + options.label + '-----' ];\n for (let i = 0; i < p.length; i += 64)\n out.push(p.slice(i, i + 64));\n out.push('-----END ' + options.label + '-----');\n return out.join('\\n');\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\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","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [number & 0x3ffffff];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [0];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this._strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // '0' - '9'\n if (c >= 48 && c <= 57) {\n return c - 48;\n // 'A' - 'F'\n } else if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n } else {\n assert(false, 'Invalid character in ' + string);\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this._strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var b = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n b = c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n b = c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n b = c;\n }\n assert(c >= 0 && b < mul, 'Invalid character');\n r += b;\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [0];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this._strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n function move (dest, src) {\n dest.words = src.words;\n dest.length = src.length;\n dest.negative = src.negative;\n dest.red = src.red;\n }\n\n BN.prototype._move = function _move (dest) {\n move(dest, this);\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype._strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n // Check Symbol.for because not everywhere where Symbol defined\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#Browser_compatibility\n if (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function') {\n try {\n BN.prototype[Symbol.for('nodejs.util.inspect.custom')] = inspect;\n } catch (e) {\n BN.prototype.inspect = inspect;\n }\n } else {\n BN.prototype.inspect = inspect;\n }\n\n function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n }\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modrn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16, 2);\n };\n\n if (Buffer) {\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n return this.toArrayLike(Buffer, endian, length);\n };\n }\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n var allocate = function allocate (ArrayType, size) {\n if (ArrayType.allocUnsafe) {\n return ArrayType.allocUnsafe(size);\n }\n return new ArrayType(size);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n this._strip();\n\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n var res = allocate(ArrayType, reqLength);\n var postfix = endian === 'le' ? 'LE' : 'BE';\n this['_toArrayLike' + postfix](res, byteLength);\n return res;\n };\n\n BN.prototype._toArrayLikeLE = function _toArrayLikeLE (res, byteLength) {\n var position = 0;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position++] = word & 0xff;\n if (position < res.length) {\n res[position++] = (word >> 8) & 0xff;\n }\n if (position < res.length) {\n res[position++] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position < res.length) {\n res[position++] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position < res.length) {\n res[position++] = carry;\n\n while (position < res.length) {\n res[position++] = 0;\n }\n }\n };\n\n BN.prototype._toArrayLikeBE = function _toArrayLikeBE (res, byteLength) {\n var position = res.length - 1;\n var carry = 0;\n\n for (var i = 0, shift = 0; i < this.length; i++) {\n var word = (this.words[i] << shift) | carry;\n\n res[position--] = word & 0xff;\n if (position >= 0) {\n res[position--] = (word >> 8) & 0xff;\n }\n if (position >= 0) {\n res[position--] = (word >> 16) & 0xff;\n }\n\n if (shift === 6) {\n if (position >= 0) {\n res[position--] = (word >> 24) & 0xff;\n }\n carry = 0;\n shift = 0;\n } else {\n carry = word >>> 24;\n shift += 2;\n }\n }\n\n if (position >= 0) {\n res[position--] = carry;\n\n while (position >= 0) {\n res[position--] = 0;\n }\n }\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] >>> wbit) & 0x01;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this._strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this._strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this._strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this._strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this._strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this._strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out._strip();\n }\n\n function jumboMulTo (self, num, out) {\n // Temporary disable, see https://github.com/indutny/bn.js/issues/211\n // var fftm = new FFTM();\n // return fftm.mulp(self, num, out);\n return bigMulTo(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out._strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this._strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this._strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) <= num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this._strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this._strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this._strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q._strip();\n }\n a._strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modrn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || (r2 === 1 && cmp === 0)) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modrn = function modrn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return isNegNum ? -acc : acc;\n };\n\n // WARNING: DEPRECATED\n BN.prototype.modn = function modn (num) {\n return this.modrn(num);\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n var isNegNum = num < 0;\n if (isNegNum) num = -num;\n\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n this._strip();\n return isNegNum ? this.ineg() : this;\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this._strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is a BN v4 instance\n r.strip();\n } else {\n // r is a BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n\n move(a, a.umod(this.m)._forceRed(this));\n return a;\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\n\nvar Buffer = require('safe-buffer').Buffer\n\nfunction asUInt32Array (buf) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n\n var len = (buf.length / 4) | 0\n var out = new Array(len)\n\n for (var i = 0; i < len; i++) {\n out[i] = buf.readUInt32BE(i * 4)\n }\n\n return out\n}\n\nfunction scrubVec (v) {\n for (var i = 0; i < v.length; v++) {\n v[i] = 0\n }\n}\n\nfunction cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {\n var SUB_MIX0 = SUB_MIX[0]\n var SUB_MIX1 = SUB_MIX[1]\n var SUB_MIX2 = SUB_MIX[2]\n var SUB_MIX3 = SUB_MIX[3]\n\n var s0 = M[0] ^ keySchedule[0]\n var s1 = M[1] ^ keySchedule[1]\n var s2 = M[2] ^ keySchedule[2]\n var s3 = M[3] ^ keySchedule[3]\n var t0, t1, t2, t3\n var ksRow = 4\n\n for (var round = 1; round < nRounds; round++) {\n t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]\n t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]\n t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]\n t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]\n s0 = t0\n s1 = t1\n s2 = t2\n s3 = t3\n }\n\n t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]\n t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]\n t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]\n t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]\n t0 = t0 >>> 0\n t1 = t1 >>> 0\n t2 = t2 >>> 0\n t3 = t3 >>> 0\n\n return [t0, t1, t2, t3]\n}\n\n// AES constants\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]\nvar G = (function () {\n // Compute double table\n var d = new Array(256)\n for (var j = 0; j < 256; j++) {\n if (j < 128) {\n d[j] = j << 1\n } else {\n d[j] = (j << 1) ^ 0x11b\n }\n }\n\n var SBOX = []\n var INV_SBOX = []\n var SUB_MIX = [[], [], [], []]\n var INV_SUB_MIX = [[], [], [], []]\n\n // Walk GF(2^8)\n var x = 0\n var xi = 0\n for (var i = 0; i < 256; ++i) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63\n SBOX[x] = sx\n INV_SBOX[sx] = x\n\n // Compute multiplication\n var x2 = d[x]\n var x4 = d[x2]\n var x8 = d[x4]\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100)\n SUB_MIX[0][x] = (t << 24) | (t >>> 8)\n SUB_MIX[1][x] = (t << 16) | (t >>> 16)\n SUB_MIX[2][x] = (t << 8) | (t >>> 24)\n SUB_MIX[3][x] = t\n\n // Compute inv sub bytes, inv mix columns tables\n t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)\n INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)\n INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)\n INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)\n INV_SUB_MIX[3][sx] = t\n\n if (x === 0) {\n x = xi = 1\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]]\n xi ^= d[d[xi]]\n }\n }\n\n return {\n SBOX: SBOX,\n INV_SBOX: INV_SBOX,\n SUB_MIX: SUB_MIX,\n INV_SUB_MIX: INV_SUB_MIX\n }\n})()\n\nfunction AES (key) {\n this._key = asUInt32Array(key)\n this._reset()\n}\n\nAES.blockSize = 4 * 4\nAES.keySize = 256 / 8\nAES.prototype.blockSize = AES.blockSize\nAES.prototype.keySize = AES.keySize\nAES.prototype._reset = function () {\n var keyWords = this._key\n var keySize = keyWords.length\n var nRounds = keySize + 6\n var ksRows = (nRounds + 1) * 4\n\n var keySchedule = []\n for (var k = 0; k < keySize; k++) {\n keySchedule[k] = keyWords[k]\n }\n\n for (k = keySize; k < ksRows; k++) {\n var t = keySchedule[k - 1]\n\n if (k % keySize === 0) {\n t = (t << 8) | (t >>> 24)\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n\n t ^= RCON[(k / keySize) | 0] << 24\n } else if (keySize > 6 && k % keySize === 4) {\n t =\n (G.SBOX[t >>> 24] << 24) |\n (G.SBOX[(t >>> 16) & 0xff] << 16) |\n (G.SBOX[(t >>> 8) & 0xff] << 8) |\n (G.SBOX[t & 0xff])\n }\n\n keySchedule[k] = keySchedule[k - keySize] ^ t\n }\n\n var invKeySchedule = []\n for (var ik = 0; ik < ksRows; ik++) {\n var ksR = ksRows - ik\n var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]\n\n if (ik < 4 || ksR <= 4) {\n invKeySchedule[ik] = tt\n } else {\n invKeySchedule[ik] =\n G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^\n G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^\n G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^\n G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]\n }\n }\n\n this._nRounds = nRounds\n this._keySchedule = keySchedule\n this._invKeySchedule = invKeySchedule\n}\n\nAES.prototype.encryptBlockRaw = function (M) {\n M = asUInt32Array(M)\n return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)\n}\n\nAES.prototype.encryptBlock = function (M) {\n var out = this.encryptBlockRaw(M)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[1], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[3], 12)\n return buf\n}\n\nAES.prototype.decryptBlock = function (M) {\n M = asUInt32Array(M)\n\n // swap\n var m1 = M[1]\n M[1] = M[3]\n M[3] = m1\n\n var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0], 0)\n buf.writeUInt32BE(out[3], 4)\n buf.writeUInt32BE(out[2], 8)\n buf.writeUInt32BE(out[1], 12)\n return buf\n}\n\nAES.prototype.scrub = function () {\n scrubVec(this._keySchedule)\n scrubVec(this._invKeySchedule)\n scrubVec(this._key)\n}\n\nmodule.exports.AES = AES\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\nvar GHASH = require('./ghash')\nvar xor = require('buffer-xor')\nvar incr32 = require('./incr32')\n\nfunction xorTest (a, b) {\n var out = 0\n if (a.length !== b.length) out++\n\n var len = Math.min(a.length, b.length)\n for (var i = 0; i < len; ++i) {\n out += (a[i] ^ b[i])\n }\n\n return out\n}\n\nfunction calcIv (self, iv, ck) {\n if (iv.length === 12) {\n self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])\n return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])\n }\n var ghash = new GHASH(ck)\n var len = iv.length\n var toPad = len % 16\n ghash.update(iv)\n if (toPad) {\n toPad = 16 - toPad\n ghash.update(Buffer.alloc(toPad, 0))\n }\n ghash.update(Buffer.alloc(8, 0))\n var ivBits = len * 8\n var tail = Buffer.alloc(8)\n tail.writeUIntBE(ivBits, 0, 8)\n ghash.update(tail)\n self._finID = ghash.state\n var out = Buffer.from(self._finID)\n incr32(out)\n return out\n}\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n var h = Buffer.alloc(4, 0)\n\n this._cipher = new aes.AES(key)\n var ck = this._cipher.encryptBlock(h)\n this._ghash = new GHASH(ck)\n iv = calcIv(this, iv, ck)\n\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._alen = 0\n this._len = 0\n this._mode = mode\n\n this._authTag = null\n this._called = false\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n if (!this._called && this._alen) {\n var rump = 16 - (this._alen % 16)\n if (rump < 16) {\n rump = Buffer.alloc(rump, 0)\n this._ghash.update(rump)\n }\n }\n\n this._called = true\n var out = this._mode.encrypt(this, chunk)\n if (this._decrypt) {\n this._ghash.update(chunk)\n } else {\n this._ghash.update(out)\n }\n this._len += chunk.length\n return out\n}\n\nStreamCipher.prototype._final = function () {\n if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')\n\n var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))\n if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')\n\n this._authTag = tag\n this._cipher.scrub()\n}\n\nStreamCipher.prototype.getAuthTag = function getAuthTag () {\n if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')\n\n return this._authTag\n}\n\nStreamCipher.prototype.setAuthTag = function setAuthTag (tag) {\n if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')\n\n this._authTag = tag\n}\n\nStreamCipher.prototype.setAAD = function setAAD (buf) {\n if (this._called) throw new Error('Attempting to set AAD in unsupported state')\n\n this._ghash.update(buf)\n this._alen += buf.length\n}\n\nmodule.exports = StreamCipher\n","var ciphers = require('./encrypter')\nvar deciphers = require('./decrypter')\nvar modes = require('./modes/list.json')\n\nfunction getCiphers () {\n return Object.keys(modes)\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv\nexports.createDecipher = exports.Decipher = deciphers.createDecipher\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar MODES = require('./modes')\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Decipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._last = void 0\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Decipher, Transform)\n\nDecipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n while ((chunk = this._cache.get(this._autopadding))) {\n thing = this._mode.decrypt(this, chunk)\n out.push(thing)\n }\n return Buffer.concat(out)\n}\n\nDecipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n return unpad(this._mode.decrypt(this, chunk))\n } else if (chunk) {\n throw new Error('data not multiple of block length')\n }\n}\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function (autoPadding) {\n var out\n if (autoPadding) {\n if (this.cache.length > 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n } else {\n if (this.cache.length >= 16) {\n out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n }\n\n return null\n}\n\nSplitter.prototype.flush = function () {\n if (this.cache.length) return this.cache\n}\n\nfunction unpad (last) {\n var padded = last[15]\n if (padded < 1 || padded > 16) {\n throw new Error('unable to decrypt data')\n }\n var i = -1\n while (++i < padded) {\n if (last[(i + (16 - padded))] !== padded) {\n throw new Error('unable to decrypt data')\n }\n }\n if (padded === 16) return\n\n return last.slice(0, 16 - padded)\n}\n\nfunction createDecipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv, true)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv, true)\n }\n\n return new Decipher(config.module, password, iv)\n}\n\nfunction createDecipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createDecipher = createDecipher\nexports.createDecipheriv = createDecipheriv\n","var MODES = require('./modes')\nvar AuthCipher = require('./authCipher')\nvar Buffer = require('safe-buffer').Buffer\nvar StreamCipher = require('./streamCipher')\nvar Transform = require('cipher-base')\nvar aes = require('./aes')\nvar ebtk = require('evp_bytestokey')\nvar inherits = require('inherits')\n\nfunction Cipher (mode, key, iv) {\n Transform.call(this)\n\n this._cache = new Splitter()\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._mode = mode\n this._autopadding = true\n}\n\ninherits(Cipher, Transform)\n\nCipher.prototype._update = function (data) {\n this._cache.add(data)\n var chunk\n var thing\n var out = []\n\n while ((chunk = this._cache.get())) {\n thing = this._mode.encrypt(this, chunk)\n out.push(thing)\n }\n\n return Buffer.concat(out)\n}\n\nvar PADDING = Buffer.alloc(16, 0x10)\n\nCipher.prototype._final = function () {\n var chunk = this._cache.flush()\n if (this._autopadding) {\n chunk = this._mode.encrypt(this, chunk)\n this._cipher.scrub()\n return chunk\n }\n\n if (!chunk.equals(PADDING)) {\n this._cipher.scrub()\n throw new Error('data not multiple of block length')\n }\n}\n\nCipher.prototype.setAutoPadding = function (setTo) {\n this._autopadding = !!setTo\n return this\n}\n\nfunction Splitter () {\n this.cache = Buffer.allocUnsafe(0)\n}\n\nSplitter.prototype.add = function (data) {\n this.cache = Buffer.concat([this.cache, data])\n}\n\nSplitter.prototype.get = function () {\n if (this.cache.length > 15) {\n var out = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n return out\n }\n return null\n}\n\nSplitter.prototype.flush = function () {\n var len = 16 - this.cache.length\n var padBuff = Buffer.allocUnsafe(len)\n\n var i = -1\n while (++i < len) {\n padBuff.writeUInt8(len, i)\n }\n\n return Buffer.concat([this.cache, padBuff])\n}\n\nfunction createCipheriv (suite, password, iv) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n if (typeof password === 'string') password = Buffer.from(password)\n if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)\n\n if (typeof iv === 'string') iv = Buffer.from(iv)\n if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)\n\n if (config.type === 'stream') {\n return new StreamCipher(config.module, password, iv)\n } else if (config.type === 'auth') {\n return new AuthCipher(config.module, password, iv)\n }\n\n return new Cipher(config.module, password, iv)\n}\n\nfunction createCipher (suite, password) {\n var config = MODES[suite.toLowerCase()]\n if (!config) throw new TypeError('invalid suite type')\n\n var keys = ebtk(password, false, config.key, config.iv)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nexports.createCipheriv = createCipheriv\nexports.createCipher = createCipher\n","var Buffer = require('safe-buffer').Buffer\nvar ZEROES = Buffer.alloc(16, 0)\n\nfunction toArray (buf) {\n return [\n buf.readUInt32BE(0),\n buf.readUInt32BE(4),\n buf.readUInt32BE(8),\n buf.readUInt32BE(12)\n ]\n}\n\nfunction fromArray (out) {\n var buf = Buffer.allocUnsafe(16)\n buf.writeUInt32BE(out[0] >>> 0, 0)\n buf.writeUInt32BE(out[1] >>> 0, 4)\n buf.writeUInt32BE(out[2] >>> 0, 8)\n buf.writeUInt32BE(out[3] >>> 0, 12)\n return buf\n}\n\nfunction GHASH (key) {\n this.h = key\n this.state = Buffer.alloc(16, 0)\n this.cache = Buffer.allocUnsafe(0)\n}\n\n// from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\nGHASH.prototype.ghash = function (block) {\n var i = -1\n while (++i < block.length) {\n this.state[i] ^= block[i]\n }\n this._multiply()\n}\n\nGHASH.prototype._multiply = function () {\n var Vi = toArray(this.h)\n var Zi = [0, 0, 0, 0]\n var j, xi, lsbVi\n var i = -1\n while (++i < 128) {\n xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0\n if (xi) {\n // Z_i+1 = Z_i ^ V_i\n Zi[0] ^= Vi[0]\n Zi[1] ^= Vi[1]\n Zi[2] ^= Vi[2]\n Zi[3] ^= Vi[3]\n }\n\n // Store the value of LSB(V_i)\n lsbVi = (Vi[3] & 1) !== 0\n\n // V_i+1 = V_i >> 1\n for (j = 3; j > 0; j--) {\n Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)\n }\n Vi[0] = Vi[0] >>> 1\n\n // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n if (lsbVi) {\n Vi[0] = Vi[0] ^ (0xe1 << 24)\n }\n }\n this.state = fromArray(Zi)\n}\n\nGHASH.prototype.update = function (buf) {\n this.cache = Buffer.concat([this.cache, buf])\n var chunk\n while (this.cache.length >= 16) {\n chunk = this.cache.slice(0, 16)\n this.cache = this.cache.slice(16)\n this.ghash(chunk)\n }\n}\n\nGHASH.prototype.final = function (abl, bl) {\n if (this.cache.length) {\n this.ghash(Buffer.concat([this.cache, ZEROES], 16))\n }\n\n this.ghash(fromArray([0, abl, 0, bl]))\n return this.state\n}\n\nmodule.exports = GHASH\n","function incr32 (iv) {\n var len = iv.length\n var item\n while (len--) {\n item = iv.readUInt8(len)\n if (item === 255) {\n iv.writeUInt8(0, len)\n } else {\n item++\n iv.writeUInt8(item, len)\n break\n }\n }\n}\nmodule.exports = incr32\n","var xor = require('buffer-xor')\n\nexports.encrypt = function (self, block) {\n var data = xor(block, self._prev)\n\n self._prev = self._cipher.encryptBlock(data)\n return self._prev\n}\n\nexports.decrypt = function (self, block) {\n var pad = self._prev\n\n self._prev = block\n var out = self._cipher.decryptBlock(block)\n\n return xor(out, pad)\n}\n","var Buffer = require('safe-buffer').Buffer\nvar xor = require('buffer-xor')\n\nfunction encryptStart (self, data, decrypt) {\n var len = data.length\n var out = xor(data, self._cache)\n self._cache = self._cache.slice(len)\n self._prev = Buffer.concat([self._prev, decrypt ? data : out])\n return out\n}\n\nexports.encrypt = function (self, data, decrypt) {\n var out = Buffer.allocUnsafe(0)\n var len\n\n while (data.length) {\n if (self._cache.length === 0) {\n self._cache = self._cipher.encryptBlock(self._prev)\n self._prev = Buffer.allocUnsafe(0)\n }\n\n if (self._cache.length <= data.length) {\n len = self._cache.length\n out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])\n data = data.slice(len)\n } else {\n out = Buffer.concat([out, encryptStart(self, data, decrypt)])\n break\n }\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad\n var i = -1\n var len = 8\n var out = 0\n var bit, value\n while (++i < len) {\n pad = self._cipher.encryptBlock(self._prev)\n bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0\n value = pad[0] ^ bit\n out += ((value & 0x80) >> (i % 8))\n self._prev = shiftIn(self._prev, decrypt ? bit : value)\n }\n return out\n}\n\nfunction shiftIn (buffer, value) {\n var len = buffer.length\n var i = -1\n var out = Buffer.allocUnsafe(buffer.length)\n buffer = Buffer.concat([buffer, Buffer.from([value])])\n\n while (++i < len) {\n out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)\n }\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var Buffer = require('safe-buffer').Buffer\n\nfunction encryptByte (self, byteParam, decrypt) {\n var pad = self._cipher.encryptBlock(self._prev)\n var out = pad[0] ^ byteParam\n\n self._prev = Buffer.concat([\n self._prev.slice(1),\n Buffer.from([decrypt ? byteParam : out])\n ])\n\n return out\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n var len = chunk.length\n var out = Buffer.allocUnsafe(len)\n var i = -1\n\n while (++i < len) {\n out[i] = encryptByte(self, chunk[i], decrypt)\n }\n\n return out\n}\n","var xor = require('buffer-xor')\nvar Buffer = require('safe-buffer').Buffer\nvar incr32 = require('../incr32')\n\nfunction getBlock (self) {\n var out = self._cipher.encryptBlockRaw(self._prev)\n incr32(self._prev)\n return out\n}\n\nvar blockSize = 16\nexports.encrypt = function (self, chunk) {\n var chunkNum = Math.ceil(chunk.length / blockSize)\n var start = self._cache.length\n self._cache = Buffer.concat([\n self._cache,\n Buffer.allocUnsafe(chunkNum * blockSize)\n ])\n for (var i = 0; i < chunkNum; i++) {\n var out = getBlock(self)\n var offset = start + i * blockSize\n self._cache.writeUInt32BE(out[0], offset + 0)\n self._cache.writeUInt32BE(out[1], offset + 4)\n self._cache.writeUInt32BE(out[2], offset + 8)\n self._cache.writeUInt32BE(out[3], offset + 12)\n }\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","exports.encrypt = function (self, block) {\n return self._cipher.encryptBlock(block)\n}\n\nexports.decrypt = function (self, block) {\n return self._cipher.decryptBlock(block)\n}\n","var modeModules = {\n ECB: require('./ecb'),\n CBC: require('./cbc'),\n CFB: require('./cfb'),\n CFB8: require('./cfb8'),\n CFB1: require('./cfb1'),\n OFB: require('./ofb'),\n CTR: require('./ctr'),\n GCM: require('./ctr')\n}\n\nvar modes = require('./list.json')\n\nfor (var key in modes) {\n modes[key].module = modeModules[modes[key].mode]\n}\n\nmodule.exports = modes\n","var xor = require('buffer-xor')\n\nfunction getBlock (self) {\n self._prev = self._cipher.encryptBlock(self._prev)\n return self._prev\n}\n\nexports.encrypt = function (self, chunk) {\n while (self._cache.length < chunk.length) {\n self._cache = Buffer.concat([self._cache, getBlock(self)])\n }\n\n var pad = self._cache.slice(0, chunk.length)\n self._cache = self._cache.slice(chunk.length)\n return xor(chunk, pad)\n}\n","var aes = require('./aes')\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('cipher-base')\nvar inherits = require('inherits')\n\nfunction StreamCipher (mode, key, iv, decrypt) {\n Transform.call(this)\n\n this._cipher = new aes.AES(key)\n this._prev = Buffer.from(iv)\n this._cache = Buffer.allocUnsafe(0)\n this._secCache = Buffer.allocUnsafe(0)\n this._decrypt = decrypt\n this._mode = mode\n}\n\ninherits(StreamCipher, Transform)\n\nStreamCipher.prototype._update = function (chunk) {\n return this._mode.encrypt(this, chunk, this._decrypt)\n}\n\nStreamCipher.prototype._final = function () {\n this._cipher.scrub()\n}\n\nmodule.exports = StreamCipher\n","var DES = require('browserify-des')\nvar aes = require('browserify-aes/browser')\nvar aesModes = require('browserify-aes/modes')\nvar desModes = require('browserify-des/modes')\nvar ebtk = require('evp_bytestokey')\n\nfunction createCipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createCipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createDecipher (suite, password) {\n suite = suite.toLowerCase()\n\n var keyLen, ivLen\n if (aesModes[suite]) {\n keyLen = aesModes[suite].key\n ivLen = aesModes[suite].iv\n } else if (desModes[suite]) {\n keyLen = desModes[suite].key * 8\n ivLen = desModes[suite].iv\n } else {\n throw new TypeError('invalid suite type')\n }\n\n var keys = ebtk(password, false, keyLen, ivLen)\n return createDecipheriv(suite, keys.key, keys.iv)\n}\n\nfunction createCipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createCipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction createDecipheriv (suite, key, iv) {\n suite = suite.toLowerCase()\n if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv)\n if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true })\n\n throw new TypeError('invalid suite type')\n}\n\nfunction getCiphers () {\n return Object.keys(desModes).concat(aes.getCiphers())\n}\n\nexports.createCipher = exports.Cipher = createCipher\nexports.createCipheriv = exports.Cipheriv = createCipheriv\nexports.createDecipher = exports.Decipher = createDecipher\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv\nexports.listCiphers = exports.getCiphers = getCiphers\n","var CipherBase = require('cipher-base')\nvar des = require('des.js')\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar modes = {\n 'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede3': des.EDE,\n 'des-ede-cbc': des.CBC.instantiate(des.EDE),\n 'des-ede': des.EDE,\n 'des-cbc': des.CBC.instantiate(des.DES),\n 'des-ecb': des.DES\n}\nmodes.des = modes['des-cbc']\nmodes.des3 = modes['des-ede3-cbc']\nmodule.exports = DES\ninherits(DES, CipherBase)\nfunction DES (opts) {\n CipherBase.call(this)\n var modeName = opts.mode.toLowerCase()\n var mode = modes[modeName]\n var type\n if (opts.decrypt) {\n type = 'decrypt'\n } else {\n type = 'encrypt'\n }\n var key = opts.key\n if (!Buffer.isBuffer(key)) {\n key = Buffer.from(key)\n }\n if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n key = Buffer.concat([key, key.slice(0, 8)])\n }\n var iv = opts.iv\n if (!Buffer.isBuffer(iv)) {\n iv = Buffer.from(iv)\n }\n this._des = mode.create({\n key: key,\n iv: iv,\n type: type\n })\n}\nDES.prototype._update = function (data) {\n return Buffer.from(this._des.update(data))\n}\nDES.prototype._final = function () {\n return Buffer.from(this._des.final())\n}\n","exports['des-ecb'] = {\n key: 8,\n iv: 0\n}\nexports['des-cbc'] = exports.des = {\n key: 8,\n iv: 8\n}\nexports['des-ede3-cbc'] = exports.des3 = {\n key: 24,\n iv: 8\n}\nexports['des-ede3'] = {\n key: 24,\n iv: 0\n}\nexports['des-ede-cbc'] = {\n key: 16,\n iv: 8\n}\nexports['des-ede'] = {\n key: 16,\n iv: 0\n}\n","var BN = require('bn.js')\nvar randomBytes = require('randombytes')\n\nfunction blind (priv) {\n var r = getr(priv)\n var blinder = r.toRed(BN.mont(priv.modulus)).redPow(new BN(priv.publicExponent)).fromRed()\n return { blinder: blinder, unblinder: r.invm(priv.modulus) }\n}\n\nfunction getr (priv) {\n var len = priv.modulus.byteLength()\n var r\n do {\n r = new BN(randomBytes(len))\n } while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2))\n return r\n}\n\nfunction crt (msg, priv) {\n var blinds = blind(priv)\n var len = priv.modulus.byteLength()\n var blinded = new BN(msg).mul(blinds.blinder).umod(priv.modulus)\n var c1 = blinded.toRed(BN.mont(priv.prime1))\n var c2 = blinded.toRed(BN.mont(priv.prime2))\n var qinv = priv.coefficient\n var p = priv.prime1\n var q = priv.prime2\n var m1 = c1.redPow(priv.exponent1).fromRed()\n var m2 = c2.redPow(priv.exponent2).fromRed()\n var h = m1.isub(m2).imul(qinv).umod(p).imul(q)\n return m2.iadd(h).imul(blinds.unblinder).umod(priv.modulus).toArrayLike(Buffer, 'be', len)\n}\ncrt.getr = getr\n\nmodule.exports = crt\n","module.exports = require('./browser/algorithms.json')\n","var Buffer = require('safe-buffer').Buffer\nvar createHash = require('create-hash')\nvar stream = require('readable-stream')\nvar inherits = require('inherits')\nvar sign = require('./sign')\nvar verify = require('./verify')\n\nvar algorithms = require('./algorithms.json')\nObject.keys(algorithms).forEach(function (key) {\n algorithms[key].id = Buffer.from(algorithms[key].id, 'hex')\n algorithms[key.toLowerCase()] = algorithms[key]\n})\n\nfunction Sign (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hashType = data.hash\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Sign, stream.Writable)\n\nSign.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nSign.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nSign.prototype.sign = function signMethod (key, enc) {\n this.end()\n var hash = this._hash.digest()\n var sig = sign(hash, key, this._hashType, this._signType, this._tag)\n\n return enc ? sig.toString(enc) : sig\n}\n\nfunction Verify (algorithm) {\n stream.Writable.call(this)\n\n var data = algorithms[algorithm]\n if (!data) throw new Error('Unknown message digest')\n\n this._hash = createHash(data.hash)\n this._tag = data.id\n this._signType = data.sign\n}\ninherits(Verify, stream.Writable)\n\nVerify.prototype._write = function _write (data, _, done) {\n this._hash.update(data)\n done()\n}\n\nVerify.prototype.update = function update (data, enc) {\n if (typeof data === 'string') data = Buffer.from(data, enc)\n\n this._hash.update(data)\n return this\n}\n\nVerify.prototype.verify = function verifyMethod (key, sig, enc) {\n if (typeof sig === 'string') sig = Buffer.from(sig, enc)\n\n this.end()\n var hash = this._hash.digest()\n return verify(sig, hash, key, this._signType, this._tag)\n}\n\nfunction createSign (algorithm) {\n return new Sign(algorithm)\n}\n\nfunction createVerify (algorithm) {\n return new Verify(algorithm)\n}\n\nmodule.exports = {\n Sign: createSign,\n Verify: createVerify,\n createSign: createSign,\n createVerify: createVerify\n}\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar createHmac = require('create-hmac')\nvar crt = require('browserify-rsa')\nvar EC = require('elliptic').ec\nvar BN = require('bn.js')\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction sign (hash, key, hashType, signType, tag) {\n var priv = parseKeys(key)\n if (priv.curve) {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n return ecSign(hash, priv)\n } else if (priv.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong private key type')\n return dsaSign(hash, priv, hashType)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = priv.modulus.byteLength()\n var pad = [0, 1]\n while (hash.length + pad.length + 1 < len) pad.push(0xff)\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) pad.push(hash[i])\n\n var out = crt(pad, priv)\n return out\n}\n\nfunction ecSign (hash, priv) {\n var curveId = curves[priv.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))\n\n var curve = new EC(curveId)\n var key = curve.keyFromPrivate(priv.privateKey)\n var out = key.sign(hash)\n\n return Buffer.from(out.toDER())\n}\n\nfunction dsaSign (hash, priv, algo) {\n var x = priv.params.priv_key\n var p = priv.params.p\n var q = priv.params.q\n var g = priv.params.g\n var r = new BN(0)\n var k\n var H = bits2int(hash, q).mod(q)\n var s = false\n var kv = getKey(x, q, hash, algo)\n while (s === false) {\n k = makeKey(q, kv, algo)\n r = makeR(g, k, p, q)\n s = k.invm(q).imul(H.add(x.mul(r))).mod(q)\n if (s.cmpn(0) === 0) {\n s = false\n r = new BN(0)\n }\n }\n return toDER(r, s)\n}\n\nfunction toDER (r, s) {\n r = r.toArray()\n s = s.toArray()\n\n // Pad values\n if (r[0] & 0x80) r = [0].concat(r)\n if (s[0] & 0x80) s = [0].concat(s)\n\n var total = r.length + s.length + 4\n var res = [0x30, total, 0x02, r.length]\n res = res.concat(r, [0x02, s.length], s)\n return Buffer.from(res)\n}\n\nfunction getKey (x, q, hash, algo) {\n x = Buffer.from(x.toArray())\n if (x.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - x.length)\n x = Buffer.concat([zeros, x])\n }\n var hlen = hash.length\n var hbits = bits2octets(hash, q)\n var v = Buffer.alloc(hlen)\n v.fill(1)\n var k = Buffer.alloc(hlen)\n k = createHmac(algo, k).update(v).update(Buffer.from([0])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n k = createHmac(algo, k).update(v).update(Buffer.from([1])).update(x).update(hbits).digest()\n v = createHmac(algo, k).update(v).digest()\n return { k: k, v: v }\n}\n\nfunction bits2int (obits, q) {\n var bits = new BN(obits)\n var shift = (obits.length << 3) - q.bitLength()\n if (shift > 0) bits.ishrn(shift)\n return bits\n}\n\nfunction bits2octets (bits, q) {\n bits = bits2int(bits, q)\n bits = bits.mod(q)\n var out = Buffer.from(bits.toArray())\n if (out.length < q.byteLength()) {\n var zeros = Buffer.alloc(q.byteLength() - out.length)\n out = Buffer.concat([zeros, out])\n }\n return out\n}\n\nfunction makeKey (q, kv, algo) {\n var t\n var k\n\n do {\n t = Buffer.alloc(0)\n\n while (t.length * 8 < q.bitLength()) {\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n t = Buffer.concat([t, kv.v])\n }\n\n k = bits2int(t, q)\n kv.k = createHmac(algo, kv.k).update(kv.v).update(Buffer.from([0])).digest()\n kv.v = createHmac(algo, kv.k).update(kv.v).digest()\n } while (k.cmp(q) !== -1)\n\n return k\n}\n\nfunction makeR (g, k, p, q) {\n return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)\n}\n\nmodule.exports = sign\nmodule.exports.getKey = getKey\nmodule.exports.makeKey = makeKey\n","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar Buffer = require('safe-buffer').Buffer\nvar BN = require('bn.js')\nvar EC = require('elliptic').ec\nvar parseKeys = require('parse-asn1')\nvar curves = require('./curves.json')\n\nfunction verify (sig, hash, key, signType, tag) {\n var pub = parseKeys(key)\n if (pub.type === 'ec') {\n // rsa keys can be interpreted as ecdsa ones in openssl\n if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n return ecVerify(sig, hash, pub)\n } else if (pub.type === 'dsa') {\n if (signType !== 'dsa') throw new Error('wrong public key type')\n return dsaVerify(sig, hash, pub)\n } else {\n if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')\n }\n hash = Buffer.concat([tag, hash])\n var len = pub.modulus.byteLength()\n var pad = [1]\n var padNum = 0\n while (hash.length + pad.length + 2 < len) {\n pad.push(0xff)\n padNum++\n }\n pad.push(0x00)\n var i = -1\n while (++i < hash.length) {\n pad.push(hash[i])\n }\n pad = Buffer.from(pad)\n var red = BN.mont(pub.modulus)\n sig = new BN(sig).toRed(red)\n\n sig = sig.redPow(new BN(pub.publicExponent))\n sig = Buffer.from(sig.fromRed().toArray())\n var out = padNum < 8 ? 1 : 0\n len = Math.min(sig.length, pad.length)\n if (sig.length !== pad.length) out = 1\n\n i = -1\n while (++i < len) out |= sig[i] ^ pad[i]\n return out === 0\n}\n\nfunction ecVerify (sig, hash, pub) {\n var curveId = curves[pub.data.algorithm.curve.join('.')]\n if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))\n\n var curve = new EC(curveId)\n var pubkey = pub.data.subjectPrivateKey.data\n\n return curve.verify(hash, sig, pubkey)\n}\n\nfunction dsaVerify (sig, hash, pub) {\n var p = pub.data.p\n var q = pub.data.q\n var g = pub.data.g\n var y = pub.data.pub_key\n var unpacked = parseKeys.signature.decode(sig, 'der')\n var s = unpacked.s\n var r = unpacked.r\n checkValue(s, q)\n checkValue(r, q)\n var montp = BN.mont(p)\n var w = s.invm(q)\n var v = g.toRed(montp)\n .redPow(new BN(hash).mul(w).mod(q))\n .fromRed()\n .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())\n .mod(p)\n .mod(q)\n return v.cmp(r) === 0\n}\n\nfunction checkValue (b, q) {\n if (b.cmpn(0) <= 0) throw new Error('invalid sig')\n if (b.cmp(q) >= q) throw new Error('invalid sig')\n}\n\nmodule.exports = verify\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","module.exports = function xor (a, b) {\n var length = Math.min(a.length, b.length)\n var buffer = new Buffer(length)\n\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i]\n }\n\n return buffer\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\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 '<Buffer ' + str + '>'\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","/**\n * callbag-map\n * -----------\n *\n * Callbag operator that applies a transformation on data passing through it.\n * Works on either pullable or listenable sources.\n *\n * `npm install callbag-map`\n *\n * Example:\n *\n * const fromIter = require('callbag-from-iter');\n * const iterate = require('callbag-iterate');\n * const map = require('callbag-map');\n *\n * const source = map(x => x * 0.1)(fromIter([10,20,30,40]));\n *\n * iterate(x => console.log(x))(source); // 1\n * // 2\n * // 3\n * // 4\n */\n\nconst map = f => source => (start, sink) => {\n if (start !== 0) return;\n source(0, (t, d) => {\n sink(t, t === 1 ? f(d) : d)\n });\n};\n\nmodule.exports = map;\n","function makeSubject() {\n let sinks = [];\n return (type, data) => {\n if (type === 0) {\n const sink = data;\n sinks.push(sink);\n sink(0, t => {\n if (t === 2) {\n const i = sinks.indexOf(sink);\n if (i > -1) sinks.splice(i, 1);\n }\n });\n } else {\n const zinkz = sinks.slice(0);\n for (let i = 0, n = zinkz.length, sink; i < n; i++) {\n sink = zinkz[i];\n if (sinks.indexOf(sink) > -1) sink(type, data);\n }\n }\n }\n}\n\nmodule.exports = makeSubject;\n","var Buffer = require('safe-buffer').Buffer\nvar Transform = require('stream').Transform\nvar StringDecoder = require('string_decoder').StringDecoder\nvar inherits = require('inherits')\n\nfunction CipherBase (hashMode) {\n Transform.call(this)\n this.hashMode = typeof hashMode === 'string'\n if (this.hashMode) {\n this[hashMode] = this._finalOrDigest\n } else {\n this.final = this._finalOrDigest\n }\n if (this._final) {\n this.__final = this._final\n this._final = null\n }\n this._decoder = null\n this._encoding = null\n}\ninherits(CipherBase, Transform)\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n if (typeof data === 'string') {\n data = Buffer.from(data, inputEnc)\n }\n\n var outData = this._update(data)\n if (this.hashMode) return this\n\n if (outputEnc) {\n outData = this._toString(outData, outputEnc)\n }\n\n return outData\n}\n\nCipherBase.prototype.setAutoPadding = function () {}\nCipherBase.prototype.getAuthTag = function () {\n throw new Error('trying to get auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAuthTag = function () {\n throw new Error('trying to set auth tag in unsupported state')\n}\n\nCipherBase.prototype.setAAD = function () {\n throw new Error('trying to set aad in unsupported state')\n}\n\nCipherBase.prototype._transform = function (data, _, next) {\n var err\n try {\n if (this.hashMode) {\n this._update(data)\n } else {\n this.push(this._update(data))\n }\n } catch (e) {\n err = e\n } finally {\n next(err)\n }\n}\nCipherBase.prototype._flush = function (done) {\n var err\n try {\n this.push(this.__final())\n } catch (e) {\n err = e\n }\n\n done(err)\n}\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n var outData = this.__final() || Buffer.alloc(0)\n if (outputEnc) {\n outData = this._toString(outData, outputEnc, true)\n }\n return outData\n}\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n if (!this._decoder) {\n this._decoder = new StringDecoder(enc)\n this._encoding = enc\n }\n\n if (this._encoding !== enc) throw new Error('can\\'t switch encodings')\n\n var out = this._decoder.write(value)\n if (fin) {\n out += this._decoder.end()\n }\n\n return out\n}\n\nmodule.exports = CipherBase\n","var elliptic = require('elliptic')\nvar BN = require('bn.js')\n\nmodule.exports = function createECDH (curve) {\n return new ECDH(curve)\n}\n\nvar aliases = {\n secp256k1: {\n name: 'secp256k1',\n byteLength: 32\n },\n secp224r1: {\n name: 'p224',\n byteLength: 28\n },\n prime256v1: {\n name: 'p256',\n byteLength: 32\n },\n prime192v1: {\n name: 'p192',\n byteLength: 24\n },\n ed25519: {\n name: 'ed25519',\n byteLength: 32\n },\n secp384r1: {\n name: 'p384',\n byteLength: 48\n },\n secp521r1: {\n name: 'p521',\n byteLength: 66\n }\n}\n\naliases.p224 = aliases.secp224r1\naliases.p256 = aliases.secp256r1 = aliases.prime256v1\naliases.p192 = aliases.secp192r1 = aliases.prime192v1\naliases.p384 = aliases.secp384r1\naliases.p521 = aliases.secp521r1\n\nfunction ECDH (curve) {\n this.curveType = aliases[curve]\n if (!this.curveType) {\n this.curveType = {\n name: curve\n }\n }\n this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap\n this.keys = void 0\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n this.keys = this.curve.genKeyPair()\n return this.getPublicKey(enc, format)\n}\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n inenc = inenc || 'utf8'\n if (!Buffer.isBuffer(other)) {\n other = new Buffer(other, inenc)\n }\n var otherPub = this.curve.keyFromPublic(other).getPublic()\n var out = otherPub.mul(this.keys.getPrivate()).getX()\n return formatReturnValue(out, enc, this.curveType.byteLength)\n}\n\nECDH.prototype.getPublicKey = function (enc, format) {\n var key = this.keys.getPublic(format === 'compressed', true)\n if (format === 'hybrid') {\n if (key[key.length - 1] % 2) {\n key[0] = 7\n } else {\n key[0] = 6\n }\n }\n return formatReturnValue(key, enc)\n}\n\nECDH.prototype.getPrivateKey = function (enc) {\n return formatReturnValue(this.keys.getPrivate(), enc)\n}\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc)\n }\n this.keys._importPublic(pub)\n return this\n}\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n enc = enc || 'utf8'\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc)\n }\n\n var _priv = new BN(priv)\n _priv = _priv.toString(16)\n this.keys = this.curve.genKeyPair()\n this.keys._importPrivate(_priv)\n return this\n}\n\nfunction formatReturnValue (bn, enc, len) {\n if (!Array.isArray(bn)) {\n bn = bn.toArray()\n }\n var buf = new Buffer(bn)\n if (len && buf.length < len) {\n var zeros = new Buffer(len - buf.length)\n zeros.fill(0)\n buf = Buffer.concat([zeros, buf])\n }\n if (!enc) {\n return buf\n } else {\n return buf.toString(enc)\n }\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict'\nvar inherits = require('inherits')\nvar MD5 = require('md5.js')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Base = require('cipher-base')\n\nfunction Hash (hash) {\n Base.call(this, 'digest')\n\n this._hash = hash\n}\n\ninherits(Hash, Base)\n\nHash.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHash.prototype._final = function () {\n return this._hash.digest()\n}\n\nmodule.exports = function createHash (alg) {\n alg = alg.toLowerCase()\n if (alg === 'md5') return new MD5()\n if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160()\n\n return new Hash(sha(alg))\n}\n","var MD5 = require('md5.js')\n\nmodule.exports = function (buffer) {\n return new MD5().update(buffer).digest()\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Legacy = require('./legacy')\nvar Base = require('cipher-base')\nvar Buffer = require('safe-buffer').Buffer\nvar md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\n\nvar sha = require('sha.js')\n\nvar ZEROS = Buffer.alloc(128)\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n this._alg = alg\n this._key = key\n if (key.length > blocksize) {\n var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n key = hash.update(key).digest()\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)\n this._hash.update(ipad)\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.update(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._hash.digest()\n var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)\n return hash.update(this._opad).update(h).digest()\n}\n\nmodule.exports = function createHmac (alg, key) {\n alg = alg.toLowerCase()\n if (alg === 'rmd160' || alg === 'ripemd160') {\n return new Hmac('rmd160', key)\n }\n if (alg === 'md5') {\n return new Legacy(md5, key)\n }\n return new Hmac(alg, key)\n}\n","'use strict'\nvar inherits = require('inherits')\nvar Buffer = require('safe-buffer').Buffer\n\nvar Base = require('cipher-base')\n\nvar ZEROS = Buffer.alloc(128)\nvar blocksize = 64\n\nfunction Hmac (alg, key) {\n Base.call(this, 'digest')\n if (typeof key === 'string') {\n key = Buffer.from(key)\n }\n\n this._alg = alg\n this._key = key\n\n if (key.length > blocksize) {\n key = alg(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = this._ipad = Buffer.allocUnsafe(blocksize)\n var opad = this._opad = Buffer.allocUnsafe(blocksize)\n\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n this._hash = [ipad]\n}\n\ninherits(Hmac, Base)\n\nHmac.prototype._update = function (data) {\n this._hash.push(data)\n}\n\nHmac.prototype._final = function () {\n var h = this._alg(Buffer.concat(this._hash))\n return this._alg(Buffer.concat([this._opad, h]))\n}\nmodule.exports = Hmac\n","'use strict'\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')\nexports.createHash = exports.Hash = require('create-hash')\nexports.createHmac = exports.Hmac = require('create-hmac')\n\nvar algos = require('browserify-sign/algos')\nvar algoKeys = Object.keys(algos)\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys)\nexports.getHashes = function () {\n return hashes\n}\n\nvar p = require('pbkdf2')\nexports.pbkdf2 = p.pbkdf2\nexports.pbkdf2Sync = p.pbkdf2Sync\n\nvar aes = require('browserify-cipher')\n\nexports.Cipher = aes.Cipher\nexports.createCipher = aes.createCipher\nexports.Cipheriv = aes.Cipheriv\nexports.createCipheriv = aes.createCipheriv\nexports.Decipher = aes.Decipher\nexports.createDecipher = aes.createDecipher\nexports.Decipheriv = aes.Decipheriv\nexports.createDecipheriv = aes.createDecipheriv\nexports.getCiphers = aes.getCiphers\nexports.listCiphers = aes.listCiphers\n\nvar dh = require('diffie-hellman')\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup\nexports.getDiffieHellman = dh.getDiffieHellman\nexports.createDiffieHellman = dh.createDiffieHellman\nexports.DiffieHellman = dh.DiffieHellman\n\nvar sign = require('browserify-sign')\n\nexports.createSign = sign.createSign\nexports.Sign = sign.Sign\nexports.createVerify = sign.createVerify\nexports.Verify = sign.Verify\n\nexports.createECDH = require('create-ecdh')\n\nvar publicEncrypt = require('public-encrypt')\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt\nexports.privateEncrypt = publicEncrypt.privateEncrypt\nexports.publicDecrypt = publicEncrypt.publicDecrypt\nexports.privateDecrypt = publicEncrypt.privateDecrypt\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n// 'createCredentials'\n// ].forEach(function (name) {\n// exports[name] = function () {\n// throw new Error([\n// 'sorry, ' + name + ' is not implemented yet',\n// 'we accept pull requests',\n// 'https://github.com/crypto-browserify/crypto-browserify'\n// ].join('\\n'))\n// }\n// })\n\nvar rf = require('randomfill')\n\nexports.randomFill = rf.randomFill\nexports.randomFillSync = rf.randomFillSync\n\nexports.createCredentials = function () {\n throw new Error([\n 'sorry, createCredentials is not implemented yet',\n 'we accept pull requests',\n 'https://github.com/crypto-browserify/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.constants = {\n 'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n 'DH_CHECK_P_NOT_PRIME': 1,\n 'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n 'DH_NOT_SUITABLE_GENERATOR': 8,\n 'NPN_ENABLED': 1,\n 'ALPN_ENABLED': 1,\n 'RSA_PKCS1_PADDING': 1,\n 'RSA_SSLV23_PADDING': 2,\n 'RSA_NO_PADDING': 3,\n 'RSA_PKCS1_OAEP_PADDING': 4,\n 'RSA_X931_PADDING': 5,\n 'RSA_PKCS1_PSS_PADDING': 6,\n 'POINT_CONVERSION_COMPRESSED': 2,\n 'POINT_CONVERSION_UNCOMPRESSED': 4,\n 'POINT_CONVERSION_HYBRID': 6\n}\n","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n assert.equal(iv.length, 8, 'Invalid IV length');\n\n this.iv = new Array(8);\n for (var i = 0; i < this.iv.length; i++)\n this.iv[i] = iv[i];\n}\n\nfunction instantiate(Base) {\n function CBC(options) {\n Base.call(this, options);\n this._cbcInit();\n }\n inherits(CBC, Base);\n\n var keys = Object.keys(proto);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n CBC.prototype[key] = proto[key];\n }\n\n CBC.create = function create(options) {\n return new CBC(options);\n };\n\n return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n var state = new CBCState(this.options.iv);\n this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n var state = this._cbcState;\n var superProto = this.constructor.super_.prototype;\n\n var iv = state.iv;\n if (this.type === 'encrypt') {\n for (var i = 0; i < this.blockSize; i++)\n iv[i] ^= inp[inOff + i];\n\n superProto._update.call(this, iv, 0, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = out[outOff + i];\n } else {\n superProto._update.call(this, inp, inOff, out, outOff);\n\n for (var i = 0; i < this.blockSize; i++)\n out[outOff + i] ^= iv[i];\n\n for (var i = 0; i < this.blockSize; i++)\n iv[i] = inp[inOff + i];\n }\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n this.options = options;\n\n this.type = this.options.type;\n this.blockSize = 8;\n this._init();\n\n this.buffer = new Array(this.blockSize);\n this.bufferOff = 0;\n}\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {\n // Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n if (data.length === 0)\n return [];\n\n if (this.type === 'decrypt')\n return this._updateDecrypt(data);\n else\n return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n // Append data to buffer\n var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n for (var i = 0; i < min; i++)\n this.buffer[this.bufferOff + i] = data[off + i];\n this.bufferOff += min;\n\n // Shift next\n return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n this._update(this.buffer, 0, out, off);\n this.bufferOff = 0;\n return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = ((this.bufferOff + data.length) / this.blockSize) | 0;\n var out = new Array(count * this.blockSize);\n\n if (this.bufferOff !== 0) {\n inputOff += this._buffer(data, inputOff);\n\n if (this.bufferOff === this.buffer.length)\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Write blocks\n var max = data.length - ((data.length - inputOff) % this.blockSize);\n for (; inputOff < max; inputOff += this.blockSize) {\n this._update(data, inputOff, out, outputOff);\n outputOff += this.blockSize;\n }\n\n // Queue rest\n for (; inputOff < data.length; inputOff++, this.bufferOff++)\n this.buffer[this.bufferOff] = data[inputOff];\n\n return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n var inputOff = 0;\n var outputOff = 0;\n\n var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n var out = new Array(count * this.blockSize);\n\n // TODO(indutny): optimize it, this is far from optimal\n for (; count > 0; count--) {\n inputOff += this._buffer(data, inputOff);\n outputOff += this._flushBuffer(out, outputOff);\n }\n\n // Buffer rest of the input\n inputOff += this._buffer(data, inputOff);\n\n return out;\n};\n\nCipher.prototype.final = function final(buffer) {\n var first;\n if (buffer)\n first = this.update(buffer);\n\n var last;\n if (this.type === 'encrypt')\n last = this._finalEncrypt();\n else\n last = this._finalDecrypt();\n\n if (first)\n return first.concat(last);\n else\n return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n if (off === 0)\n return false;\n\n while (off < buffer.length)\n buffer[off++] = 0;\n\n return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n if (!this._pad(this.buffer, this.bufferOff))\n return [];\n\n var out = new Array(this.blockSize);\n this._update(this.buffer, 0, out, 0);\n return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n var out = new Array(this.blockSize);\n this._flushBuffer(out, 0);\n\n return this._unpad(out);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar utils = require('./utils');\nvar Cipher = require('./cipher');\n\nfunction DESState() {\n this.tmp = new Array(2);\n this.keys = null;\n}\n\nfunction DES(options) {\n Cipher.call(this, options);\n\n var state = new DESState();\n this._desState = state;\n\n this.deriveKeys(state, options.key);\n}\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n return new DES(options);\n};\n\nvar shiftTable = [\n 1, 1, 2, 2, 2, 2, 2, 2,\n 1, 2, 2, 2, 2, 2, 2, 1\n];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n state.keys = new Array(16 * 2);\n\n assert.equal(key.length, this.blockSize, 'Invalid key length');\n\n var kL = utils.readUInt32BE(key, 0);\n var kR = utils.readUInt32BE(key, 4);\n\n utils.pc1(kL, kR, state.tmp, 0);\n kL = state.tmp[0];\n kR = state.tmp[1];\n for (var i = 0; i < state.keys.length; i += 2) {\n var shift = shiftTable[i >>> 1];\n kL = utils.r28shl(kL, shift);\n kR = utils.r28shl(kR, shift);\n utils.pc2(kL, kR, state.keys, i);\n }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._desState;\n\n var l = utils.readUInt32BE(inp, inOff);\n var r = utils.readUInt32BE(inp, inOff + 4);\n\n // Initial Permutation\n utils.ip(l, r, state.tmp, 0);\n l = state.tmp[0];\n r = state.tmp[1];\n\n if (this.type === 'encrypt')\n this._encrypt(state, l, r, state.tmp, 0);\n else\n this._decrypt(state, l, r, state.tmp, 0);\n\n l = state.tmp[0];\n r = state.tmp[1];\n\n utils.writeUInt32BE(out, l, outOff);\n utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n var value = buffer.length - off;\n for (var i = off; i < buffer.length; i++)\n buffer[i] = value;\n\n return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n var pad = buffer[buffer.length - 1];\n for (var i = buffer.length - pad; i < buffer.length; i++)\n assert.equal(buffer[i], pad);\n\n return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n var l = lStart;\n var r = rStart;\n\n // Apply f() x16 times\n for (var i = 0; i < state.keys.length; i += 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(r, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = r;\n r = (l ^ f) >>> 0;\n l = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n var l = rStart;\n var r = lStart;\n\n // Apply f() x16 times\n for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n var keyL = state.keys[i];\n var keyR = state.keys[i + 1];\n\n // f(r, k)\n utils.expand(l, state.tmp, 0);\n\n keyL ^= state.tmp[0];\n keyR ^= state.tmp[1];\n var s = utils.substitute(keyL, keyR);\n var f = utils.permute(s);\n\n var t = l;\n l = (r ^ f) >>> 0;\n r = t;\n }\n\n // Reverse Initial Permutation\n utils.rip(l, r, out, off);\n};\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nvar Cipher = require('./cipher');\nvar DES = require('./des');\n\nfunction EDEState(type, key) {\n assert.equal(key.length, 24, 'Invalid key length');\n\n var k1 = key.slice(0, 8);\n var k2 = key.slice(8, 16);\n var k3 = key.slice(16, 24);\n\n if (type === 'encrypt') {\n this.ciphers = [\n DES.create({ type: 'encrypt', key: k1 }),\n DES.create({ type: 'decrypt', key: k2 }),\n DES.create({ type: 'encrypt', key: k3 })\n ];\n } else {\n this.ciphers = [\n DES.create({ type: 'decrypt', key: k3 }),\n DES.create({ type: 'encrypt', key: k2 }),\n DES.create({ type: 'decrypt', key: k1 })\n ];\n }\n}\n\nfunction EDE(options) {\n Cipher.call(this, options);\n\n var state = new EDEState(this.type, this.options.key);\n this._edeState = state;\n}\ninherits(EDE, Cipher);\n\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n var state = this._edeState;\n\n state.ciphers[0]._update(inp, inOff, out, outOff);\n state.ciphers[1]._update(out, outOff, out, outOff);\n state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;\n","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n var res = (bytes[0 + off] << 24) |\n (bytes[1 + off] << 16) |\n (bytes[2 + off] << 8) |\n bytes[3 + off];\n return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n bytes[0 + off] = value >>> 24;\n bytes[1 + off] = (value >>> 16) & 0xff;\n bytes[2 + off] = (value >>> 8) & 0xff;\n bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n\n for (var i = 6; i >= 0; i -= 2) {\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n }\n for (var j = 1; j <= 25; j += 8) {\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n for (var i = 0; i < 4; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outL <<= 1;\n outL |= (inR >>> (j + i)) & 1;\n outL <<= 1;\n outL |= (inL >>> (j + i)) & 1;\n }\n }\n for (var i = 4; i < 8; i++) {\n for (var j = 24; j >= 0; j -= 8) {\n outR <<= 1;\n outR |= (inR >>> (j + i)) & 1;\n outR <<= 1;\n outR |= (inL >>> (j + i)) & 1;\n }\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n // 7, 15, 23, 31, 39, 47, 55, 63\n // 6, 14, 22, 30, 39, 47, 55, 63\n // 5, 13, 21, 29, 39, 47, 55, 63\n // 4, 12, 20, 28\n for (var i = 7; i >= 5; i--) {\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outL <<= 1;\n outL |= (inR >> (j + i)) & 1;\n }\n\n // 1, 9, 17, 25, 33, 41, 49, 57\n // 2, 10, 18, 26, 34, 42, 50, 58\n // 3, 11, 19, 27, 35, 43, 51, 59\n // 36, 44, 52, 60\n for (var i = 1; i <= 3; i++) {\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inR >> (j + i)) & 1;\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n }\n for (var j = 0; j <= 24; j += 8) {\n outR <<= 1;\n outR |= (inL >> (j + i)) & 1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));\n};\n\nvar pc2table = [\n // inL => outL\n 14, 11, 17, 4, 27, 23, 25, 0,\n 13, 22, 7, 18, 5, 9, 16, 24,\n 2, 20, 12, 21, 1, 8, 15, 26,\n\n // inR => outR\n 15, 4, 25, 19, 9, 1, 26, 16,\n 5, 11, 23, 8, 12, 7, 17, 0,\n 22, 3, 10, 14, 6, 20, 27, 24\n];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n var outL = 0;\n var outR = 0;\n\n var len = pc2table.length >>> 1;\n for (var i = 0; i < len; i++) {\n outL <<= 1;\n outL |= (inL >>> pc2table[i]) & 0x1;\n }\n for (var i = len; i < pc2table.length; i++) {\n outR <<= 1;\n outR |= (inR >>> pc2table[i]) & 0x1;\n }\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n var outL = 0;\n var outR = 0;\n\n outL = ((r & 1) << 5) | (r >>> 27);\n for (var i = 23; i >= 15; i -= 4) {\n outL <<= 6;\n outL |= (r >>> i) & 0x3f;\n }\n for (var i = 11; i >= 3; i -= 4) {\n outR |= (r >>> i) & 0x3f;\n outR <<= 6;\n }\n outR |= ((r & 0x1f) << 1) | (r >>> 31);\n\n out[off + 0] = outL >>> 0;\n out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [\n 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,\n 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,\n 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,\n 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,\n\n 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,\n 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,\n 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,\n 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,\n\n 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,\n 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,\n 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,\n 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,\n\n 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,\n 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,\n 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,\n 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,\n\n 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,\n 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,\n 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,\n 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,\n\n 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,\n 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,\n 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,\n 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,\n\n 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,\n 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,\n 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,\n 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,\n\n 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,\n 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,\n 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,\n 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11\n];\n\nexports.substitute = function substitute(inL, inR) {\n var out = 0;\n for (var i = 0; i < 4; i++) {\n var b = (inL >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n for (var i = 0; i < 4; i++) {\n var b = (inR >>> (18 - i * 6)) & 0x3f;\n var sb = sTable[4 * 0x40 + i * 0x40 + b];\n\n out <<= 4;\n out |= sb;\n }\n return out >>> 0;\n};\n\nvar permuteTable = [\n 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,\n 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7\n];\n\nexports.permute = function permute(num) {\n var out = 0;\n for (var i = 0; i < permuteTable.length; i++) {\n out <<= 1;\n out |= (num >>> permuteTable[i]) & 0x1;\n }\n return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n var str = num.toString(2);\n while (str.length < size)\n str = '0' + str;\n\n var out = [];\n for (var i = 0; i < size; i += group)\n out.push(str.slice(i, i + group));\n return out.join(' ');\n};\n","var generatePrime = require('./lib/generatePrime')\nvar primes = require('./lib/primes.json')\n\nvar DH = require('./lib/dh')\n\nfunction getDiffieHellman (mod) {\n var prime = new Buffer(primes[mod].prime, 'hex')\n var gen = new Buffer(primes[mod].gen, 'hex')\n\n return new DH(prime, gen)\n}\n\nvar ENCODINGS = {\n 'binary': true, 'hex': true, 'base64': true\n}\n\nfunction createDiffieHellman (prime, enc, generator, genc) {\n if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n return createDiffieHellman(prime, 'binary', enc, generator)\n }\n\n enc = enc || 'binary'\n genc = genc || 'binary'\n generator = generator || new Buffer([2])\n\n if (!Buffer.isBuffer(generator)) {\n generator = new Buffer(generator, genc)\n }\n\n if (typeof prime === 'number') {\n return new DH(generatePrime(prime, generator), generator, true)\n }\n\n if (!Buffer.isBuffer(prime)) {\n prime = new Buffer(prime, enc)\n }\n\n return new DH(prime, generator, true)\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman\n","var BN = require('bn.js');\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar primes = require('./generatePrime');\nvar randomBytes = require('randombytes');\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(pub)) {\n pub = new Buffer(pub, enc);\n }\n this._pub = new BN(pub);\n return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(priv)) {\n priv = new Buffer(priv, enc);\n }\n this._priv = new BN(priv);\n return this;\n}\n\nvar primeCache = {};\nfunction checkPrime(prime, generator) {\n var gen = generator.toString('hex');\n var hex = [gen, prime.toString(16)].join('_');\n if (hex in primeCache) {\n return primeCache[hex];\n }\n var error = 0;\n\n if (prime.isEven() ||\n !primes.simpleSieve ||\n !primes.fermatTest(prime) ||\n !millerRabin.test(prime)) {\n //not a prime so +1\n error += 1;\n\n if (gen === '02' || gen === '05') {\n // we'd be able to check the generator\n // it would fail so +8\n error += 8;\n } else {\n //we wouldn't be able to test the generator\n // so +4\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n }\n if (!millerRabin.test(prime.shrn(1))) {\n //not a safe prime\n error += 2;\n }\n var rem;\n switch (gen) {\n case '02':\n if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n // unsuidable generator\n error += 8;\n }\n break;\n case '05':\n rem = prime.mod(TEN);\n if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n // prime mod 10 needs to equal 3 or 7\n error += 8;\n }\n break;\n default:\n error += 4;\n }\n primeCache[hex] = error;\n return error;\n}\n\nfunction DH(prime, generator, malleable) {\n this.setGenerator(generator);\n this.__prime = new BN(prime);\n this._prime = BN.mont(this.__prime);\n this._primeLen = prime.length;\n this._pub = undefined;\n this._priv = undefined;\n this._primeCode = undefined;\n if (malleable) {\n this.setPublicKey = setPublicKey;\n this.setPrivateKey = setPrivateKey;\n } else {\n this._primeCode = 8;\n }\n}\nObject.defineProperty(DH.prototype, 'verifyError', {\n enumerable: true,\n get: function () {\n if (typeof this._primeCode !== 'number') {\n this._primeCode = checkPrime(this.__prime, this.__gen);\n }\n return this._primeCode;\n }\n});\nDH.prototype.generateKeys = function () {\n if (!this._priv) {\n this._priv = new BN(randomBytes(this._primeLen));\n }\n this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n other = new BN(other);\n other = other.toRed(this._prime);\n var secret = other.redPow(this._priv).fromRed();\n var out = new Buffer(secret.toArray());\n var prime = this.getPrime();\n if (out.length < prime.length) {\n var front = new Buffer(prime.length - out.length);\n front.fill(0);\n out = Buffer.concat([front, out]);\n }\n return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n enc = enc || 'utf8';\n if (!Buffer.isBuffer(gen)) {\n gen = new Buffer(gen, enc);\n }\n this.__gen = gen;\n this._gen = new BN(gen);\n return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n var buf = new Buffer(bn.toArray());\n if (!enc) {\n return buf;\n } else {\n return buf.toString(enc);\n }\n}\n","var randomBytes = require('randombytes');\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\nvar BN = require('bn.js');\nvar TWENTYFOUR = new BN(24);\nvar MillerRabin = require('miller-rabin');\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n if (primes !== null)\n return primes;\n\n var limit = 0x100000;\n var res = [];\n res[0] = 2;\n for (var i = 1, k = 3; k < limit; k += 2) {\n var sqrt = Math.ceil(Math.sqrt(k));\n for (var j = 0; j < i && res[j] <= sqrt; j++)\n if (k % res[j] === 0)\n break;\n\n if (i !== j && res[j] <= sqrt)\n continue;\n\n res[i++] = k;\n }\n primes = res;\n return res;\n}\n\nfunction simpleSieve(p) {\n var primes = _getPrimes();\n\n for (var i = 0; i < primes.length; i++)\n if (p.modn(primes[i]) === 0) {\n if (p.cmpn(primes[i]) === 0) {\n return true;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\nfunction fermatTest(p) {\n var red = BN.mont(p);\n return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n if (bits < 16) {\n // this is what openssl does\n if (gen === 2 || gen === 5) {\n return new BN([0x8c, 0x7b]);\n } else {\n return new BN([0x8c, 0x27]);\n }\n }\n gen = new BN(gen);\n\n var num, n2;\n\n while (true) {\n num = new BN(randomBytes(Math.ceil(bits / 8)));\n while (num.bitLength() > bits) {\n num.ishrn(1);\n }\n if (num.isEven()) {\n num.iadd(ONE);\n }\n if (!num.testn(1)) {\n num.iadd(TWO);\n }\n if (!gen.cmp(TWO)) {\n while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n num.iadd(FOUR);\n }\n } else if (!gen.cmp(FIVE)) {\n while (num.mod(TEN).cmp(THREE)) {\n num.iadd(FOUR);\n }\n }\n n2 = num.shrn(1);\n if (simpleSieve(n2) && simpleSieve(num) &&\n fermatTest(n2) && fermatTest(num) &&\n millerRabin.test(n2) && millerRabin.test(num)) {\n return num;\n }\n }\n\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\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","var Buffer = require('safe-buffer').Buffer\nvar MD5 = require('md5.js')\n\n/* eslint-disable camelcase */\nfunction EVP_BytesToKey (password, salt, keyBits, ivLen) {\n if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')\n if (salt) {\n if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')\n if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')\n }\n\n var keyLen = keyBits / 8\n var key = Buffer.alloc(keyLen)\n var iv = Buffer.alloc(ivLen || 0)\n var tmp = Buffer.alloc(0)\n\n while (keyLen > 0 || ivLen > 0) {\n var hash = new MD5()\n hash.update(tmp)\n hash.update(password)\n if (salt) hash.update(salt)\n tmp = hash.digest()\n\n var used = 0\n\n if (keyLen > 0) {\n var keyStart = key.length - keyLen\n used = Math.min(keyLen, tmp.length)\n tmp.copy(key, keyStart, 0, used)\n keyLen -= used\n }\n\n if (used < tmp.length && ivLen > 0) {\n var ivStart = iv.length - ivLen\n var length = Math.min(ivLen, tmp.length - used)\n tmp.copy(iv, ivStart, used, used + length)\n ivLen -= length\n }\n }\n\n tmp.fill(0)\n return { key: key, iv: iv }\n}\n\nmodule.exports = EVP_BytesToKey\n","'use strict'\nvar Buffer = require('safe-buffer').Buffer\nvar Transform = require('readable-stream').Transform\nvar inherits = require('inherits')\n\nfunction throwIfNotStringOrBuffer (val, prefix) {\n if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n throw new TypeError(prefix + ' must be a string or a buffer')\n }\n}\n\nfunction HashBase (blockSize) {\n Transform.call(this)\n\n this._block = Buffer.allocUnsafe(blockSize)\n this._blockSize = blockSize\n this._blockOffset = 0\n this._length = [0, 0, 0, 0]\n\n this._finalized = false\n}\n\ninherits(HashBase, Transform)\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n var error = null\n try {\n this.update(chunk, encoding)\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype._flush = function (callback) {\n var error = null\n try {\n this.push(this.digest())\n } catch (err) {\n error = err\n }\n\n callback(error)\n}\n\nHashBase.prototype.update = function (data, encoding) {\n throwIfNotStringOrBuffer(data, 'Data')\n if (this._finalized) throw new Error('Digest already called')\n if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)\n\n // consume data\n var block = this._block\n var offset = 0\n while (this._blockOffset + data.length - offset >= this._blockSize) {\n for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]\n this._update()\n this._blockOffset = 0\n }\n while (offset < data.length) block[this._blockOffset++] = data[offset++]\n\n // update length\n for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n this._length[j] += carry\n carry = (this._length[j] / 0x0100000000) | 0\n if (carry > 0) this._length[j] -= 0x0100000000 * carry\n }\n\n return this\n}\n\nHashBase.prototype._update = function () {\n throw new Error('_update is not implemented')\n}\n\nHashBase.prototype.digest = function (encoding) {\n if (this._finalized) throw new Error('Digest already called')\n this._finalized = true\n\n var digest = this._digest()\n if (encoding !== undefined) digest = digest.toString(encoding)\n\n // reset state\n this._block.fill(0)\n this._blockOffset = 0\n for (var i = 0; i < 4; ++i) this._length[i] = 0\n\n return digest\n}\n\nHashBase.prototype._digest = function () {\n throw new Error('_digest is not implemented')\n}\n\nmodule.exports = HashBase\n","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_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\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\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}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_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\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\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 this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n childContextTypes: true,\n contextType: true,\n contextTypes: true,\n defaultProps: true,\n displayName: true,\n getDefaultProps: true,\n getDerivedStateFromError: true,\n getDerivedStateFromProps: true,\n mixins: true,\n propTypes: true,\n type: true\n};\nvar KNOWN_STATICS = {\n name: true,\n length: true,\n prototype: true,\n caller: true,\n callee: true,\n arguments: true,\n arity: true\n};\nvar FORWARD_REF_STATICS = {\n '$$typeof': true,\n render: true,\n defaultProps: true,\n displayName: true,\n propTypes: true\n};\nvar MEMO_STATICS = {\n '$$typeof': true,\n compare: true,\n defaultProps: true,\n displayName: true,\n propTypes: true,\n type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n // React v16.11 and below\n if (reactIs.isMemo(component)) {\n return MEMO_STATICS;\n } // React v16.12 and above\n\n\n return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n if (typeof sourceComponent !== 'string') {\n // don't hoist over string (html) components\n if (objectPrototype) {\n var inheritedComponent = getPrototypeOf(sourceComponent);\n\n if (inheritedComponent && inheritedComponent !== objectPrototype) {\n hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n }\n }\n\n var keys = getOwnPropertyNames(sourceComponent);\n\n if (getOwnPropertySymbols) {\n keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n }\n\n var targetStatics = getStatics(targetComponent);\n var sourceStatics = getStatics(sourceComponent);\n\n for (var i = 0; i < keys.length; ++i) {\n var key = keys[i];\n\n if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n try {\n // Avoid failures from read-only properties\n defineProperty(targetComponent, key, descriptor);\n } catch (e) {}\n }\n }\n }\n\n return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-is.production.min.js');\n} else {\n module.exports = require('./cjs/react-is.development.js');\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","'use strict'\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\nvar Buffer = require('safe-buffer').Buffer\n\nvar ARRAY16 = new Array(16)\n\nfunction MD5 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n}\n\ninherits(MD5, HashBase)\n\nMD5.prototype._update = function () {\n var M = ARRAY16\n for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)\n\n var a = this._a\n var b = this._b\n var c = this._c\n var d = this._d\n\n a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)\n d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)\n c = fnF(c, d, a, b, M[2], 0x242070db, 17)\n b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)\n a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)\n d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)\n c = fnF(c, d, a, b, M[6], 0xa8304613, 17)\n b = fnF(b, c, d, a, M[7], 0xfd469501, 22)\n a = fnF(a, b, c, d, M[8], 0x698098d8, 7)\n d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)\n c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)\n b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)\n a = fnF(a, b, c, d, M[12], 0x6b901122, 7)\n d = fnF(d, a, b, c, M[13], 0xfd987193, 12)\n c = fnF(c, d, a, b, M[14], 0xa679438e, 17)\n b = fnF(b, c, d, a, M[15], 0x49b40821, 22)\n\n a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)\n d = fnG(d, a, b, c, M[6], 0xc040b340, 9)\n c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)\n b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)\n a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)\n d = fnG(d, a, b, c, M[10], 0x02441453, 9)\n c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)\n b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)\n a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)\n d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)\n c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)\n b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)\n a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)\n d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)\n c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)\n b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)\n\n a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)\n d = fnH(d, a, b, c, M[8], 0x8771f681, 11)\n c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)\n b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)\n a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)\n d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)\n c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)\n b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)\n a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)\n d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)\n c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)\n b = fnH(b, c, d, a, M[6], 0x04881d05, 23)\n a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)\n d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)\n c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)\n b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)\n\n a = fnI(a, b, c, d, M[0], 0xf4292244, 6)\n d = fnI(d, a, b, c, M[7], 0x432aff97, 10)\n c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)\n b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)\n a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)\n d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)\n c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)\n b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)\n a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)\n d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)\n c = fnI(c, d, a, b, M[6], 0xa3014314, 15)\n b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)\n a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)\n d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)\n c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)\n b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)\n\n this._a = (this._a + a) | 0\n this._b = (this._b + b) | 0\n this._c = (this._c + c) | 0\n this._d = (this._d + d) | 0\n}\n\nMD5.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.allocUnsafe(16)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fnF (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnG (a, b, c, d, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnH (a, b, c, d, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0\n}\n\nfunction fnI (a, b, c, d, m, k, s) {\n return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0\n}\n\nmodule.exports = MD5\n","var bn = require('bn.js');\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n this.rand = rand || new brorand.Rand();\n}\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n var len = n.bitLength();\n var min_bytes = Math.ceil(len / 8);\n\n // Generage random bytes until a number less than n is found.\n // This ensures that 0..n-1 have an equal probability of being selected.\n do\n var a = new bn(this.rand.generate(min_bytes));\n while (a.cmp(n) >= 0);\n\n return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n // Generate a random number greater than or equal to start and less than stop.\n var size = stop.sub(start);\n return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n var prime = true;\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n if (cb)\n cb(a);\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return false;\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s)\n return false;\n }\n\n return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n var len = n.bitLength();\n var red = bn.mont(n);\n var rone = new bn(1).toRed(red);\n\n if (!k)\n k = Math.max(1, (len / 48) | 0);\n\n // Find d and s, (n - 1) = (2 ^ s) * d;\n var n1 = n.subn(1);\n for (var s = 0; !n1.testn(s); s++) {}\n var d = n.shrn(s);\n\n var rn1 = n1.toRed(red);\n\n for (; k > 0; k--) {\n var a = this._randrange(new bn(2), n1);\n\n var g = n.gcd(a);\n if (g.cmpn(1) !== 0)\n return g;\n\n var x = a.toRed(red).redPow(d);\n if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)\n continue;\n\n for (var i = 1; i < s; i++) {\n x = x.redSqr();\n\n if (x.cmp(rone) === 0)\n return x.fromRed().subn(1).gcd(n);\n if (x.cmp(rn1) === 0)\n break;\n }\n\n if (i === s) {\n x = x.redSqr();\n return x.fromRed().subn(1).gcd(n);\n }\n }\n\n return false;\n};\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict'\n\nvar asn1 = require('asn1.js')\n\nexports.certificate = require('./certificate')\n\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('modulus').int(),\n this.key('publicExponent').int(),\n this.key('privateExponent').int(),\n this.key('prime1').int(),\n this.key('prime2').int(),\n this.key('exponent1').int(),\n this.key('exponent2').int(),\n this.key('coefficient').int()\n )\n})\nexports.RSAPrivateKey = RSAPrivateKey\n\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n this.seq().obj(\n this.key('modulus').int(),\n this.key('publicExponent').int()\n )\n})\nexports.RSAPublicKey = RSAPublicKey\n\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\nexports.PublicKey = PublicKey\n\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('none').null_().optional(),\n this.key('curve').objid().optional(),\n this.key('params').seq().obj(\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int()\n ).optional()\n )\n})\n\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPrivateKey').octstr()\n )\n})\nexports.PrivateKey = PrivateKeyInfo\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').seq().obj(\n this.key('id').objid(),\n this.key('decrypt').seq().obj(\n this.key('kde').seq().obj(\n this.key('id').objid(),\n this.key('kdeparams').seq().obj(\n this.key('salt').octstr(),\n this.key('iters').int()\n )\n ),\n this.key('cipher').seq().obj(\n this.key('algo').objid(),\n this.key('iv').octstr()\n )\n )\n ),\n this.key('subjectPrivateKey').octstr()\n )\n})\n\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo\n\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('p').int(),\n this.key('q').int(),\n this.key('g').int(),\n this.key('pub_key').int(),\n this.key('priv_key').int()\n )\n})\nexports.DSAPrivateKey = DSAPrivateKey\n\nexports.DSAparam = asn1.define('DSAparam', function () {\n this.int()\n})\n\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n this.seq().obj(\n this.key('version').int(),\n this.key('privateKey').octstr(),\n this.key('parameters').optional().explicit(0).use(ECParameters),\n this.key('publicKey').optional().explicit(1).bitstr()\n )\n})\nexports.ECPrivateKey = ECPrivateKey\n\nvar ECParameters = asn1.define('ECParameters', function () {\n this.choice({\n namedCurve: this.objid()\n })\n})\n\nexports.signature = asn1.define('signature', function () {\n this.seq().obj(\n this.key('r').int(),\n this.key('s').int()\n )\n})\n","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n\n'use strict'\n\nvar asn = require('asn1.js')\n\nvar Time = asn.define('Time', function () {\n this.choice({\n utcTime: this.utctime(),\n generalTime: this.gentime()\n })\n})\n\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n this.seq().obj(\n this.key('type').objid(),\n this.key('value').any()\n )\n})\n\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n this.seq().obj(\n this.key('algorithm').objid(),\n this.key('parameters').optional(),\n this.key('curve').objid().optional()\n )\n})\n\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n this.seq().obj(\n this.key('algorithm').use(AlgorithmIdentifier),\n this.key('subjectPublicKey').bitstr()\n )\n})\n\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n this.setof(AttributeTypeValue)\n})\n\nvar RDNSequence = asn.define('RDNSequence', function () {\n this.seqof(RelativeDistinguishedName)\n})\n\nvar Name = asn.define('Name', function () {\n this.choice({\n rdnSequence: this.use(RDNSequence)\n })\n})\n\nvar Validity = asn.define('Validity', function () {\n this.seq().obj(\n this.key('notBefore').use(Time),\n this.key('notAfter').use(Time)\n )\n})\n\nvar Extension = asn.define('Extension', function () {\n this.seq().obj(\n this.key('extnID').objid(),\n this.key('critical').bool().def(false),\n this.key('extnValue').octstr()\n )\n})\n\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n this.seq().obj(\n this.key('version').explicit(0).int().optional(),\n this.key('serialNumber').int(),\n this.key('signature').use(AlgorithmIdentifier),\n this.key('issuer').use(Name),\n this.key('validity').use(Validity),\n this.key('subject').use(Name),\n this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),\n this.key('issuerUniqueID').implicit(1).bitstr().optional(),\n this.key('subjectUniqueID').implicit(2).bitstr().optional(),\n this.key('extensions').explicit(3).seqof(Extension).optional()\n )\n})\n\nvar X509Certificate = asn.define('X509Certificate', function () {\n this.seq().obj(\n this.key('tbsCertificate').use(TBSCertificate),\n this.key('signatureAlgorithm').use(AlgorithmIdentifier),\n this.key('signatureValue').bitstr()\n )\n})\n\nmodule.exports = X509Certificate\n","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r+/=]+)[\\n\\r]+/m\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r+/=]+)-----END \\1-----$/m\nvar evp = require('evp_bytestokey')\nvar ciphers = require('browserify-aes')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = function (okey, password) {\n var key = okey.toString()\n var match = key.match(findProc)\n var decrypted\n if (!match) {\n var match2 = key.match(fullRegex)\n decrypted = Buffer.from(match2[2].replace(/[\\r\\n]/g, ''), 'base64')\n } else {\n var suite = 'aes' + match[1]\n var iv = Buffer.from(match[2], 'hex')\n var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64')\n var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key\n var out = []\n var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n decrypted = Buffer.concat(out)\n }\n var tag = key.match(startRegex)[1]\n return {\n tag: tag,\n data: decrypted\n }\n}\n","var asn1 = require('./asn1')\nvar aesid = require('./aesid.json')\nvar fixProc = require('./fixProc')\nvar ciphers = require('browserify-aes')\nvar compat = require('pbkdf2')\nvar Buffer = require('safe-buffer').Buffer\nmodule.exports = parseKeys\n\nfunction parseKeys (buffer) {\n var password\n if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {\n password = buffer.passphrase\n buffer = buffer.key\n }\n if (typeof buffer === 'string') {\n buffer = Buffer.from(buffer)\n }\n\n var stripped = fixProc(buffer, password)\n\n var type = stripped.tag\n var data = stripped.data\n var subtype, ndata\n switch (type) {\n case 'CERTIFICATE':\n ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo\n // falls through\n case 'PUBLIC KEY':\n if (!ndata) {\n ndata = asn1.PublicKey.decode(data, 'der')\n }\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')\n case '1.2.840.10045.2.1':\n ndata.subjectPrivateKey = ndata.subjectPublicKey\n return {\n type: 'ec',\n data: ndata\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')\n return {\n type: 'dsa',\n data: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'ENCRYPTED PRIVATE KEY':\n data = asn1.EncryptedPrivateKey.decode(data, 'der')\n data = decrypt(data, password)\n // falls through\n case 'PRIVATE KEY':\n ndata = asn1.PrivateKey.decode(data, 'der')\n subtype = ndata.algorithm.algorithm.join('.')\n switch (subtype) {\n case '1.2.840.113549.1.1.1':\n return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')\n case '1.2.840.10045.2.1':\n return {\n curve: ndata.algorithm.curve,\n privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n }\n case '1.2.840.10040.4.1':\n ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')\n return {\n type: 'dsa',\n params: ndata.algorithm.params\n }\n default: throw new Error('unknown key id ' + subtype)\n }\n // throw new Error('unknown key type ' + type)\n case 'RSA PUBLIC KEY':\n return asn1.RSAPublicKey.decode(data, 'der')\n case 'RSA PRIVATE KEY':\n return asn1.RSAPrivateKey.decode(data, 'der')\n case 'DSA PRIVATE KEY':\n return {\n type: 'dsa',\n params: asn1.DSAPrivateKey.decode(data, 'der')\n }\n case 'EC PRIVATE KEY':\n data = asn1.ECPrivateKey.decode(data, 'der')\n return {\n curve: data.parameters.value,\n privateKey: data.privateKey\n }\n default: throw new Error('unknown key type ' + type)\n }\n}\nparseKeys.signature = asn1.signature\nfunction decrypt (data, password) {\n var salt = data.algorithm.decrypt.kde.kdeparams.salt\n var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)\n var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]\n var iv = data.algorithm.decrypt.cipher.iv\n var cipherText = data.subjectPrivateKey\n var keylen = parseInt(algo.split('-')[1], 10) / 8\n var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1')\n var cipher = ciphers.createDecipheriv(algo, key, iv)\n var out = []\n out.push(cipher.update(cipherText))\n out.push(cipher.final())\n return Buffer.concat(out)\n}\n","exports.pbkdf2 = require('./lib/async')\nexports.pbkdf2Sync = require('./lib/sync')\n","var Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar sync = require('./sync')\nvar toBuffer = require('./to-buffer')\n\nvar ZERO_BUF\nvar subtle = global.crypto && global.crypto.subtle\nvar toBrowser = {\n sha: 'SHA-1',\n 'sha-1': 'SHA-1',\n sha1: 'SHA-1',\n sha256: 'SHA-256',\n 'sha-256': 'SHA-256',\n sha384: 'SHA-384',\n 'sha-384': 'SHA-384',\n 'sha-512': 'SHA-512',\n sha512: 'SHA-512'\n}\nvar checks = []\nfunction checkNative (algo) {\n if (global.process && !global.process.browser) {\n return Promise.resolve(false)\n }\n if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n return Promise.resolve(false)\n }\n if (checks[algo] !== undefined) {\n return checks[algo]\n }\n ZERO_BUF = ZERO_BUF || Buffer.alloc(8)\n var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)\n .then(function () {\n return true\n }).catch(function () {\n return false\n })\n checks[algo] = prom\n return prom\n}\nvar nextTick\nfunction getNextTick () {\n if (nextTick) {\n return nextTick\n }\n if (global.process && global.process.nextTick) {\n nextTick = global.process.nextTick\n } else if (global.queueMicrotask) {\n nextTick = global.queueMicrotask\n } else if (global.setImmediate) {\n nextTick = global.setImmediate\n } else {\n nextTick = global.setTimeout\n }\n return nextTick\n}\nfunction browserPbkdf2 (password, salt, iterations, length, algo) {\n return subtle.importKey(\n 'raw', password, { name: 'PBKDF2' }, false, ['deriveBits']\n ).then(function (key) {\n return subtle.deriveBits({\n name: 'PBKDF2',\n salt: salt,\n iterations: iterations,\n hash: {\n name: algo\n }\n }, key, length << 3)\n }).then(function (res) {\n return Buffer.from(res)\n })\n}\n\nfunction resolvePromise (promise, callback) {\n promise.then(function (out) {\n getNextTick()(function () {\n callback(null, out)\n })\n }, function (e) {\n getNextTick()(function () {\n callback(e)\n })\n })\n}\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n if (typeof digest === 'function') {\n callback = digest\n digest = undefined\n }\n\n digest = digest || 'sha1'\n var algo = toBrowser[digest.toLowerCase()]\n\n if (!algo || typeof global.Promise !== 'function') {\n getNextTick()(function () {\n var out\n try {\n out = sync(password, salt, iterations, keylen, digest)\n } catch (e) {\n return callback(e)\n }\n callback(null, out)\n })\n return\n }\n\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')\n\n resolvePromise(checkNative(algo).then(function (resp) {\n if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo)\n\n return sync(password, salt, iterations, keylen, digest)\n }), callback)\n}\n","var defaultEncoding\n/* istanbul ignore next */\nif (global.process && global.process.browser) {\n defaultEncoding = 'utf-8'\n} else if (global.process && global.process.version) {\n var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)\n\n defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'\n} else {\n defaultEncoding = 'utf-8'\n}\nmodule.exports = defaultEncoding\n","var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs\n\nmodule.exports = function (iterations, keylen) {\n if (typeof iterations !== 'number') {\n throw new TypeError('Iterations not a number')\n }\n\n if (iterations < 0) {\n throw new TypeError('Bad iterations')\n }\n\n if (typeof keylen !== 'number') {\n throw new TypeError('Key length not a number')\n }\n\n if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */\n throw new TypeError('Bad key length')\n }\n}\n","var md5 = require('create-hash/md5')\nvar RIPEMD160 = require('ripemd160')\nvar sha = require('sha.js')\nvar Buffer = require('safe-buffer').Buffer\n\nvar checkParameters = require('./precondition')\nvar defaultEncoding = require('./default-encoding')\nvar toBuffer = require('./to-buffer')\n\nvar ZEROS = Buffer.alloc(128)\nvar sizes = {\n md5: 16,\n sha1: 20,\n sha224: 28,\n sha256: 32,\n sha384: 48,\n sha512: 64,\n rmd160: 20,\n ripemd160: 20\n}\n\nfunction Hmac (alg, key, saltLen) {\n var hash = getDigest(alg)\n var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64\n\n if (key.length > blocksize) {\n key = hash(key)\n } else if (key.length < blocksize) {\n key = Buffer.concat([key, ZEROS], blocksize)\n }\n\n var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])\n var opad = Buffer.allocUnsafe(blocksize + sizes[alg])\n for (var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)\n ipad.copy(ipad1, 0, 0, blocksize)\n this.ipad1 = ipad1\n this.ipad2 = ipad\n this.opad = opad\n this.alg = alg\n this.blocksize = blocksize\n this.hash = hash\n this.size = sizes[alg]\n}\n\nHmac.prototype.run = function (data, ipad) {\n data.copy(ipad, this.blocksize)\n var h = this.hash(ipad)\n h.copy(this.opad, this.blocksize)\n return this.hash(this.opad)\n}\n\nfunction getDigest (alg) {\n function shaFunc (data) {\n return sha(alg).update(data).digest()\n }\n function rmd160Func (data) {\n return new RIPEMD160().update(data).digest()\n }\n\n if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func\n if (alg === 'md5') return md5\n return shaFunc\n}\n\nfunction pbkdf2 (password, salt, iterations, keylen, digest) {\n checkParameters(iterations, keylen)\n password = toBuffer(password, defaultEncoding, 'Password')\n salt = toBuffer(salt, defaultEncoding, 'Salt')\n\n digest = digest || 'sha1'\n\n var hmac = new Hmac(digest, password, salt.length)\n\n var DK = Buffer.allocUnsafe(keylen)\n var block1 = Buffer.allocUnsafe(salt.length + 4)\n salt.copy(block1, 0, 0, salt.length)\n\n var destPos = 0\n var hLen = sizes[digest]\n var l = Math.ceil(keylen / hLen)\n\n for (var i = 1; i <= l; i++) {\n block1.writeUInt32BE(i, salt.length)\n\n var T = hmac.run(block1, hmac.ipad1)\n var U = T\n\n for (var j = 1; j < iterations; j++) {\n U = hmac.run(U, hmac.ipad2)\n for (var k = 0; k < hLen; k++) T[k] ^= U[k]\n }\n\n T.copy(DK, destPos)\n destPos += hLen\n }\n\n return DK\n}\n\nmodule.exports = pbkdf2\n","var Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (thing, encoding, name) {\n if (Buffer.isBuffer(thing)) {\n return thing\n } else if (typeof thing === 'string') {\n return Buffer.from(thing, encoding)\n } else if (ArrayBuffer.isView(thing)) {\n return Buffer.from(thing.buffer)\n } else {\n throw new TypeError(name + ' must be a string, a Buffer, a typed array or a DataView')\n }\n}\n","// 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 * Copyright (c) 2013-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\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n var err = new Error(\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n err.name = 'Invariant Violation';\n throw err;\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n elementType: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim,\n\n checkPropTypes: emptyFunctionWithReset,\n resetWarningCache: emptyFunction\n };\n\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-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\nif (process.env.NODE_ENV !== 'production') {\n var ReactIs = require('react-is');\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n","/**\n * Copyright (c) 2013-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\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","exports.publicEncrypt = require('./publicEncrypt')\nexports.privateDecrypt = require('./privateDecrypt')\n\nexports.privateEncrypt = function privateEncrypt (key, buf) {\n return exports.publicEncrypt(key, buf, true)\n}\n\nexports.publicDecrypt = function publicDecrypt (key, buf) {\n return exports.privateDecrypt(key, buf, true)\n}\n","var createHash = require('create-hash')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function (seed, len) {\n var t = Buffer.alloc(0)\n var i = 0\n var c\n while (t.length < len) {\n c = i2ops(i++)\n t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()])\n }\n return t.slice(0, len)\n}\n\nfunction i2ops (c) {\n var out = Buffer.allocUnsafe(4)\n out.writeUInt32BE(c, 0)\n return out\n}\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var parseKeys = require('parse-asn1')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar crt = require('browserify-rsa')\nvar createHash = require('create-hash')\nvar withPublic = require('./withPublic')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function privateDecrypt (privateKey, enc, reverse) {\n var padding\n if (privateKey.padding) {\n padding = privateKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n\n var key = parseKeys(privateKey)\n var k = key.modulus.byteLength()\n if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n throw new Error('decryption error')\n }\n var msg\n if (reverse) {\n msg = withPublic(new BN(enc), key)\n } else {\n msg = crt(enc, key)\n }\n var zBuffer = Buffer.alloc(k - msg.length)\n msg = Buffer.concat([zBuffer, msg], k)\n if (padding === 4) {\n return oaep(key, msg)\n } else if (padding === 1) {\n return pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n return msg\n } else {\n throw new Error('unknown padding')\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n if (msg[0] !== 0) {\n throw new Error('decryption error')\n }\n var maskedSeed = msg.slice(1, hLen + 1)\n var maskedDb = msg.slice(hLen + 1)\n var seed = xor(maskedSeed, mgf(maskedDb, hLen))\n var db = xor(maskedDb, mgf(seed, k - hLen - 1))\n if (compare(iHash, db.slice(0, hLen))) {\n throw new Error('decryption error')\n }\n var i = hLen\n while (db[i] === 0) {\n i++\n }\n if (db[i++] !== 1) {\n throw new Error('decryption error')\n }\n return db.slice(i)\n}\n\nfunction pkcs1 (key, msg, reverse) {\n var p1 = msg.slice(0, 2)\n var i = 2\n var status = 0\n while (msg[i++] !== 0) {\n if (i >= msg.length) {\n status++\n break\n }\n }\n var ps = msg.slice(2, i - 1)\n\n if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) {\n status++\n }\n if (ps.length < 8) {\n status++\n }\n if (status) {\n throw new Error('decryption error')\n }\n return msg.slice(i)\n}\nfunction compare (a, b) {\n a = Buffer.from(a)\n b = Buffer.from(b)\n var dif = 0\n var len = a.length\n if (a.length !== b.length) {\n dif++\n len = Math.min(a.length, b.length)\n }\n var i = -1\n while (++i < len) {\n dif += (a[i] ^ b[i])\n }\n return dif\n}\n","var parseKeys = require('parse-asn1')\nvar randomBytes = require('randombytes')\nvar createHash = require('create-hash')\nvar mgf = require('./mgf')\nvar xor = require('./xor')\nvar BN = require('bn.js')\nvar withPublic = require('./withPublic')\nvar crt = require('browserify-rsa')\nvar Buffer = require('safe-buffer').Buffer\n\nmodule.exports = function publicEncrypt (publicKey, msg, reverse) {\n var padding\n if (publicKey.padding) {\n padding = publicKey.padding\n } else if (reverse) {\n padding = 1\n } else {\n padding = 4\n }\n var key = parseKeys(publicKey)\n var paddedMsg\n if (padding === 4) {\n paddedMsg = oaep(key, msg)\n } else if (padding === 1) {\n paddedMsg = pkcs1(key, msg, reverse)\n } else if (padding === 3) {\n paddedMsg = new BN(msg)\n if (paddedMsg.cmp(key.modulus) >= 0) {\n throw new Error('data too long for modulus')\n }\n } else {\n throw new Error('unknown padding')\n }\n if (reverse) {\n return crt(paddedMsg, key)\n } else {\n return withPublic(paddedMsg, key)\n }\n}\n\nfunction oaep (key, msg) {\n var k = key.modulus.byteLength()\n var mLen = msg.length\n var iHash = createHash('sha1').update(Buffer.alloc(0)).digest()\n var hLen = iHash.length\n var hLen2 = 2 * hLen\n if (mLen > k - hLen2 - 2) {\n throw new Error('message too long')\n }\n var ps = Buffer.alloc(k - mLen - hLen2 - 2)\n var dblen = k - hLen - 1\n var seed = randomBytes(hLen)\n var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen))\n var maskedSeed = xor(seed, mgf(maskedDb, hLen))\n return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k))\n}\nfunction pkcs1 (key, msg, reverse) {\n var mLen = msg.length\n var k = key.modulus.byteLength()\n if (mLen > k - 11) {\n throw new Error('message too long')\n }\n var ps\n if (reverse) {\n ps = Buffer.alloc(k - mLen - 3, 0xff)\n } else {\n ps = nonZero(k - mLen - 3)\n }\n return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k))\n}\nfunction nonZero (len) {\n var out = Buffer.allocUnsafe(len)\n var i = 0\n var cache = randomBytes(len * 2)\n var cur = 0\n var num\n while (i < len) {\n if (cur === cache.length) {\n cache = randomBytes(len * 2)\n cur = 0\n }\n num = cache[cur++]\n if (num) {\n out[i++] = num\n }\n }\n return out\n}\n","var BN = require('bn.js')\nvar Buffer = require('safe-buffer').Buffer\n\nfunction withPublic (paddedMsg, key) {\n return Buffer.from(paddedMsg\n .toRed(BN.mont(key.modulus))\n .redPow(new BN(key.publicExponent))\n .fromRed()\n .toArray())\n}\n\nmodule.exports = withPublic\n","module.exports = function xor (a, b) {\n var len = a.length\n var i = -1\n while (++i < len) {\n a[i] ^= b[i]\n }\n return a\n}\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nvar MAX_BYTES = 65536\n\n// Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\nvar MAX_UINT32 = 4294967295\n\nfunction oldBrowser () {\n throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11')\n}\n\nvar Buffer = require('safe-buffer').Buffer\nvar crypto = global.crypto || global.msCrypto\n\nif (crypto && crypto.getRandomValues) {\n module.exports = randomBytes\n} else {\n module.exports = oldBrowser\n}\n\nfunction randomBytes (size, cb) {\n // phantomjs needs to throw\n if (size > MAX_UINT32) throw new RangeError('requested too many random bytes')\n\n var bytes = Buffer.allocUnsafe(size)\n\n if (size > 0) { // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues\n // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n for (var generated = 0; generated < size; generated += MAX_BYTES) {\n // buffer.slice automatically checks if the end is past the end of\n // the buffer so we don't have to here\n crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES))\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n if (typeof cb === 'function') {\n return process.nextTick(function () {\n cb(null, bytes)\n })\n }\n\n return bytes\n}\n","'use strict'\n\nfunction oldBrowser () {\n throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11')\n}\nvar safeBuffer = require('safe-buffer')\nvar randombytes = require('randombytes')\nvar Buffer = safeBuffer.Buffer\nvar kBufferMaxLength = safeBuffer.kMaxLength\nvar crypto = global.crypto || global.msCrypto\nvar kMaxUint32 = Math.pow(2, 32) - 1\nfunction assertOffset (offset, length) {\n if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare\n throw new TypeError('offset must be a number')\n }\n\n if (offset > kMaxUint32 || offset < 0) {\n throw new TypeError('offset must be a uint32')\n }\n\n if (offset > kBufferMaxLength || offset > length) {\n throw new RangeError('offset out of range')\n }\n}\n\nfunction assertSize (size, offset, length) {\n if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare\n throw new TypeError('size must be a number')\n }\n\n if (size > kMaxUint32 || size < 0) {\n throw new TypeError('size must be a uint32')\n }\n\n if (size + offset > length || size > kBufferMaxLength) {\n throw new RangeError('buffer too small')\n }\n}\nif ((crypto && crypto.getRandomValues) || !process.browser) {\n exports.randomFill = randomFill\n exports.randomFillSync = randomFillSync\n} else {\n exports.randomFill = oldBrowser\n exports.randomFillSync = oldBrowser\n}\nfunction randomFill (buf, offset, size, cb) {\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n if (typeof offset === 'function') {\n cb = offset\n offset = 0\n size = buf.length\n } else if (typeof size === 'function') {\n cb = size\n size = buf.length - offset\n } else if (typeof cb !== 'function') {\n throw new TypeError('\"cb\" argument must be a function')\n }\n assertOffset(offset, buf.length)\n assertSize(size, offset, buf.length)\n return actualFill(buf, offset, size, cb)\n}\n\nfunction actualFill (buf, offset, size, cb) {\n if (process.browser) {\n var ourBuf = buf.buffer\n var uint = new Uint8Array(ourBuf, offset, size)\n crypto.getRandomValues(uint)\n if (cb) {\n process.nextTick(function () {\n cb(null, buf)\n })\n return\n }\n return buf\n }\n if (cb) {\n randombytes(size, function (err, bytes) {\n if (err) {\n return cb(err)\n }\n bytes.copy(buf, offset)\n cb(null, buf)\n })\n return\n }\n var bytes = randombytes(size)\n bytes.copy(buf, offset)\n return buf\n}\nfunction randomFillSync (buf, offset, size) {\n if (typeof offset === 'undefined') {\n offset = 0\n }\n if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array')\n }\n\n assertOffset(offset, buf.length)\n\n if (size === undefined) size = buf.length - offset\n\n assertSize(size, offset, buf.length)\n\n return actualFill(buf, offset, size)\n}\n","/** @license React v17.0.2\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),m=require(\"object-assign\"),r=require(\"scheduler\");function y(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(y(227));var ba=new Set,ca={};function da(a,b){ea(a,b);ea(a+\"Capture\",b)}\nfunction ea(a,b){ca[a]=b;for(a=0;a<b.length;a++)ba.add(b[a])}\nvar fa=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ha=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,ia=Object.prototype.hasOwnProperty,\nja={},ka={};function la(a){if(ia.call(ka,a))return!0;if(ia.call(ja,a))return!1;if(ha.test(a))return ka[a]=!0;ja[a]=!0;return!1}function ma(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction na(a,b,c,d){if(null===b||\"undefined\"===typeof b||ma(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(oa,\npa);D[b]=new B(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});\nD.xlinkHref=new B(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(na(b,c,e,d)&&(c=null),d||null===e?la(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar ra=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,sa=60103,ta=60106,ua=60107,wa=60108,xa=60114,ya=60109,za=60110,Aa=60112,Ba=60113,Ca=60120,Da=60115,Ea=60116,Fa=60121,Ga=60128,Ha=60129,Ia=60130,Ja=60131;\nif(\"function\"===typeof Symbol&&Symbol.for){var E=Symbol.for;sa=E(\"react.element\");ta=E(\"react.portal\");ua=E(\"react.fragment\");wa=E(\"react.strict_mode\");xa=E(\"react.profiler\");ya=E(\"react.provider\");za=E(\"react.context\");Aa=E(\"react.forward_ref\");Ba=E(\"react.suspense\");Ca=E(\"react.suspense_list\");Da=E(\"react.memo\");Ea=E(\"react.lazy\");Fa=E(\"react.block\");E(\"react.scope\");Ga=E(\"react.opaque.id\");Ha=E(\"react.debug_trace_mode\");Ia=E(\"react.offscreen\");Ja=E(\"react.legacy_hidden\")}\nvar Ka=\"function\"===typeof Symbol&&Symbol.iterator;function La(a){if(null===a||\"object\"!==typeof a)return null;a=Ka&&a[Ka]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var Ma;function Na(a){if(void 0===Ma)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);Ma=b&&b[1]||\"\"}return\"\\n\"+Ma+a}var Oa=!1;\nfunction Pa(a,b){if(!a||Oa)return\"\";Oa=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(k){var d=k}Reflect.construct(a,[],b)}else{try{b.call()}catch(k){d=k}a.call(b.prototype)}else{try{throw Error();}catch(k){d=k}a()}}catch(k){if(k&&d&&\"string\"===typeof k.stack){for(var e=k.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h])return\"\\n\"+e[g].replace(\" at new \",\" at \");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Na(a):\"\"}\nfunction Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na(\"Lazy\");case 13:return Na(\"Suspense\");case 19:return Na(\"SuspenseList\");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return\"\"}}\nfunction Ra(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ua:return\"Fragment\";case ta:return\"Portal\";case xa:return\"Profiler\";case wa:return\"StrictMode\";case Ba:return\"Suspense\";case Ca:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case za:return(a.displayName||\"Context\")+\".Consumer\";case ya:return(a._context.displayName||\"Context\")+\".Provider\";case Aa:var b=a.render;b=b.displayName||b.name||\"\";\nreturn a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\"ForwardRef\");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,\"checked\",b,!1)}\nfunction ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?bb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction cb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction bb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function db(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(y(91));return m({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(y(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var kb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction lb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function mb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?lb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar nb,ob=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||\"innerHTML\"in a)a.innerHTML=b;else{nb=nb||document.createElement(\"div\");nb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(\"\"+b).trim():b+\"px\"}\nfunction tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=sb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(y(62));}}\nfunction wb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(a,b,c,d,e){return a(b,c,d,e)}function Ib(){}var Jb=Gb,Kb=!1,Lb=!1;function Mb(){if(null!==zb||null!==Ab)Ib(),Fb()}\nfunction Nb(a,b,c){if(Lb)return a(b,c);Lb=!0;try{return Jb(a,b,c)}finally{Lb=!1,Mb()}}\nfunction Ob(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(y(231,b,typeof c));return c}var Pb=!1;if(fa)try{var Qb={};Object.defineProperty(Qb,\"passive\",{get:function(){Pb=!0}});window.addEventListener(\"test\",Qb,Qb);window.removeEventListener(\"test\",Qb,Qb)}catch(a){Pb=!1}function Rb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(n){this.onError(n)}}var Sb=!1,Tb=null,Ub=!1,Vb=null,Wb={onError:function(a){Sb=!0;Tb=a}};function Xb(a,b,c,d,e,f,g,h,k){Sb=!1;Tb=null;Rb.apply(Wb,arguments)}\nfunction Yb(a,b,c,d,e,f,g,h,k){Xb.apply(this,arguments);if(Sb){if(Sb){var l=Tb;Sb=!1;Tb=null}else throw Error(y(198));Ub||(Ub=!0,Vb=l)}}function Zb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function $b(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function ac(a){if(Zb(a)!==a)throw Error(y(188));}\nfunction bc(a){var b=a.alternate;if(!b){b=Zb(a);if(null===b)throw Error(y(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return ac(e),a;if(f===d)return ac(e),b;f=f.sibling}throw Error(y(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(y(189));}}if(c.alternate!==d)throw Error(y(190));}if(3!==c.tag)throw Error(y(188));return c.stateNode.current===c?a:b}function cc(a){a=bc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction dc(a,b){for(var c=a.alternate;null!==b;){if(b===a||b===c)return!0;b=b.return}return!1}var ec,fc,gc,hc,ic=!1,jc=[],kc=null,lc=null,mc=null,nc=new Map,oc=new Map,pc=[],qc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction rc(a,b,c,d,e){return{blockedOn:a,domEventName:b,eventSystemFlags:c|16,nativeEvent:e,targetContainers:[d]}}function sc(a,b){switch(a){case \"focusin\":case \"focusout\":kc=null;break;case \"dragenter\":case \"dragleave\":lc=null;break;case \"mouseover\":case \"mouseout\":mc=null;break;case \"pointerover\":case \"pointerout\":nc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":oc.delete(b.pointerId)}}\nfunction tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=rc(b,c,d,e,f),null!==b&&(b=Cb(b),null!==b&&fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction uc(a,b,c,d,e){switch(b){case \"focusin\":return kc=tc(kc,a,b,c,d,e),!0;case \"dragenter\":return lc=tc(lc,a,b,c,d,e),!0;case \"mouseover\":return mc=tc(mc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;nc.set(f,tc(nc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,oc.set(f,tc(oc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction vc(a){var b=wc(a.target);if(null!==b){var c=Zb(b);if(null!==c)if(b=c.tag,13===b){if(b=$b(c),null!==b){a.blockedOn=b;hc(a.lanePriority,function(){r.unstable_runWithPriority(a.priority,function(){gc(c)})});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c)return b=Cb(c),null!==b&&fc(b),a.blockedOn=c,!1;b.shift()}return!0}function zc(a,b,c){xc(a)&&c.delete(b)}\nfunction Ac(){for(ic=!1;0<jc.length;){var a=jc[0];if(null!==a.blockedOn){a=Cb(a.blockedOn);null!==a&&ec(a);break}for(var b=a.targetContainers;0<b.length;){var c=yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c){a.blockedOn=c;break}b.shift()}null===a.blockedOn&&jc.shift()}null!==kc&&xc(kc)&&(kc=null);null!==lc&&xc(lc)&&(lc=null);null!==mc&&xc(mc)&&(mc=null);nc.forEach(zc);oc.forEach(zc)}\nfunction Bc(a,b){a.blockedOn===b&&(a.blockedOn=null,ic||(ic=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Ac)))}\nfunction Cc(a){function b(b){return Bc(b,a)}if(0<jc.length){Bc(jc[0],a);for(var c=1;c<jc.length;c++){var d=jc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==kc&&Bc(kc,a);null!==lc&&Bc(lc,a);null!==mc&&Bc(mc,a);nc.forEach(b);oc.forEach(b);for(c=0;c<pc.length;c++)d=pc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<pc.length&&(c=pc[0],null===c.blockedOn);)vc(c),null===c.blockedOn&&pc.shift()}\nfunction Dc(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Ec={animationend:Dc(\"Animation\",\"AnimationEnd\"),animationiteration:Dc(\"Animation\",\"AnimationIteration\"),animationstart:Dc(\"Animation\",\"AnimationStart\"),transitionend:Dc(\"Transition\",\"TransitionEnd\")},Fc={},Gc={};\nfa&&(Gc=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Ec.animationend.animation,delete Ec.animationiteration.animation,delete Ec.animationstart.animation),\"TransitionEvent\"in window||delete Ec.transitionend.transition);function Hc(a){if(Fc[a])return Fc[a];if(!Ec[a])return a;var b=Ec[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Gc)return Fc[a]=b[c];return a}\nvar Ic=Hc(\"animationend\"),Jc=Hc(\"animationiteration\"),Kc=Hc(\"animationstart\"),Lc=Hc(\"transitionend\"),Mc=new Map,Nc=new Map,Oc=[\"abort\",\"abort\",Ic,\"animationEnd\",Jc,\"animationIteration\",Kc,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\n\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",Lc,\"transitionEnd\",\"waiting\",\"waiting\"];function Pc(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1];e=\"on\"+(e[0].toUpperCase()+e.slice(1));Nc.set(d,b);Mc.set(d,e);da(e,[d])}}var Qc=r.unstable_now;Qc();var F=8;\nfunction Rc(a){if(0!==(1&a))return F=15,1;if(0!==(2&a))return F=14,2;if(0!==(4&a))return F=13,4;var b=24&a;if(0!==b)return F=12,b;if(0!==(a&32))return F=11,32;b=192&a;if(0!==b)return F=10,b;if(0!==(a&256))return F=9,256;b=3584&a;if(0!==b)return F=8,b;if(0!==(a&4096))return F=7,4096;b=4186112&a;if(0!==b)return F=6,b;b=62914560&a;if(0!==b)return F=5,b;if(a&67108864)return F=4,67108864;if(0!==(a&134217728))return F=3,134217728;b=805306368&a;if(0!==b)return F=2,b;if(0!==(1073741824&a))return F=1,1073741824;\nF=8;return a}function Sc(a){switch(a){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}function Tc(a){switch(a){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(y(358,a));}}\nfunction Uc(a,b){var c=a.pendingLanes;if(0===c)return F=0;var d=0,e=0,f=a.expiredLanes,g=a.suspendedLanes,h=a.pingedLanes;if(0!==f)d=f,e=F=15;else if(f=c&134217727,0!==f){var k=f&~g;0!==k?(d=Rc(k),e=F):(h&=f,0!==h&&(d=Rc(h),e=F))}else f=c&~g,0!==f?(d=Rc(f),e=F):0!==h&&(d=Rc(h),e=F);if(0===d)return 0;d=31-Vc(d);d=c&((0>d?0:1<<d)<<1)-1;if(0!==b&&b!==d&&0===(b&g)){Rc(b);if(e<=F)return b;F=e}b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-Vc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction Wc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function Xc(a,b){switch(a){case 15:return 1;case 14:return 2;case 12:return a=Yc(24&~b),0===a?Xc(10,b):a;case 10:return a=Yc(192&~b),0===a?Xc(8,b):a;case 8:return a=Yc(3584&~b),0===a&&(a=Yc(4186112&~b),0===a&&(a=512)),a;case 2:return b=Yc(805306368&~b),0===b&&(b=268435456),b}throw Error(y(358,a));}function Yc(a){return a&-a}function Zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}\nfunction hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0<jc.length&&-1<qc.indexOf(a))a=rc(null,a,b,c,d),jc.push(a);else{var f=yc(a,b,c,d);if(null===f)e&&sc(a,d);else{if(e){if(-1<qc.indexOf(a)){a=rc(f,a,b,c,d);jc.push(a);return}if(uc(f,a,b,c,d))return;sc(a,d)}jd(a,b,d,null,c)}}}}\nfunction yc(a,b,c,d){var e=xb(d);e=wc(e);if(null!==e){var f=Zb(e);if(null===f)e=null;else{var g=f.tag;if(13===g){e=$b(f);if(null!==e)return e;e=null}else if(3===g){if(f.stateNode.hydrate)return 3===f.tag?f.stateNode.containerInfo:null;e=null}else f!==e&&(e=null)}}jd(a,b,d,e,c);return null}var kd=null,ld=null,md=null;\nfunction nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}function od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}m(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=m({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=m({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=m({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=m({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=m({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=m({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=m({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=m({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=m({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=m({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=m({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=m({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=fa&&\"CompositionEvent\"in window,be=null;fa&&\"documentMode\"in document&&(be=document.documentMode);var ce=fa&&\"TextEvent\"in window&&!be,de=fa&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(fa){var xe;if(fa){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));a=re;if(Kb)a(b);else{Kb=!0;try{Gb(a,b)}finally{Kb=!1,Mb()}}}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge,Ie=Object.prototype.hasOwnProperty;\nfunction Je(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!Ie.call(b,c[d])||!He(a[c[d]],b[c[d]]))return!1;return!0}function Ke(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Le(a,b){var c=Ke(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nvar Pe=fa&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nPc(\"cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),\n0);Pc(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);Pc(Oc,2);for(var Ve=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),We=0;We<Ve.length;We++)Nc.set(Ve[We],0);ea(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);\nea(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ea(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);ea(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);da(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));da(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));da(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);da(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));\nda(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));da(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var Xe=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),Ye=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(Xe));\nfunction Ze(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Yb(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;Ze(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;Ze(e,h,l);f=k}}}if(Ub)throw a=Vb,Ub=!1,Vb=null,a;}\nfunction G(a,b){var c=$e(b),d=a+\"__bubble\";c.has(d)||(af(b,a,2,!1),c.add(d))}var bf=\"_reactListening\"+Math.random().toString(36).slice(2);function cf(a){a[bf]||(a[bf]=!0,ba.forEach(function(b){Ye.has(b)||df(b,!1,a,null);df(b,!0,a,null)}))}\nfunction df(a,b,c,d){var e=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,f=c;\"selectionchange\"===a&&9!==c.nodeType&&(f=c.ownerDocument);if(null!==d&&!b&&Ye.has(a)){if(\"scroll\"!==a)return;e|=2;f=d}var g=$e(f),h=a+\"__\"+(b?\"capture\":\"bubble\");g.has(h)||(b&&(e|=4),af(f,a,e,b),g.add(h))}\nfunction af(a,b,c,d){var e=Nc.get(b);switch(void 0===e?2:e){case 0:e=gd;break;case 1:e=id;break;default:e=hd}c=e.bind(null,b,c,a);e=void 0;!Pb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction jd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Nb(function(){var d=f,e=xb(c),g=[];\na:{var h=Mc.get(a);if(void 0!==h){var k=td,x=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":x=\"focus\";k=Fd;break;case \"focusout\":x=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case Ic:case Jc:case Kc:k=Hd;break;case Lc:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var w=0!==(b&4),z=!w&&\"scroll\"===a,u=w?null!==h?h+\"Capture\":null:h;w=[];for(var t=d,q;null!==\nt;){q=t;var v=q.stateNode;5===q.tag&&null!==v&&(q=v,null!==u&&(v=Ob(t,u),null!=v&&w.push(ef(t,v,q))));if(z)break;t=t.return}0<w.length&&(h=new k(h,x,null,c,e),g.push({event:h,listeners:w}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&0===(b&16)&&(x=c.relatedTarget||c.fromElement)&&(wc(x)||x[ff]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(x=c.relatedTarget||c.toElement,k=d,x=x?wc(x):null,null!==\nx&&(z=Zb(x),x!==z||5!==x.tag&&6!==x.tag))x=null}else k=null,x=d;if(k!==x){w=Bd;v=\"onMouseLeave\";u=\"onMouseEnter\";t=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)w=Td,v=\"onPointerLeave\",u=\"onPointerEnter\",t=\"pointer\";z=null==k?h:ue(k);q=null==x?h:ue(x);h=new w(v,t+\"leave\",k,c,e);h.target=z;h.relatedTarget=q;v=null;wc(e)===d&&(w=new w(u,t+\"enter\",x,c,e),w.target=q,w.relatedTarget=z,v=w);z=v;if(k&&x)b:{w=k;u=x;t=0;for(q=w;q;q=gf(q))t++;q=0;for(v=u;v;v=gf(v))q++;for(;0<t-q;)w=gf(w),t--;for(;0<q-t;)u=\ngf(u),q--;for(;t--;){if(w===u||null!==u&&w===u.alternate)break b;w=gf(w);u=gf(u)}w=null}else w=null;null!==k&&hf(g,h,k,w,!1);null!==x&&null!==z&&hf(g,z,x,w,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var J=ve;else if(me(h))if(we)J=Fe;else{J=De;var K=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(J=Ee);if(J&&(J=J(a,d))){ne(g,J,c,e);break a}K&&K(a,h,d);\"focusout\"===a&&(K=h._wrapperState)&&\nK.controlled&&\"number\"===h.type&&bb(h,\"number\",h.value)}K=d?ue(d):window;switch(a){case \"focusin\":if(me(K)||\"true\"===K.contentEditable)Qe=K,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var Q;if(ae)b:{switch(a){case \"compositionstart\":var L=\"onCompositionStart\";break b;case \"compositionend\":L=\"onCompositionEnd\";break b;\ncase \"compositionupdate\":L=\"onCompositionUpdate\";break b}L=void 0}else ie?ge(a,c)&&(L=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(L=\"onCompositionStart\");L&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==L?\"onCompositionEnd\"===L&&ie&&(Q=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),K=oe(d,L),0<K.length&&(L=new Ld(L,a,null,c,e),g.push({event:L,listeners:K}),Q?L.data=Q:(Q=he(c),null!==Q&&(L.data=Q))));if(Q=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),0<d.length&&(e=new Ld(\"onBeforeInput\",\n\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=Q)}se(g,b)})}function ef(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Ob(a,c),null!=f&&d.unshift(ef(a,f,e)),f=Ob(a,b),null!=f&&d.push(ef(a,f,e)));a=a.return}return d}function gf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction hf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Ob(c,f),null!=k&&g.unshift(ef(c,k,h))):e||(k=Ob(c,f),null!=k&&g.push(ef(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}function jf(){}var kf=null,lf=null;function mf(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction nf(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var of=\"function\"===typeof setTimeout?setTimeout:void 0,pf=\"function\"===typeof clearTimeout?clearTimeout:void 0;function qf(a){1===a.nodeType?a.textContent=\"\":9===a.nodeType&&(a=a.body,null!=a&&(a.textContent=\"\"))}\nfunction rf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}function sf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var tf=0;function uf(a){return{$$typeof:Ga,toString:a,valueOf:a}}var vf=Math.random().toString(36).slice(2),wf=\"__reactFiber$\"+vf,xf=\"__reactProps$\"+vf,ff=\"__reactContainer$\"+vf,yf=\"__reactEvents$\"+vf;\nfunction wc(a){var b=a[wf];if(b)return b;for(var c=a.parentNode;c;){if(b=c[ff]||c[wf]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=sf(a);null!==a;){if(c=a[wf])return c;a=sf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[wf]||a[ff];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(y(33));}function Db(a){return a[xf]||null}\nfunction $e(a){var b=a[yf];void 0===b&&(b=a[yf]=new Set);return b}var zf=[],Af=-1;function Bf(a){return{current:a}}function H(a){0>Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;\nfunction Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}\nfunction If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||\"Unknown\",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}\nvar Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};\nfunction eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}\nfunction jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});ag=null}catch(c){throw null!==ag&&(ag=ag.slice(a+1)),Of(Uf,ig),c;}finally{cg=!1}}}var kg=ra.ReactCurrentBatchConfig;function lg(a,b){if(a&&a.defaultProps){b=m({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}var mg=Bf(null),ng=null,og=null,pg=null;function qg(){pg=og=ng=null}\nfunction rg(a){var b=mg.current;H(mg);a.type._context._currentValue=b}function sg(a,b){for(;null!==a;){var c=a.alternate;if((a.childLanes&b)===b)if(null===c||(c.childLanes&b)===b)break;else c.childLanes|=b;else a.childLanes|=b,null!==c&&(c.childLanes|=b);a=a.return}}function tg(a,b){ng=a;pg=og=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(ug=!0),a.firstContext=null)}\nfunction vg(a,b){if(pg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)pg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===og){if(null===ng)throw Error(y(308));og=b;ng.dependencies={lanes:0,firstContext:b,responders:null}}else og=og.next=b}return a._currentValue}var wg=!1;function xg(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}\nfunction yg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function zg(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}function Ag(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction Bg(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction Cg(a,b,c,d){var e=a.updateQueue;wg=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var n=a.alternate;if(null!==n){n=n.updateQueue;var A=n.lastBaseUpdate;A!==g&&(null===A?n.firstBaseUpdate=l:A.next=l,n.lastBaseUpdate=k)}}if(null!==f){A=e.baseState;g=0;n=l=k=null;do{h=f.lane;var p=f.eventTime;if((d&h)===h){null!==n&&(n=n.next={eventTime:p,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,\nnext:null});a:{var C=a,x=f;h=b;p=c;switch(x.tag){case 1:C=x.payload;if(\"function\"===typeof C){A=C.call(p,A,h);break a}A=C;break a;case 3:C.flags=C.flags&-4097|64;case 0:C=x.payload;h=\"function\"===typeof C?C.call(p,A,h):C;if(null===h||void 0===h)break a;A=m({},A,h);break a;case 2:wg=!0}}null!==f.callback&&(a.flags|=32,h=e.effects,null===h?e.effects=[f]:h.push(f))}else p={eventTime:p,lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},null===n?(l=n=p,k=A):n=n.next=p,g|=h;f=f.next;if(null===\nf)if(h=e.shared.pending,null===h)break;else f=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}while(1);null===n&&(k=A);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=n;Dg|=g;a.lanes=g;a.memoizedState=A}}function Eg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(y(191,e));e.call(d)}}}var Fg=(new aa.Component).refs;\nfunction Gg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:m({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Kg={isMounted:function(a){return(a=a._reactInternals)?Zb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=Hg(),e=Ig(a),f=zg(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ag(a,f);Jg(a,e,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=Hg(),e=Ig(a),f=zg(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ag(a,f);Jg(a,e,d)},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=Hg(),d=Ig(a),e=zg(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=\nb);Ag(a,e);Jg(a,d,c)}};function Lg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Je(c,d)||!Je(e,f):!0}\nfunction Mg(a,b,c){var d=!1,e=Cf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=vg(f):(e=Ff(b)?Df:M.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Ef(a,e):Cf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Kg;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Ng(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Kg.enqueueReplaceState(b,b.state,null)}\nfunction Og(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Fg;xg(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=vg(f):(f=Ff(b)?Df:M.current,e.context=Ef(a,f));Cg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Gg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Kg.enqueueReplaceState(e,e.state,null),Cg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4)}var Pg=Array.isArray;\nfunction Qg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(y(309));var d=c.stateNode}if(!d)throw Error(y(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Fg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(y(284));if(!c._owner)throw Error(y(290,a));}return a}\nfunction Rg(a,b){if(\"textarea\"!==a.type)throw Error(y(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b));}\nfunction Sg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.flags=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Tg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags=2,\nc):d;b.flags=2;return c}function g(b){a&&null===b.alternate&&(b.flags=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Ug(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Qg(a,b,c),d.return=a,d;d=Vg(c.type,c.key,c.props,null,a.mode,d);d.ref=Qg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=\nWg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function n(a,b,c,d,f){if(null===b||7!==b.tag)return b=Xg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function A(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Ug(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case sa:return c=Vg(b.type,b.key,b.props,null,a.mode,c),c.ref=Qg(a,null,b),c.return=a,c;case ta:return b=Wg(b,a.mode,c),b.return=a,b}if(Pg(b)||La(b))return b=Xg(b,\na.mode,c,null),b.return=a,b;Rg(a,b)}return null}function p(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case sa:return c.key===e?c.type===ua?n(a,b,c.props.children,d,e):k(a,b,c,d):null;case ta:return c.key===e?l(a,b,c,d):null}if(Pg(c)||La(c))return null!==e?null:n(a,b,c,d,null);Rg(a,c)}return null}function C(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=a.get(c)||\nnull,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case sa:return a=a.get(null===d.key?c:d.key)||null,d.type===ua?n(b,a,d.props.children,e,d.key):k(b,a,d,e);case ta:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Pg(d)||La(d))return a=a.get(c)||null,n(b,a,d,e,null);Rg(b,d)}return null}function x(e,g,h,k){for(var l=null,t=null,u=g,z=g=0,q=null;null!==u&&z<h.length;z++){u.index>z?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===\nn.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;z<h.length;z++)u=A(e,h[z],k),null!==u&&(g=f(u,g,z),null===t?l=u:t.sibling=u,t=u);return l}for(u=d(e,u);z<h.length;z++)q=C(u,e,z,h[z],k),null!==q&&(a&&null!==q.alternate&&u.delete(null===q.key?z:q.key),g=f(q,g,z),null===t?l=q:t.sibling=q,t=q);a&&u.forEach(function(a){return b(e,a)});return l}function w(e,g,h,k){var l=La(h);if(\"function\"!==typeof l)throw Error(y(150));h=l.call(h);if(null==\nh)throw Error(y(151));for(var t=l=null,u=g,z=g=0,q=null,n=h.next();null!==u&&!n.done;z++,n=h.next()){u.index>z?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&\nu.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);\nd=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=\nWg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||\"Component\"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);\nfunction dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);\nfunction ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;\nfunction mh(a,b){var c=nh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}\nfunction rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}\nfunction sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;a<th.length;a++)th[a]._workInProgressVersionPrimary=null;th.length=0}var vh=ra.ReactCurrentDispatcher,wh=ra.ReactCurrentBatchConfig,xh=0,R=null,S=null,T=null,yh=!1,zh=!1;function Ah(){throw Error(y(321));}function Bh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Ch(a,b,c,d,e,f){xh=f;R=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;vh.current=null===a||null===a.memoizedState?Dh:Eh;a=c(d,e);if(zh){f=0;do{zh=!1;if(!(25>f))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}\nfunction Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,\neagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}\nfunction Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=\ne.entanglements,h=a;0<h;){var k=31-Vc(h),v=1<<k;d[k]|=a;h&=~v}}},[c,b,d]);h.useEffect(function(){return d(b._source,function(){var a=p.getSnapshot,c=p.setSnapshot;try{c(a(b._source));var d=Ig(w);e.mutableReadLanes|=d&e.pendingLanes}catch(q){c(function(){throw q;})}})},[b,d]);He(C,c)&&He(x,b)&&He(A,d)||(a={pending:null,dispatch:null,lastRenderedReducer:Jh,lastRenderedState:n},a.dispatch=l=Oh.bind(null,R,a),k.queue=a,k.baseQueue=null,n=Mh(e,b,c),k.memoizedState=k.baseState=n);return n}\nfunction Ph(a,b,c){var d=Ih();return Nh(d,a,b,c)}function Qh(a){var b=Hh();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:Jh,lastRenderedState:a};a=a.dispatch=Oh.bind(null,R,a);return[b.memoizedState,a]}\nfunction Rh(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=R.updateQueue;null===b?(b={lastEffect:null},R.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function Sh(a){var b=Hh();a={current:a};return b.memoizedState=a}function Th(){return Ih().memoizedState}function Uh(a,b,c,d){var e=Hh();R.flags|=a;e.memoizedState=Rh(1|b,c,void 0,void 0===d?null:d)}\nfunction Vh(a,b,c,d){var e=Ih();d=void 0===d?null:d;var f=void 0;if(null!==S){var g=S.memoizedState;f=g.destroy;if(null!==d&&Bh(d,g.deps)){Rh(b,c,f,d);return}}R.flags|=a;e.memoizedState=Rh(1|b,c,f,d)}function Wh(a,b){return Uh(516,4,a,b)}function Xh(a,b){return Vh(516,4,a,b)}function Yh(a,b){return Vh(4,2,a,b)}function Zh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}\nfunction $h(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Vh(4,2,Zh.bind(null,b,a),c)}function ai(){}function bi(a,b){var c=Ih();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Bh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}function ci(a,b){var c=Ih();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Bh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}\nfunction di(a,b){var c=eg();gg(98>c?98:c,function(){a(!0)});gg(97<c?97:c,function(){var c=wh.transition;wh.transition=1;try{a(!1),b()}finally{wh.transition=c}})}\nfunction Oh(a,b,c){var d=Hg(),e=Ig(a),f={lane:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.pending;null===g?f.next=f:(f.next=g.next,g.next=f);b.pending=f;g=a.alternate;if(a===R||null!==g&&g===R)zh=yh=!0;else{if(0===a.lanes&&(null===g||0===g.lanes)&&(g=b.lastRenderedReducer,null!==g))try{var h=b.lastRenderedState,k=g(h,c);f.eagerReducer=g;f.eagerState=k;if(He(k,h))return}catch(l){}finally{}Jg(a,e,d)}}\nvar Gh={readContext:vg,useCallback:Ah,useContext:Ah,useEffect:Ah,useImperativeHandle:Ah,useLayoutEffect:Ah,useMemo:Ah,useReducer:Ah,useRef:Ah,useState:Ah,useDebugValue:Ah,useDeferredValue:Ah,useTransition:Ah,useMutableSource:Ah,useOpaqueIdentifier:Ah,unstable_isNewReconciler:!1},Dh={readContext:vg,useCallback:function(a,b){Hh().memoizedState=[a,void 0===b?null:b];return a},useContext:vg,useEffect:Wh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Uh(4,2,Zh.bind(null,\nb,a),c)},useLayoutEffect:function(a,b){return Uh(4,2,a,b)},useMemo:function(a,b){var c=Hh();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Hh();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=Oh.bind(null,R,a);return[d.memoizedState,a]},useRef:Sh,useState:Qh,useDebugValue:ai,useDeferredValue:function(a){var b=Qh(a),c=b[0],d=b[1];Wh(function(){var b=wh.transition;\nwh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Qh(!1),b=a[0];a=di.bind(null,a[1]);Sh(a);return[a,b]},useMutableSource:function(a,b,c){var d=Hh();d.memoizedState={refs:{getSnapshot:b,setSnapshot:null},source:a,subscribe:c};return Nh(d,a,b,c)},useOpaqueIdentifier:function(){if(lh){var a=!1,b=uf(function(){a||(a=!0,c(\"r:\"+(tf++).toString(36)));throw Error(y(355));}),c=Qh(b)[1];0===(R.mode&2)&&(R.flags|=516,Rh(5,function(){c(\"r:\"+(tf++).toString(36))},\nvoid 0,null));return b}b=\"r:\"+(tf++).toString(36);Qh(b);return b},unstable_isNewReconciler:!1},Eh={readContext:vg,useCallback:bi,useContext:vg,useEffect:Xh,useImperativeHandle:$h,useLayoutEffect:Yh,useMemo:ci,useReducer:Kh,useRef:Th,useState:function(){return Kh(Jh)},useDebugValue:ai,useDeferredValue:function(a){var b=Kh(Jh),c=b[0],d=b[1];Xh(function(){var b=wh.transition;wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Kh(Jh)[0];return[Th().current,\na]},useMutableSource:Ph,useOpaqueIdentifier:function(){return Kh(Jh)[0]},unstable_isNewReconciler:!1},Fh={readContext:vg,useCallback:bi,useContext:vg,useEffect:Xh,useImperativeHandle:$h,useLayoutEffect:Yh,useMemo:ci,useReducer:Lh,useRef:Th,useState:function(){return Lh(Jh)},useDebugValue:ai,useDeferredValue:function(a){var b=Lh(Jh),c=b[0],d=b[1];Xh(function(){var b=wh.transition;wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Lh(Jh)[0];return[Th().current,\na]},useMutableSource:Ph,useOpaqueIdentifier:function(){return Lh(Jh)[0]},unstable_isNewReconciler:!1},ei=ra.ReactCurrentOwner,ug=!1;function fi(a,b,c,d){b.child=null===a?Zg(b,null,c,d):Yg(b,a.child,c,d)}function gi(a,b,c,d,e){c=c.render;var f=b.ref;tg(b,e);d=Ch(a,b,c,d,f,e);if(null!==a&&!ug)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,hi(a,b,e);b.flags|=1;fi(a,b,d,e);return b.child}\nfunction ii(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!ji(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ki(a,b,g,d,e,f);a=Vg(c.type,null,d,b,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(0===(e&f)&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:Je,c(e,d)&&a.ref===b.ref))return hi(a,b,f);b.flags|=1;a=Tg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ki(a,b,c,d,e,f){if(null!==a&&Je(a.memoizedProps,d)&&a.ref===b.ref)if(ug=!1,0!==(f&e))0!==(a.flags&16384)&&(ug=!0);else return b.lanes=a.lanes,hi(a,b,f);return li(a,b,c,d,f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode||\"unstable-defer-without-hiding\"===d.mode)if(0===(b.mode&4))b.memoizedState={baseLanes:0},ni(b,c);else if(0!==(c&1073741824))b.memoizedState={baseLanes:0},ni(b,null!==f?f.baseLanes:c);else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a},ni(b,a),null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,ni(b,d);fi(a,b,e,c);return b.child}\nfunction oi(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=128}function li(a,b,c,d,e){var f=Ff(c)?Df:M.current;f=Ef(b,f);tg(b,e);c=Ch(a,b,c,d,f,e);if(null!==a&&!ug)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,hi(a,b,e);b.flags|=1;fi(a,b,c,e);return b.child}\nfunction pi(a,b,c,d,e){if(Ff(c)){var f=!0;Jf(b)}else f=!1;tg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Mg(b,c,d),Og(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=vg(l):(l=Ff(c)?Df:M.current,l=Ef(b,l));var n=c.getDerivedStateFromProps,A=\"function\"===typeof n||\"function\"===typeof g.getSnapshotBeforeUpdate;A||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Ng(b,g,d,l);wg=!1;var p=b.memoizedState;g.state=p;Cg(b,d,g,e);k=b.memoizedState;h!==d||p!==k||N.current||wg?(\"function\"===typeof n&&(Gg(b,c,n,d),k=b.memoizedState),(h=wg||Lg(b,c,h,d,p,k,l))?(A||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.flags|=4)):(\"function\"===typeof g.componentDidMount&&(b.flags|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4),d=!1)}else{g=b.stateNode;yg(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:lg(b.type,h);g.props=l;A=b.pendingProps;p=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=vg(k):(k=Ff(c)?Df:M.current,k=Ef(b,k));var C=c.getDerivedStateFromProps;(n=\"function\"===typeof C||\n\"function\"===typeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==A||p!==k)&&Ng(b,g,d,k);wg=!1;p=b.memoizedState;g.state=p;Cg(b,d,g,e);var x=b.memoizedState;h!==A||p!==x||N.current||wg?(\"function\"===typeof C&&(Gg(b,c,C,d),x=b.memoizedState),(l=wg||Lg(b,c,l,d,p,x,k))?(n||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||\nh===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),d=!1)}return qi(a,b,c,d,f,e)}\nfunction qi(a,b,c,d,e,f){oi(a,b);var g=0!==(b.flags&64);if(!d&&!g)return e&&Kf(b,c,!1),hi(a,b,f);d=b.stateNode;ei.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Yg(b,a.child,null,f),b.child=Yg(b,null,h,f)):fi(a,b,h,f);b.memoizedState=d.state;e&&Kf(b,c,!0);return b.child}function ri(a){var b=a.stateNode;b.pendingContext?Hf(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Hf(a,b.context,!1);eh(a,b.containerInfo)}\nvar si={dehydrated:null,retryLane:0};\nfunction ti(a,b,c){var d=b.pendingProps,e=P.current,f=!1,g;(g=0!==(b.flags&64))||(g=null!==a&&null===a.memoizedState?!1:0!==(e&2));g?(f=!0,b.flags&=-65):null!==a&&null===a.memoizedState||void 0===d.fallback||!0===d.unstable_avoidThisFallback||(e|=1);I(P,e&1);if(null===a){void 0!==d.fallback&&ph(b);a=d.children;e=d.fallback;if(f)return a=ui(b,a,e,c),b.child.memoizedState={baseLanes:c},b.memoizedState=si,a;if(\"number\"===typeof d.unstable_expectedLoadTime)return a=ui(b,a,e,c),b.child.memoizedState={baseLanes:c},\nb.memoizedState=si,b.lanes=33554432,a;c=vi({mode:\"visible\",children:a},b.mode,c,null);c.return=b;return b.child=c}if(null!==a.memoizedState){if(f)return d=wi(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=si,d;c=xi(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=wi(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:\n{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=si,d;c=xi(a,b,d.children,c);b.memoizedState=null;return c}function ui(a,b,c,d){var e=a.mode,f=a.child;b={mode:\"hidden\",children:b};0===(e&2)&&null!==f?(f.childLanes=0,f.pendingProps=b):f=vi(b,e,0,null);c=Xg(c,e,d,null);f.return=a;c.return=a;f.sibling=c;a.child=f;return c}\nfunction xi(a,b,c,d){var e=a.child;a=e.sibling;c=Tg(e,{mode:\"visible\",children:c});0===(b.mode&2)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(a.nextEffect=null,a.flags=8,b.firstEffect=b.lastEffect=a);return b.child=c}\nfunction wi(a,b,c,d,e){var f=b.mode,g=a.child;a=g.sibling;var h={mode:\"hidden\",children:c};0===(f&2)&&b.child!==g?(c=b.child,c.childLanes=0,c.pendingProps=h,g=c.lastEffect,null!==g?(b.firstEffect=c.firstEffect,b.lastEffect=g,g.nextEffect=null):b.firstEffect=b.lastEffect=null):c=Tg(g,h);null!==a?d=Tg(a,d):(d=Xg(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function yi(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);sg(a.return,b)}\nfunction zi(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailMode=e,g.lastEffect=f)}\nfunction Ai(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;fi(a,b,d.children,c);d=P.current;if(0!==(d&2))d=d&1|2,b.flags|=64;else{if(null!==a&&0!==(a.flags&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&yi(a,c);else if(19===a.tag)yi(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(P,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===ih(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);zi(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===ih(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}zi(b,!0,c,null,f,b.lastEffect);break;case \"together\":zi(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction hi(a,b,c){null!==a&&(b.dependencies=a.dependencies);Dg|=b.lanes;if(0!==(c&b.childLanes)){if(null!==a&&b.child!==a.child)throw Error(y(153));if(null!==b.child){a=b.child;c=Tg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Tg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}return null}var Bi,Ci,Di,Ei;\nBi=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Ci=function(){};\nDi=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;dh(ah.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"option\":e=eb(a,e);d=eb(a,d);f=[];break;case \"select\":e=m({},e,{value:void 0});d=m({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=jf)}vb(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===\nl){var h=e[l];for(g in h)h.hasOwnProperty(g)&&(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ca.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||\n(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,c)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ca.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&G(\"scroll\",a),f||h===k||(f=[])):\"object\"===typeof k&&null!==k&&k.$$typeof===Ga?k.toString():(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",\nc);var l=f;if(b.updateQueue=l)b.flags|=4}};Ei=function(a,b,c,d){c!==d&&(b.flags|=4)};function Fi(a,b){if(!lh)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction Gi(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return Ff(b.type)&&Gf(),null;case 3:fh();H(N);H(M);uh();d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)rh(b)?b.flags|=4:d.hydrate||(b.flags|=256);Ci(b);return null;case 5:hh(b);var e=dh(ch.current);c=b.type;if(null!==a&&null!=b.stateNode)Di(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=128);else{if(!d){if(null===\nb.stateNode)throw Error(y(166));return null}a=dh(ah.current);if(rh(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[wf]=b;d[xf]=f;switch(c){case \"dialog\":G(\"cancel\",d);G(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<Xe.length;a++)G(Xe[a],d);break;case \"source\":G(\"error\",d);break;case \"img\":case \"image\":case \"link\":G(\"error\",d);G(\"load\",d);break;case \"details\":G(\"toggle\",d);break;case \"input\":Za(d,f);G(\"invalid\",d);break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};G(\"invalid\",d);break;case \"textarea\":hb(d,f),G(\"invalid\",d)}vb(c,f);a=null;for(var g in f)f.hasOwnProperty(g)&&(e=f[g],\"children\"===g?\"string\"===typeof e?d.textContent!==e&&(a=[\"children\",e]):\"number\"===typeof e&&d.textContent!==\"\"+e&&(a=[\"children\",\"\"+e]):ca.hasOwnProperty(g)&&null!=e&&\"onScroll\"===g&&G(\"scroll\",d));switch(c){case \"input\":Va(d);cb(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=\njf)}d=a;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;a===kb.html&&(a=lb(c));a===kb.html?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case \"dialog\":G(\"cancel\",a);G(\"close\",a);\ne=d;break;case \"iframe\":case \"object\":case \"embed\":G(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<Xe.length;e++)G(Xe[e],a);e=d;break;case \"source\":G(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":G(\"error\",a);G(\"load\",a);e=d;break;case \"details\":G(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);G(\"invalid\",a);break;case \"option\":e=eb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=m({},d,{value:void 0});G(\"invalid\",a);break;case \"textarea\":hb(a,d);e=\ngb(a,d);G(\"invalid\",a);break;default:e=d}vb(c,e);var h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?tb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&ob(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==c||\"\"!==k)&&pb(a,k):\"number\"===typeof k&&pb(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ca.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&G(\"scroll\",a):null!=k&&qa(a,f,k,g))}switch(c){case \"input\":Va(a);cb(a,d,!1);\nbreak;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=jf)}mf(c,d)&&(b.flags|=4)}null!==b.ref&&(b.flags|=128)}return null;case 6:if(a&&null!=b.stateNode)Ei(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(y(166));\nc=dh(ch.current);dh(ah.current);rh(b)?(d=b.stateNode,c=b.memoizedProps,d[wf]=b,d.nodeValue!==c&&(b.flags|=4)):(d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[wf]=b,b.stateNode=d)}return null;case 13:H(P);d=b.memoizedState;if(0!==(b.flags&64))return b.lanes=c,b;d=null!==d;c=!1;null===a?void 0!==b.memoizedProps.fallback&&rh(b):c=null!==a.memoizedState;if(d&&!c&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(P.current&1))0===V&&(V=3);else{if(0===V||3===V)V=\n4;null===U||0===(Dg&134217727)&&0===(Hi&134217727)||Ii(U,W)}if(d||c)b.flags|=4;return null;case 4:return fh(),Ci(b),null===a&&cf(b.stateNode.containerInfo),null;case 10:return rg(b),null;case 17:return Ff(b.type)&&Gf(),null;case 19:H(P);d=b.memoizedState;if(null===d)return null;f=0!==(b.flags&64);g=d.rendering;if(null===g)if(f)Fi(d,!1);else{if(0!==V||null!==a&&0!==(a.flags&64))for(a=b.child;null!==a;){g=ih(a);if(null!==g){b.flags|=64;Fi(d,!1);f=g.updateQueue;null!==f&&(b.updateQueue=f,b.flags|=4);\nnull===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=2,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null,g=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,\nf.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;I(P,P.current&1|2);return b.child}a=a.sibling}null!==d.tail&&O()>Ji&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=\n64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&\"unstable-defer-without-hiding\"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}\nfunction Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}\nfunction Mi(a,b){try{var c=\"\",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi=\"function\"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}\nfunction Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}var Ui=\"function\"===typeof WeakSet?WeakSet:Set;\nfunction Vi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}\nfunction Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,\nb.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));\nreturn;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}\nfunction aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,\"function\"===typeof d.setProperty?d.setProperty(\"display\",\"none\",\"important\"):d.display=\"none\";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null;d.style.display=sb(\"display\",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?\"\":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===\na)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}\nfunction bj(a,b){if(Mf&&\"function\"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if(\"function\"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,\nf)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,\"\"),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===\nc.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}\nfunction gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}\nfunction hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}\nfunction cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,\n8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}\nfunction ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;e<f.length;e+=\n2){var g=f[e],h=f[e+1];\"style\"===g?tb(c,h):\"dangerouslySetInnerHTML\"===g?ob(c,h):\"children\"===g?pb(c,h):qa(c,g,h,b)}switch(a){case \"input\":ab(c,d);break;case \"textarea\":ib(c,d);break;case \"select\":a=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,f=d.value,null!=f?fb(c,!!d.multiple,f,!1):a!==!!d.multiple&&(null!=d.defaultValue?fb(c,!!d.multiple,d.defaultValue,!0):fb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(y(162));b.stateNode.nodeValue=\nb.memoizedProps;return;case 3:c=b.stateNode;c.hydrate&&(c.hydrate=!1,Cc(c.containerInfo));return;case 12:return;case 13:null!==b.memoizedState&&(jj=O(),aj(b.child,!0));kj(b);return;case 19:kj(b);return;case 17:return;case 23:case 24:aj(b,null!==b.memoizedState);return}throw Error(y(163));}function kj(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ui);b.forEach(function(b){var d=lj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction mj(a,b){return null!==a&&(a=a.memoizedState,null===a||null!==a.dehydrated)?(b=b.memoizedState,null!==b&&null===b.dehydrated):!1}var nj=Math.ceil,oj=ra.ReactCurrentDispatcher,pj=ra.ReactCurrentOwner,X=0,U=null,Y=null,W=0,qj=0,rj=Bf(0),V=0,sj=null,tj=0,Dg=0,Hi=0,uj=0,vj=null,jj=0,Ji=Infinity;function wj(){Ji=O()+500}var Z=null,Qi=!1,Ri=null,Ti=null,xj=!1,yj=null,zj=90,Aj=[],Bj=[],Cj=null,Dj=0,Ej=null,Fj=-1,Gj=0,Hj=0,Ij=null,Jj=!1;function Hg(){return 0!==(X&48)?O():-1!==Fj?Fj:Fj=O()}\nfunction Ig(a){a=a.mode;if(0===(a&2))return 1;if(0===(a&4))return 99===eg()?1:2;0===Gj&&(Gj=tj);if(0!==kg.transition){0!==Hj&&(Hj=null!==vj?vj.pendingLanes:0);a=Gj;var b=4186112&~Hj;b&=-b;0===b&&(a=4186112&~a,b=a&-a,0===b&&(b=8192));return b}a=eg();0!==(X&4)&&98===a?a=Xc(12,Gj):(a=Sc(a),a=Xc(a,Gj));return a}\nfunction Jg(a,b,c){if(50<Dj)throw Dj=0,Ej=null,Error(y(185));a=Kj(a,b);if(null===a)return null;$c(a,b,c);a===U&&(Hi|=b,4===V&&Ii(a,W));var d=eg();1===b?0!==(X&8)&&0===(X&48)?Lj(a):(Mj(a,c),0===X&&(wj(),ig())):(0===(X&4)||98!==d&&99!==d||(null===Cj?Cj=new Set([a]):Cj.add(a)),Mj(a,c));vj=a}function Kj(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}\nfunction Mj(a,b){for(var c=a.callbackNode,d=a.suspendedLanes,e=a.pingedLanes,f=a.expirationTimes,g=a.pendingLanes;0<g;){var h=31-Vc(g),k=1<<h,l=f[h];if(-1===l){if(0===(k&d)||0!==(k&e)){l=b;Rc(k);var n=F;f[h]=10<=n?l+250:6<=n?l+5E3:-1}}else l<=b&&(a.expiredLanes|=k);g&=~k}d=Uc(a,a===U?W:0);b=F;if(0===d)null!==c&&(c!==Zf&&Pf(c),a.callbackNode=null,a.callbackPriority=0);else{if(null!==c){if(a.callbackPriority===b)return;c!==Zf&&Pf(c)}15===b?(c=Lj.bind(null,a),null===ag?(ag=[c],bg=Of(Uf,jg)):ag.push(c),\nc=Zf):14===b?c=hg(99,Lj.bind(null,a)):(c=Tc(b),c=hg(c,Nj.bind(null,a)));a.callbackPriority=b;a.callbackNode=c}}\nfunction Nj(a){Fj=-1;Hj=Gj=0;if(0!==(X&48))throw Error(y(327));var b=a.callbackNode;if(Oj()&&a.callbackNode!==b)return null;var c=Uc(a,a===U?W:0);if(0===c)return null;var d=c;var e=X;X|=16;var f=Pj();if(U!==a||W!==d)wj(),Qj(a,d);do try{Rj();break}catch(h){Sj(a,h)}while(1);qg();oj.current=f;X=e;null!==Y?d=0:(U=null,W=0,d=V);if(0!==(tj&Hi))Qj(a,0);else if(0!==d){2===d&&(X|=64,a.hydrate&&(a.hydrate=!1,qf(a.containerInfo)),c=Wc(a),0!==c&&(d=Tj(a,c)));if(1===d)throw b=sj,Qj(a,0),Ii(a,c),Mj(a,O()),b;a.finishedWork=\na.current.alternate;a.finishedLanes=c;switch(d){case 0:case 1:throw Error(y(345));case 2:Uj(a);break;case 3:Ii(a,c);if((c&62914560)===c&&(d=jj+500-O(),10<d)){if(0!==Uc(a,0))break;e=a.suspendedLanes;if((e&c)!==c){Hg();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=of(Uj.bind(null,a),d);break}Uj(a);break;case 4:Ii(a,c);if((c&4186112)===c)break;d=a.eventTimes;for(e=-1;0<c;){var g=31-Vc(c);f=1<<g;g=d[g];g>e&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>\nc?4320:1960*nj(c/1960))-c;if(10<c){a.timeoutHandle=of(Uj.bind(null,a),c);break}Uj(a);break;case 5:Uj(a);break;default:throw Error(y(329));}}Mj(a,O());return a.callbackNode===b?Nj.bind(null,a):null}function Ii(a,b){b&=~uj;b&=~Hi;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-Vc(b),d=1<<c;a[c]=-1;b&=~d}}\nfunction Lj(a){if(0!==(X&48))throw Error(y(327));Oj();if(a===U&&0!==(a.expiredLanes&W)){var b=W;var c=Tj(a,b);0!==(tj&Hi)&&(b=Uc(a,b),c=Tj(a,b))}else b=Uc(a,0),c=Tj(a,b);0!==a.tag&&2===c&&(X|=64,a.hydrate&&(a.hydrate=!1,qf(a.containerInfo)),b=Wc(a),0!==b&&(c=Tj(a,b)));if(1===c)throw c=sj,Qj(a,0),Ii(a,b),Mj(a,O()),c;a.finishedWork=a.current.alternate;a.finishedLanes=b;Uj(a);Mj(a,O());return null}\nfunction Vj(){if(null!==Cj){var a=Cj;Cj=null;a.forEach(function(a){a.expiredLanes|=24&a.pendingLanes;Mj(a,O())})}ig()}function Wj(a,b){var c=X;X|=1;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}}function Xj(a,b){var c=X;X&=-2;X|=8;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}}function ni(a,b){I(rj,qj);qj|=b;tj|=b}function Ki(){qj=rj.current;H(rj)}\nfunction Qj(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,pf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Gf();break;case 3:fh();H(N);H(M);uh();break;case 5:hh(d);break;case 4:fh();break;case 13:H(P);break;case 19:H(P);break;case 10:rg(d);break;case 23:case 24:Ki()}c=c.return}U=a;Y=Tg(a.current,null);W=qj=tj=b;V=0;sj=null;uj=Hi=Dg=0}\nfunction Sj(a,b){do{var c=Y;try{qg();vh.current=Gh;if(yh){for(var d=R.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}yh=!1}xh=0;T=S=R=null;zh=!1;pj.current=null;if(null===c||null===c.return){V=1;sj=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=W;h.flags|=2048;h.firstEffect=h.lastEffect=null;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k;if(0===(h.mode&2)){var n=h.alternate;n?(h.updateQueue=n.updateQueue,h.memoizedState=n.memoizedState,h.lanes=n.lanes):\n(h.updateQueue=null,h.memoizedState=null)}var A=0!==(P.current&1),p=g;do{var C;if(C=13===p.tag){var x=p.memoizedState;if(null!==x)C=null!==x.dehydrated?!0:!1;else{var w=p.memoizedProps;C=void 0===w.fallback?!1:!0!==w.unstable_avoidThisFallback?!0:A?!1:!0}}if(C){var z=p.updateQueue;if(null===z){var u=new Set;u.add(l);p.updateQueue=u}else z.add(l);if(0===(p.mode&2)){p.flags|=64;h.flags|=16384;h.flags&=-2981;if(1===h.tag)if(null===h.alternate)h.tag=17;else{var t=zg(-1,1);t.tag=2;Ag(h,t)}h.lanes|=1;break a}k=\nvoid 0;h=b;var q=f.pingCache;null===q?(q=f.pingCache=new Oi,k=new Set,q.set(l,k)):(k=q.get(l),void 0===k&&(k=new Set,q.set(l,k)));if(!k.has(h)){k.add(h);var v=Yj.bind(null,f,l,h);l.then(v,v)}p.flags|=4096;p.lanes=b;break a}p=p.return}while(null!==p);k=Error((Ra(h.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\")}5!==V&&(V=2);k=Mi(k,h);p=\ng;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&(\"function\"===typeof K.getDerivedStateFromError||null!==Q&&\"function\"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}\nfunction Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}\nfunction Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1<b.flags&&(null!==\na.lastEffect?a.lastEffect.nextEffect=b:a.firstEffect=b,a.lastEffect=b))}else{c=Li(b);if(null!==c){c.flags&=2047;Y=c;return}null!==a&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===V&&(V=5)}function Uj(a){var b=eg();gg(99,dk.bind(null,a,b));return null}\nfunction dk(a,b){do Oj();while(null!==yj);if(0!==(X&48))throw Error(y(327));var c=a.finishedWork;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(y(177));a.callbackNode=null;var d=c.lanes|c.childLanes,e=d,f=a.pendingLanes&~e;a.pendingLanes=e;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=e;a.mutableReadLanes&=e;a.entangledLanes&=e;e=a.entanglements;for(var g=a.eventTimes,h=a.expirationTimes;0<f;){var k=31-Vc(f),l=1<<k;e[k]=0;g[k]=-1;h[k]=-1;f&=~l}null!==\nCj&&0===(d&24)&&Cj.has(a)&&Cj.delete(a);a===U&&(Y=U=null,W=0);1<c.flags?null!==c.lastEffect?(c.lastEffect.nextEffect=c,d=c.firstEffect):d=c:d=c.firstEffect;if(null!==d){e=X;X|=32;pj.current=null;kf=fd;g=Ne();if(Oe(g)){if(\"selectionStart\"in g)h={start:g.selectionStart,end:g.selectionEnd};else a:if(h=(h=g.ownerDocument)&&h.defaultView||window,(l=h.getSelection&&h.getSelection())&&0!==l.rangeCount){h=l.anchorNode;f=l.anchorOffset;k=l.focusNode;l=l.focusOffset;try{h.nodeType,k.nodeType}catch(va){h=null;\nbreak a}var n=0,A=-1,p=-1,C=0,x=0,w=g,z=null;b:for(;;){for(var u;;){w!==h||0!==f&&3!==w.nodeType||(A=n+f);w!==k||0!==l&&3!==w.nodeType||(p=n+l);3===w.nodeType&&(n+=w.nodeValue.length);if(null===(u=w.firstChild))break;z=w;w=u}for(;;){if(w===g)break b;z===h&&++C===f&&(A=n);z===k&&++x===l&&(p=n);if(null!==(u=w.nextSibling))break;w=z;z=w.parentNode}w=u}h=-1===A||-1===p?null:{start:A,end:p}}else h=null;h=h||{start:0,end:0}}else h=null;lf={focusedElem:g,selectionRange:h};fd=!1;Ij=null;Jj=!1;Z=d;do try{ek()}catch(va){if(null===\nZ)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);Ij=null;Z=d;do try{for(g=a;null!==Z;){var t=Z.flags;t&16&&pb(Z.stateNode,\"\");if(t&128){var q=Z.alternate;if(null!==q){var v=q.ref;null!==v&&(\"function\"===typeof v?v(null):v.current=null)}}switch(t&1038){case 2:fj(Z);Z.flags&=-3;break;case 6:fj(Z);Z.flags&=-3;ij(Z.alternate,Z);break;case 1024:Z.flags&=-1025;break;case 1028:Z.flags&=-1025;ij(Z.alternate,Z);break;case 4:ij(Z.alternate,Z);break;case 8:h=Z;cj(g,h);var J=h.alternate;dj(h);null!==\nJ&&dj(J)}Z=Z.nextEffect}}catch(va){if(null===Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);v=lf;q=Ne();t=v.focusedElem;g=v.selectionRange;if(q!==t&&t&&t.ownerDocument&&Me(t.ownerDocument.documentElement,t)){null!==g&&Oe(t)&&(q=g.start,v=g.end,void 0===v&&(v=q),\"selectionStart\"in t?(t.selectionStart=q,t.selectionEnd=Math.min(v,t.value.length)):(v=(q=t.ownerDocument||document)&&q.defaultView||window,v.getSelection&&(v=v.getSelection(),h=t.textContent.length,J=Math.min(g.start,h),g=void 0===\ng.end?J:Math.min(g.end,h),!v.extend&&J>g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});\"function\"===typeof t.focus&&t.focus();for(t=\n0;t<q.length;t++)v=q[t],v.element.scrollLeft=v.left,v.element.scrollTop=v.top}fd=!!kf;lf=kf=null;a.current=c;Z=d;do try{for(t=a;null!==Z;){var K=Z.flags;K&36&&Yi(t,Z.alternate,Z);if(K&128){q=void 0;var Q=Z.ref;if(null!==Q){var L=Z.stateNode;switch(Z.tag){case 5:q=L;break;default:q=L}\"function\"===typeof Q?Q(q):Q.current=q}}Z=Z.nextEffect}}catch(va){if(null===Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);Z=null;$f();X=e}else a.current=c;if(xj)xj=!1,yj=a,zj=b;else for(Z=d;null!==Z;)b=\nZ.nextEffect,Z.nextEffect=null,Z.flags&8&&(K=Z,K.sibling=null,K.stateNode=null),Z=b;d=a.pendingLanes;0===d&&(Ti=null);1===d?a===Ej?Dj++:(Dj=0,Ej=a):Dj=0;c=c.stateNode;if(Mf&&\"function\"===typeof Mf.onCommitFiberRoot)try{Mf.onCommitFiberRoot(Lf,c,void 0,64===(c.current.flags&64))}catch(va){}Mj(a,O());if(Qi)throw Qi=!1,a=Ri,Ri=null,a;if(0!==(X&8))return null;ig();return null}\nfunction ek(){for(;null!==Z;){var a=Z.alternate;Jj||null===Ij||(0!==(Z.flags&8)?dc(Z,Ij)&&(Jj=!0):13===Z.tag&&mj(a,Z)&&dc(Z,Ij)&&(Jj=!0));var b=Z.flags;0!==(b&256)&&Xi(a,Z);0===(b&512)||xj||(xj=!0,hg(97,function(){Oj();return null}));Z=Z.nextEffect}}function Oj(){if(90!==zj){var a=97<zj?97:zj;zj=90;return gg(a,fk)}return!1}function $i(a,b){Aj.push(b,a);xj||(xj=!0,hg(97,function(){Oj();return null}))}function Zi(a,b){Bj.push(b,a);xj||(xj=!0,hg(97,function(){Oj();return null}))}\nfunction fk(){if(null===yj)return!1;var a=yj;yj=null;if(0!==(X&48))throw Error(y(331));var b=X;X|=32;var c=Bj;Bj=[];for(var d=0;d<c.length;d+=2){var e=c[d],f=c[d+1],g=e.destroy;e.destroy=void 0;if(\"function\"===typeof g)try{g()}catch(k){if(null===f)throw Error(y(330));Wi(f,k)}}c=Aj;Aj=[];for(d=0;d<c.length;d+=2){e=c[d];f=c[d+1];try{var h=e.create;e.destroy=h()}catch(k){if(null===f)throw Error(y(330));Wi(f,k)}}for(h=a.current.firstEffect;null!==h;)a=h.nextEffect,h.nextEffect=null,h.flags&8&&(h.sibling=\nnull,h.stateNode=null),h=a;X=b;ig();return!0}function gk(a,b,c){b=Mi(c,b);b=Pi(a,b,1);Ag(a,b);b=Hg();a=Kj(a,1);null!==a&&($c(a,1,b),Mj(a,b))}\nfunction Wi(a,b){if(3===a.tag)gk(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){gk(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ti||!Ti.has(d))){a=Mi(b,a);var e=Si(c,a,1);Ag(c,e);e=Hg();c=Kj(c,1);if(null!==c)$c(c,1,e),Mj(c,e);else if(\"function\"===typeof d.componentDidCatch&&(null===Ti||!Ti.has(d)))try{d.componentDidCatch(b,a)}catch(f){}break}}c=c.return}}\nfunction Yj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=Hg();a.pingedLanes|=a.suspendedLanes&c;U===a&&(W&c)===c&&(4===V||3===V&&(W&62914560)===W&&500>O()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;\nck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==\nb?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if(\"object\"===\ntypeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);\na=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));\nd=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e<a.length;e+=2)f=a[e],f._workInProgressVersionPrimary=a[e+1],th.push(f);c=Zg(b,null,d,c);for(b.child=c;c;)c.flags=c.flags&-3|1024,c=c.sibling}else fi(a,b,d,c),sh();b=b.child}return b;case 5:return gh(b),null===a&&\nph(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,nf(d,e)?g=null:null!==f&&nf(d,f)&&(b.flags|=16),oi(a,b),fi(a,b,g,c),b.child;case 6:return null===a&&ph(b),null;case 13:return ti(a,b,c);case 4:return eh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Yg(b,null,d,c):fi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),gi(a,b,d,e,c);case 7:return fi(a,b,b.pendingProps,c),b.child;case 8:return fi(a,b,b.pendingProps.children,\nc),b.child;case 12:return fi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(mg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=He(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!N.current){b=hi(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var l=\nk.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=zg(-1,c&-c),l.tag=2,Ag(h,l));h.lanes|=c;l=h.alternate;null!==l&&(l.lanes|=c);sg(h.return,c);k.lanes|=c;break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}fi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,tg(b,c),e=vg(e,\nf.unstable_observedBits),d=d(e),b.flags|=1,fi(a,b,d,c),b.child;case 14:return e=b.type,f=lg(e,b.pendingProps),f=lg(e.type,f),ii(a,b,e,f,d,c);case 15:return ki(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,Ff(d)?(a=!0,Jf(b)):a=!1,tg(b,c),Mg(b,d,e),Og(b,d,e,c),qi(null,b,d,!0,a,c);case 19:return Ai(a,b,c);case 23:return mi(a,b,c);case 24:return mi(a,b,c)}throw Error(y(156,b.tag));\n};function ik(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.flags=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childLanes=this.lanes=0;this.alternate=null}function nh(a,b,c,d){return new ik(a,b,c,d)}function ji(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction hk(a){if(\"function\"===typeof a)return ji(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Aa)return 11;if(a===Da)return 14}return 2}\nfunction Tg(a,b){var c=a.alternate;null===c?(c=nh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Vg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)ji(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ua:return Xg(c.children,e,f,b);case Ha:g=8;e|=16;break;case wa:g=8;e|=1;break;case xa:return a=nh(12,c,b,e|8),a.elementType=xa,a.type=xa,a.lanes=f,a;case Ba:return a=nh(13,c,b,e),a.type=Ba,a.elementType=Ba,a.lanes=f,a;case Ca:return a=nh(19,c,b,e),a.elementType=Ca,a.lanes=f,a;case Ia:return vi(c,e,f,b);case Ja:return a=nh(24,c,b,e),a.elementType=Ja,a.lanes=f,a;default:if(\"object\"===\ntypeof a&&null!==a)switch(a.$$typeof){case ya:g=10;break a;case za:g=9;break a;case Aa:g=11;break a;case Da:g=14;break a;case Ea:g=16;d=null;break a;case Fa:g=22;break a}throw Error(y(130,null==a?a:typeof a,\"\"));}b=nh(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Xg(a,b,c,d){a=nh(7,a,d,b);a.lanes=c;return a}function vi(a,b,c,d){a=nh(23,a,d,b);a.elementType=Ia;a.lanes=c;return a}function Ug(a,b,c){a=nh(6,a,null,b);a.lanes=c;return a}\nfunction Wg(a,b,c){b=nh(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction jk(a,b,c){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=0;this.eventTimes=Zc(0);this.expirationTimes=Zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=Zc(0);this.mutableSourceEagerHydrationData=null}\nfunction kk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ta,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction lk(a,b,c,d){var e=b.current,f=Hg(),g=Ig(e);a:if(c){c=c._reactInternals;b:{if(Zb(c)!==c||1!==c.tag)throw Error(y(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(Ff(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(y(171));}if(1===c.tag){var k=c.type;if(Ff(k)){c=If(c,k,h);break a}}c=h}else c=Cf;null===b.context?b.context=c:b.pendingContext=c;b=zg(f,g);b.payload={element:a};d=void 0===d?null:d;null!==\nd&&(b.callback=d);Ag(e,b);Jg(e,g,f);return g}function mk(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function nk(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function ok(a,b){nk(a,b);(a=a.alternate)&&nk(a,b)}function pk(){return null}\nfunction qk(a,b,c){var d=null!=c&&null!=c.hydrationOptions&&c.hydrationOptions.mutableSources||null;c=new jk(a,b,null!=c&&!0===c.hydrate);b=nh(3,null,null,2===b?7:1===b?3:0);c.current=b;b.stateNode=c;xg(b);a[ff]=c.current;cf(8===a.nodeType?a.parentNode:a);if(d)for(a=0;a<d.length;a++){b=d[a];var e=b._getVersion;e=e(b._source);null==c.mutableSourceEagerHydrationData?c.mutableSourceEagerHydrationData=[b,e]:c.mutableSourceEagerHydrationData.push(b,e)}this._internalRoot=c}\nqk.prototype.render=function(a){lk(a,this._internalRoot,null,null)};qk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;lk(null,a,null,function(){b[ff]=null})};function rk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}\nfunction sk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new qk(a,0,b?{hydrate:!0}:void 0)}\nfunction tk(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=mk(g);h.call(a)}}lk(b,g,a,e)}else{f=c._reactRootContainer=sk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=mk(g);k.call(a)}}Xj(function(){lk(b,g,a,e)})}return mk(g)}ec=function(a){if(13===a.tag){var b=Hg();Jg(a,4,b);ok(a,4)}};fc=function(a){if(13===a.tag){var b=Hg();Jg(a,67108864,b);ok(a,67108864)}};\ngc=function(a){if(13===a.tag){var b=Hg(),c=Ig(a);Jg(a,c,b);ok(a,c)}};hc=function(a,b){return b()};\nyb=function(a,b,c){switch(b){case \"input\":ab(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(y(90));Wa(d);ab(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Wj;\nHb=function(a,b,c,d,e){var f=X;X|=4;try{return gg(98,a.bind(null,b,c,d,e))}finally{X=f,0===X&&(wj(),ig())}};Ib=function(){0===(X&49)&&(Vj(),Oj())};Jb=function(a,b){var c=X;X|=2;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}};function uk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!rk(b))throw Error(y(200));return kk(a,b,null,c)}var vk={Events:[Cb,ue,Db,Eb,Fb,Oj,{current:!1}]},wk={findFiberByHostInstance:wc,bundleType:0,version:\"17.0.2\",rendererPackageName:\"react-dom\"};\nvar xk={bundleType:wk.bundleType,version:wk.version,rendererPackageName:wk.rendererPackageName,rendererConfig:wk.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ra.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=cc(a);return null===a?null:a.stateNode},findFiberByHostInstance:wk.findFiberByHostInstance||\npk,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var yk=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!yk.isDisabled&&yk.supportsFiber)try{Lf=yk.inject(xk),Mf=yk}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=vk;exports.createPortal=uk;\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(y(188));throw Error(y(268,Object.keys(a)));}a=cc(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a,b){var c=X;if(0!==(c&48))return a(b);X|=1;try{if(a)return gg(99,a.bind(null,b))}finally{X=c,ig()}};exports.hydrate=function(a,b,c){if(!rk(b))throw Error(y(200));return tk(null,a,b,!0,c)};\nexports.render=function(a,b,c){if(!rk(b))throw Error(y(200));return tk(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!rk(a))throw Error(y(40));return a._reactRootContainer?(Xj(function(){tk(null,null,a,!1,function(){a._reactRootContainer=null;a[ff]=null})}),!0):!1};exports.unstable_batchedUpdates=Wj;exports.unstable_createPortal=function(a,b){return uk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!rk(c))throw Error(y(200));if(null==a||void 0===a._reactInternals)throw Error(y(38));return tk(a,b,c,!1,d)};exports.version=\"17.0.2\";\n","'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n","/** @license React v17.0.2\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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'use strict';require(\"object-assign\");var f=require(\"react\"),g=60103;exports.Fragment=60107;if(\"function\"===typeof Symbol&&Symbol.for){var h=Symbol.for;g=h(\"react.element\");exports.Fragment=h(\"react.fragment\")}var m=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,n=Object.prototype.hasOwnProperty,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,k){var b,d={},e=null,l=null;void 0!==k&&(e=\"\"+k);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(l=a.ref);for(b in a)n.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:g,type:c,key:e,ref:l,props:d,_owner:m.current}}exports.jsx=q;exports.jsxs=q;\n","/** @license React v17.0.2\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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'use strict';var l=require(\"object-assign\"),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;\nif(\"function\"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w(\"react.element\");p=w(\"react.portal\");exports.Fragment=w(\"react.fragment\");exports.StrictMode=w(\"react.strict_mode\");exports.Profiler=w(\"react.profiler\");q=w(\"react.provider\");r=w(\"react.context\");t=w(\"react.forward_ref\");exports.Suspense=w(\"react.suspense\");u=w(\"react.memo\");v=w(\"react.lazy\")}var x=\"function\"===typeof Symbol&&Symbol.iterator;\nfunction y(a){if(null===a||\"object\"!==typeof a)return null;a=x&&a[x]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function z(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar A={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B={};function C(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}C.prototype.isReactComponent={};C.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(z(85));this.updater.enqueueSetState(this,a,b,\"setState\")};C.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction D(){}D.prototype=C.prototype;function E(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}var F=E.prototype=new D;F.constructor=E;l(F,C.prototype);F.isPureReactComponent=!0;var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};\nfunction J(a,b,c){var e,d={},k=null,h=null;if(null!=b)for(e in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)H.call(b,e)&&!I.hasOwnProperty(e)&&(d[e]=b[e]);var g=arguments.length-2;if(1===g)d.children=c;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];d.children=f}if(a&&a.defaultProps)for(e in g=a.defaultProps,g)void 0===d[e]&&(d[e]=g[e]);return{$$typeof:n,type:a,key:k,ref:h,props:d,_owner:G.current}}\nfunction K(a,b){return{$$typeof:n,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function L(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===n}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var M=/\\/+/g;function N(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction O(a,b,c,e,d){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case n:case p:h=!0}}if(h)return h=a,d=d(h),a=\"\"===e?\".\"+N(h,0):e,Array.isArray(d)?(c=\"\",null!=a&&(c=a.replace(M,\"$&/\")+\"/\"),O(d,b,c,\"\",function(a){return a})):null!=d&&(L(d)&&(d=K(d,c+(!d.key||h&&h.key===d.key?\"\":(\"\"+d.key).replace(M,\"$&/\")+\"/\")+a)),b.push(d)),1;h=0;e=\"\"===e?\".\":e+\":\";if(Array.isArray(a))for(var g=\n0;g<a.length;g++){k=a[g];var f=e+N(k,g);h+=O(k,b,c,f,d)}else if(f=y(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=e+N(k,g++),h+=O(k,b,c,f,d);else if(\"object\"===k)throw b=\"\"+a,Error(z(31,\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b));return h}function P(a,b,c){if(null==a)return a;var e=[],d=0;O(a,e,\"\",\"\",function(a){return b.call(c,a,d++)});return e}\nfunction Q(a){if(-1===a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}var R={current:null};function S(){var a=R.current;if(null===a)throw Error(z(321));return a}var T={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:G,IsSomeRendererActing:{current:!1},assign:l};\nexports.Children={map:P,forEach:function(a,b,c){P(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;P(a,function(){b++});return b},toArray:function(a){return P(a,function(a){return a})||[]},only:function(a){if(!L(a))throw Error(z(143));return a}};exports.Component=C;exports.PureComponent=E;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(z(267,a));var e=l({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=G.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)H.call(b,f)&&!I.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){g=Array(f);for(var m=0;m<f;m++)g[m]=arguments[m+2];e.children=g}return{$$typeof:n,type:a.type,\nkey:d,ref:k,props:e,_owner:h}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:r,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:q,_context:a};return a.Consumer=a};exports.createElement=J;exports.createFactory=function(a){var b=J.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:t,render:a}};exports.isValidElement=L;\nexports.lazy=function(a){return{$$typeof:v,_payload:{_status:-1,_result:a},_init:Q}};exports.memo=function(a,b){return{$$typeof:u,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return S().useCallback(a,b)};exports.useContext=function(a,b){return S().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return S().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return S().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return S().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return S().useMemo(a,b)};exports.useReducer=function(a,b,c){return S().useReducer(a,b,c)};exports.useRef=function(a){return S().useRef(a)};exports.useState=function(a){return S().useState(a)};exports.version=\"17.0.2\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\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// 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'use strict';\n/*<replacement>*/\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n\n for (var key in obj) {\n keys.push(key);\n }\n\n return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nrequire('inherits')(Duplex, Readable);\n\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n\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}\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\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\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}); // the no-half-open enforcer\n\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return; // no more data can be written.\n // But allow more writes to happen in this tick.\n\n process.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\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\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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\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// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\nrequire('inherits')(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\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'use strict';\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*<replacement>*/\n\n\nvar debugUtil = require('util');\n\nvar debug;\n\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/buffer_list');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\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; // Lazy loaded to improve the startup performance.\n\n\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\n\nrequire('inherits')(Readable, Stream);\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\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); // 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\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}\n\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex); // 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\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; // 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\n this.sync = true; // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'end' (and potentially 'finish')\n\n this.autoDestroy = !!options.autoDestroy; // has it been destroyed\n\n this.destroyed = false; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n\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}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options); // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex); // legacy\n\n this.readable = true;\n\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\n Stream.call(this);\n}\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\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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\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.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n\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\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\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\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 } // 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\n\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\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\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n\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\n return er;\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder; // If setEncoding(null), decoder.encoding equals utf8\n\n this._readableState.encoding = this._readableState.decoder.encoding; // Iterate over current buffer to convert already stored Buffers:\n\n var p = this._readableState.buffer.head;\n var content = '';\n\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n\n this._readableState.buffer.clear();\n\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n}; // Don't raise the hwm > 1GB\n\n\nvar MAX_HWM = 0x40000000;\n\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\n return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n\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 } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n; // Don't have enough\n\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n\n return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\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; // 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\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 n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\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 // if we need a readable event, then we need to do some reading.\n\n\n var doRead = state.needReadable;\n debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n } // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n\n\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; // if the length is currently zero, then we *need* a readable event.\n\n if (state.length === 0) state.needReadable = true; // call internal read method\n\n this._read(state.highWaterMark);\n\n state.sync = false; // 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\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\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\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; // If we tried to read() past the EOF, then emit end on the next tick.\n\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n\n if (state.decoder) {\n var chunk = state.decoder.end();\n\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n\n state.ended = true;\n\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\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\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.\n\n\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\n\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\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\n\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\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.\n\n\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\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) // didn't get any data, stop spinning.\n break;\n }\n\n state.readingMore = false;\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.\n\n\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n\n default:\n state.pipes.push(dest);\n break;\n }\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\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\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\n\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n\n function cleanup() {\n debug('cleanup'); // cleanup event handlers once the pipe is broken\n\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; // 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\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n src.on('data', ondata);\n\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n\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\n src.pause();\n }\n } // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n\n\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 } // Make sure our error handler is attached before userland ones.\n\n\n prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n\n dest.once('close', onclose);\n\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n } // tell the dest that it's being piped to\n\n\n dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\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\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n }; // if we're not piping anywhere, then do nothing.\n\n if (state.pipesCount === 0) return this; // just one destination. most common case.\n\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; // got a match.\n\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n } // slow case. multiple pipe destinations.\n\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\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n }\n\n return this;\n } // try to find the right one.\n\n\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}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n\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; // Try start flowing on next tick if stream isn't explicitly paused\n\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\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n\n return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n\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\n return res;\n};\n\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n\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\n return res;\n};\n\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n\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; // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n var state = this._readableState;\n\n if (!state.flowing) {\n debug('resume'); // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n\n state.paused = false;\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n\n if (!state.reading) {\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n\n this._readableState.paused = true;\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n\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.\n\n\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\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); // don't skip over falsy values in objectMode\n\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n\n if (!ret) {\n paused = true;\n stream.pause();\n }\n }); // proxy all the other methods.\n // important when wrapping filters and duplexes.\n\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 } // proxy certain important events.\n\n\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n } // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n\n\n this._read = function (n) {\n debug('wrapped _read', n);\n\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n\n return createReadableStreamAsyncIterator(this);\n };\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}); // exposed for testing purposes only.\n\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}); // 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.\n\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}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length); // Check that we didn't get one last unshift.\n\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n\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\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\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\n return from(Readable, iterable, opts);\n };\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\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// 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'use strict';\n\nmodule.exports = Transform;\n\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;\n\nvar Duplex = require('./_stream_duplex');\n\nrequire('inherits')(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null) // 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\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\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 }; // start out asking for a readable event once data is transformed.\n\n this._readableState.needReadable = true; // 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\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n } // When the writable side finishes, then flush out anything remaining.\n\n\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\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}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\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.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\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\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}; // 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.\n\n\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n\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};\n\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data); // 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\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// 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'use strict';\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n\nvar Buffer = require('buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\n\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;\n\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\n\nrequire('inherits')(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {}; // 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\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // 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\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex); // if _final has been called\n\n this.finalCalled = false; // drain event flag.\n\n this.needDrain = false; // at the start of calling end()\n\n this.ending = false; // when end() has been called, and returned\n\n this.ended = false; // when 'finish' is emitted\n\n this.finished = false; // has it been destroyed\n\n this.destroyed = false; // 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\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode; // 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\n this.defaultEncoding = options.defaultEncoding || 'utf8'; // 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\n this.length = 0; // a flag to see when we're in the middle of a write.\n\n this.writing = false; // when true all writes will be buffered until .uncork() call\n\n this.corked = 0; // 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\n this.sync = true; // 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\n this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n this.onwrite = function (er) {\n onwrite(stream, er);\n }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n this.writecb = null; // the amount that is being written when _write is called.\n\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n\n this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n\n this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n this.errorEmitted = false; // Should close be emitted on destroy. Defaults to true.\n\n this.emitClose = options.emitClose !== false; // Should .destroy() be called after 'finish' (and potentially 'end')\n\n this.autoDestroy = !!options.autoDestroy; // count buffered requests\n\n this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n\n while (current) {\n out.push(current);\n current = current.next;\n }\n\n return out;\n};\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})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\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}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex'); // 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 // 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 // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n\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); // legacy.\n\n this.writable = true;\n\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\n Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END(); // TODO: defer error events consistently everywhere, not just the cb\n\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\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.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n\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\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n\n return true;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\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};\n\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\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};\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});\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n\n return chunk;\n}\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}); // 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.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n if (!ret) state.needDrain = true;\n\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\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\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}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\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); // this can emit finish, and it will always happen\n // after error\n\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); // this can emit finish, but finish must\n // always follow error\n\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\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\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\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} // 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.\n\n\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\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\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n\n state.pendingcb++;\n state.lastBufferedRequest = null;\n\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\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--; // 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\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\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\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n } // ignore unnecessary end() calls.\n\n\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\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});\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n\n if (err) {\n errorOrDestroy(stream, err);\n }\n\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\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}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n\n if (need) {\n prefinish(stream, state);\n\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n\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\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n } // reuse the free corkReq.\n\n\n state.corkedRequestsFree.next = corkReq;\n}\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\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 } // backward compatibility, the user is explicitly\n // managing destroyed\n\n\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\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\nvar finished = require('./end-of-stream');\n\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');\n\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\n\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n\n if (resolve !== null) {\n var data = iter[kStream].read(); // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\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}\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\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\n\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n\n next: function next() {\n var _this = this;\n\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n\n if (error !== null) {\n return Promise.reject(error);\n }\n\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\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 } // 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\n\n var lastPromise = this[kLastPromise];\n var promise;\n\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\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n\n promise = new Promise(this[kHandlePromise]);\n }\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\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\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\n\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n\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\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]; // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n\n iterator[kError] = err;\n return;\n }\n\n var resolve = iterator[kLastResolve];\n\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\n\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\n\nvar _require2 = require('util'),\n inspect = _require2.inspect;\n\nvar custom = inspect && inspect.custom || 'inspect';\n\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\n\nmodule.exports =\n/*#__PURE__*/\nfunction () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\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\n while (p = p.next) {\n ret += s + p.data;\n }\n\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\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n\n return ret;\n } // Consumes a specified amount of bytes or characters from the buffered data.\n\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n\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\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n } // Consumes a specified amount of characters from the buffered data.\n\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\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\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\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Consumes a specified amount of bytes from the buffered data.\n\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\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\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\n break;\n }\n\n ++c;\n }\n\n this.length -= c;\n return ret;\n } // Make sure the linked list only shows the minimal necessary information.\n\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread({}, options, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n\n return BufferList;\n}();","'use strict'; // undocumented cb() API, needed for core, not for public API\n\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\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\n return this;\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\n if (this._readableState) {\n this._readableState.destroyed = true;\n } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\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\n return this;\n}\n\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\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}\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\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}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\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 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}\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'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\n\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n callback.apply(this, args);\n };\n}\n\nfunction noop() {}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\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\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n\n var writableEnded = stream._writableState && stream._writableState.finished;\n\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n\n var onclose = function onclose() {\n var err;\n\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\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\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\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\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}\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'use strict';\n\nvar eos;\n\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}\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;\n\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\n\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\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; // request.destroy just do .end - .abort is what we want\n\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}\n\nfunction call(fn) {\n fn();\n}\n\nfunction pipe(from, to) {\n return from.pipe(to);\n}\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}\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\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\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}\n\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\n\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\n\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n\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\n return Math.floor(hwm);\n } // Default value\n\n\n return state.objectMode ? 16 : 16 * 1024;\n}\n\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\nexports.finished = require('./lib/internal/streams/end-of-stream.js');\nexports.pipeline = require('./lib/internal/streams/pipeline.js');\n","'use strict'\nvar Buffer = require('buffer').Buffer\nvar inherits = require('inherits')\nvar HashBase = require('hash-base')\n\nvar ARRAY16 = new Array(16)\n\nvar zl = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n]\n\nvar zr = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n]\n\nvar sl = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n]\n\nvar sr = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n]\n\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e]\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000]\n\nfunction RIPEMD160 () {\n HashBase.call(this, 64)\n\n // state\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n}\n\ninherits(RIPEMD160, HashBase)\n\nRIPEMD160.prototype._update = function () {\n var words = ARRAY16\n for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4)\n\n var al = this._a | 0\n var bl = this._b | 0\n var cl = this._c | 0\n var dl = this._d | 0\n var el = this._e | 0\n\n var ar = this._a | 0\n var br = this._b | 0\n var cr = this._c | 0\n var dr = this._d | 0\n var er = this._e | 0\n\n // computation\n for (var i = 0; i < 80; i += 1) {\n var tl\n var tr\n if (i < 16) {\n tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i])\n tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i])\n } else if (i < 32) {\n tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i])\n tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i])\n } else if (i < 48) {\n tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i])\n tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i])\n } else if (i < 64) {\n tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i])\n tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i])\n } else { // if (i<80) {\n tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i])\n tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i])\n }\n\n al = el\n el = dl\n dl = rotl(cl, 10)\n cl = bl\n bl = tl\n\n ar = er\n er = dr\n dr = rotl(cr, 10)\n cr = br\n br = tr\n }\n\n // update state\n var t = (this._b + cl + dr) | 0\n this._b = (this._c + dl + er) | 0\n this._c = (this._d + el + ar) | 0\n this._d = (this._e + al + br) | 0\n this._e = (this._a + bl + cr) | 0\n this._a = t\n}\n\nRIPEMD160.prototype._digest = function () {\n // create padding and handle blocks\n this._block[this._blockOffset++] = 0x80\n if (this._blockOffset > 56) {\n this._block.fill(0, this._blockOffset, 64)\n this._update()\n this._blockOffset = 0\n }\n\n this._block.fill(0, this._blockOffset, 56)\n this._block.writeUInt32LE(this._length[0], 56)\n this._block.writeUInt32LE(this._length[1], 60)\n this._update()\n\n // produce result\n var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20)\n buffer.writeInt32LE(this._a, 0)\n buffer.writeInt32LE(this._b, 4)\n buffer.writeInt32LE(this._c, 8)\n buffer.writeInt32LE(this._d, 12)\n buffer.writeInt32LE(this._e, 16)\n return buffer\n}\n\nfunction rotl (x, n) {\n return (x << n) | (x >>> (32 - n))\n}\n\nfunction fn1 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn2 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn3 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn4 (a, b, c, d, e, m, k, s) {\n return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0\n}\n\nfunction fn5 (a, b, c, d, e, m, k, s) {\n return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0\n}\n\nmodule.exports = RIPEMD160\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\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-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","/** @license React v0.20.2\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\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'use strict';var f,g,h,k;if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if(\"undefined\"!==typeof console){var z=\nwindow.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\");\"function\"!==typeof z&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills\")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=\nE};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):D=0<a?Math.floor(1E3/a):5};var F=new MessageChannel,G=F.port2;F.port1.onmessage=function(){if(null!==B){var a=exports.unstable_now();E=a+D;try{B(!0,a)?G.postMessage(null):(A=!1,B=null)}catch(b){throw G.postMessage(null),b;}}else A=!1};f=function(a){B=a;A||(A=!0,G.postMessage(null))};g=function(a,b){C=\nx(function(){a(exports.unstable_now())},b)};h=function(){y(C);C=-1}}function H(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<I(e,b))a[d]=b,a[c]=e,c=d;else break a}}function J(a){a=a[0];return void 0===a?null:a}\nfunction K(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;\nfunction T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}\nfunction V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if(\"function\"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;\nexports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};\nexports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:N++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};\nexports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Nouns = exports.Adjectives = void 0;\r\nexports.Adjectives = [\r\n 'Adorable',\r\n 'Adventurous',\r\n 'Agressive',\r\n 'Alert',\r\n 'Alive',\r\n 'Amused',\r\n 'Angry',\r\n 'Annoyed',\r\n 'Annoying',\r\n 'silent',\r\n 'empty',\r\n 'dry',\r\n 'dark',\r\n 'summer',\r\n 'icy',\r\n 'delicate',\r\n 'quiet',\r\n 'white',\r\n 'cool',\r\n 'spring',\r\n 'winter',\r\n 'patient',\r\n 'twilight',\r\n 'dawn',\r\n 'crimson',\r\n 'wispy',\r\n 'weathered',\r\n 'blue',\r\n 'billowing',\r\n 'broken',\r\n 'cold',\r\n 'damp',\r\n 'falling',\r\n 'frosty',\r\n 'green',\r\n 'long',\r\n 'late',\r\n 'lingering',\r\n 'bold',\r\n 'little',\r\n 'morning',\r\n 'muddy',\r\n 'old',\r\n 'red',\r\n 'rough',\r\n 'still',\r\n 'small',\r\n 'sparkling',\r\n 'throbbing',\r\n 'shy',\r\n 'wandering',\r\n 'withered',\r\n 'wild',\r\n 'black',\r\n 'young',\r\n 'holy',\r\n 'solitary',\r\n 'fragrant',\r\n 'aged',\r\n 'snowy',\r\n 'proud',\r\n 'floral',\r\n 'restless',\r\n 'divine',\r\n 'polished',\r\n 'ancient',\r\n 'purple',\r\n 'lively',\r\n 'nameless',\r\n];\r\nexports.Nouns = [\r\n 'waterfall',\r\n 'river',\r\n 'breeze',\r\n 'moon',\r\n 'rain',\r\n 'wind',\r\n 'sea',\r\n 'morning',\r\n 'snow',\r\n 'lake',\r\n 'sunset',\r\n 'pine',\r\n 'shadow',\r\n 'leaf',\r\n 'dawn',\r\n 'glitter',\r\n 'forest',\r\n 'hill',\r\n 'cloud',\r\n 'meadow',\r\n 'sun',\r\n 'glade',\r\n 'bird',\r\n 'brook',\r\n 'butterfly',\r\n 'bush',\r\n 'dew',\r\n 'dust',\r\n 'field',\r\n 'fire',\r\n 'flower',\r\n 'firefly',\r\n 'feather',\r\n 'grass',\r\n 'haze',\r\n 'mountain',\r\n 'night',\r\n 'pond',\r\n 'darkness',\r\n 'snowflake',\r\n 'silence',\r\n 'sound',\r\n 'sky',\r\n 'shape',\r\n 'surf',\r\n 'thunder',\r\n 'violet',\r\n 'water',\r\n 'wildflower',\r\n 'wave',\r\n 'water',\r\n 'resonance',\r\n 'sun',\r\n 'wood',\r\n 'dream',\r\n 'cherry',\r\n 'tree',\r\n 'fog',\r\n 'frost',\r\n 'voice',\r\n 'paper',\r\n 'frog',\r\n 'smoke',\r\n 'star',\r\n];\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nconst data_1 = require(\"./data\");\r\n/**\r\n * @description generates a random string by concantenating adjectives and nouns\r\n */\r\nconst generate = () => {\r\n const randomeAdjective = data_1.Adjectives[Math.floor(Math.random() * data_1.Adjectives.length)];\r\n const randomNoun = data_1.Nouns[Math.floor(Math.random() * data_1.Nouns.length)];\r\n const randomName = randomeAdjective + ' ' + randomNoun;\r\n return randomName;\r\n};\r\nexports.default = generate;\r\n","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar generator_1 = require(\"./generator\");\r\nObject.defineProperty(exports, \"generate\", { enumerable: true, get: function () { return generator_1.default; } });\r\n","var Buffer = require('safe-buffer').Buffer\n\n// prototype class for hash functions\nfunction Hash (blockSize, finalSize) {\n this._block = Buffer.alloc(blockSize)\n this._finalSize = finalSize\n this._blockSize = blockSize\n this._len = 0\n}\n\nHash.prototype.update = function (data, enc) {\n if (typeof data === 'string') {\n enc = enc || 'utf8'\n data = Buffer.from(data, enc)\n }\n\n var block = this._block\n var blockSize = this._blockSize\n var length = data.length\n var accum = this._len\n\n for (var offset = 0; offset < length;) {\n var assigned = accum % blockSize\n var remainder = Math.min(length - offset, blockSize - assigned)\n\n for (var i = 0; i < remainder; i++) {\n block[assigned + i] = data[offset + i]\n }\n\n accum += remainder\n offset += remainder\n\n if ((accum % blockSize) === 0) {\n this._update(block)\n }\n }\n\n this._len += length\n return this\n}\n\nHash.prototype.digest = function (enc) {\n var rem = this._len % this._blockSize\n\n this._block[rem] = 0x80\n\n // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n this._block.fill(0, rem + 1)\n\n if (rem >= this._finalSize) {\n this._update(this._block)\n this._block.fill(0)\n }\n\n var bits = this._len * 8\n\n // uint32\n if (bits <= 0xffffffff) {\n this._block.writeUInt32BE(bits, this._blockSize - 4)\n\n // uint64\n } else {\n var lowBits = (bits & 0xffffffff) >>> 0\n var highBits = (bits - lowBits) / 0x100000000\n\n this._block.writeUInt32BE(highBits, this._blockSize - 8)\n this._block.writeUInt32BE(lowBits, this._blockSize - 4)\n }\n\n this._update(this._block)\n var hash = this._hash()\n\n return enc ? hash.toString(enc) : hash\n}\n\nHash.prototype._update = function () {\n throw new Error('_update must be implemented by subclass')\n}\n\nmodule.exports = Hash\n","var exports = module.exports = function SHA (algorithm) {\n algorithm = algorithm.toLowerCase()\n\n var Algorithm = exports[algorithm]\n if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')\n\n return new Algorithm()\n}\n\nexports.sha = require('./sha')\nexports.sha1 = require('./sha1')\nexports.sha224 = require('./sha224')\nexports.sha256 = require('./sha256')\nexports.sha384 = require('./sha384')\nexports.sha512 = require('./sha512')\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha, Hash)\n\nSha.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha\n","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar K = [\n 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0\n]\n\nvar W = new Array(80)\n\nfunction Sha1 () {\n this.init()\n this._w = W\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha1, Hash)\n\nSha1.prototype.init = function () {\n this._a = 0x67452301\n this._b = 0xefcdab89\n this._c = 0x98badcfe\n this._d = 0x10325476\n this._e = 0xc3d2e1f0\n\n return this\n}\n\nfunction rotl1 (num) {\n return (num << 1) | (num >>> 31)\n}\n\nfunction rotl5 (num) {\n return (num << 5) | (num >>> 27)\n}\n\nfunction rotl30 (num) {\n return (num << 30) | (num >>> 2)\n}\n\nfunction ft (s, b, c, d) {\n if (s === 0) return (b & c) | ((~b) & d)\n if (s === 2) return (b & c) | (b & d) | (c & d)\n return b ^ c ^ d\n}\n\nSha1.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])\n\n for (var j = 0; j < 80; ++j) {\n var s = ~~(j / 20)\n var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0\n\n e = d\n d = c\n c = rotl30(b)\n b = a\n a = t\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n}\n\nSha1.prototype._hash = function () {\n var H = Buffer.allocUnsafe(20)\n\n H.writeInt32BE(this._a | 0, 0)\n H.writeInt32BE(this._b | 0, 4)\n H.writeInt32BE(this._c | 0, 8)\n H.writeInt32BE(this._d | 0, 12)\n H.writeInt32BE(this._e | 0, 16)\n\n return H\n}\n\nmodule.exports = Sha1\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Sha256 = require('./sha256')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(64)\n\nfunction Sha224 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha224, Sha256)\n\nSha224.prototype.init = function () {\n this._a = 0xc1059ed8\n this._b = 0x367cd507\n this._c = 0x3070dd17\n this._d = 0xf70e5939\n this._e = 0xffc00b31\n this._f = 0x68581511\n this._g = 0x64f98fa7\n this._h = 0xbefa4fa4\n\n return this\n}\n\nSha224.prototype._hash = function () {\n var H = Buffer.allocUnsafe(28)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n\n return H\n}\n\nmodule.exports = Sha224\n","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\n\nvar inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar 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\nvar W = new Array(64)\n\nfunction Sha256 () {\n this.init()\n\n this._w = W // new Array(64)\n\n Hash.call(this, 64, 56)\n}\n\ninherits(Sha256, Hash)\n\nSha256.prototype.init = function () {\n this._a = 0x6a09e667\n this._b = 0xbb67ae85\n this._c = 0x3c6ef372\n this._d = 0xa54ff53a\n this._e = 0x510e527f\n this._f = 0x9b05688c\n this._g = 0x1f83d9ab\n this._h = 0x5be0cd19\n\n return this\n}\n\nfunction ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x) {\n return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)\n}\n\nfunction sigma1 (x) {\n return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)\n}\n\nfunction gamma0 (x) {\n return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)\n}\n\nfunction gamma1 (x) {\n return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)\n}\n\nSha256.prototype._update = function (M) {\n var W = this._w\n\n var a = this._a | 0\n var b = this._b | 0\n var c = this._c | 0\n var d = this._d | 0\n var e = this._e | 0\n var f = this._f | 0\n var g = this._g | 0\n var h = this._h | 0\n\n for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)\n for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0\n\n for (var j = 0; j < 64; ++j) {\n var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0\n var T2 = (sigma0(a) + maj(a, b, c)) | 0\n\n h = g\n g = f\n f = e\n e = (d + T1) | 0\n d = c\n c = b\n b = a\n a = (T1 + T2) | 0\n }\n\n this._a = (a + this._a) | 0\n this._b = (b + this._b) | 0\n this._c = (c + this._c) | 0\n this._d = (d + this._d) | 0\n this._e = (e + this._e) | 0\n this._f = (f + this._f) | 0\n this._g = (g + this._g) | 0\n this._h = (h + this._h) | 0\n}\n\nSha256.prototype._hash = function () {\n var H = Buffer.allocUnsafe(32)\n\n H.writeInt32BE(this._a, 0)\n H.writeInt32BE(this._b, 4)\n H.writeInt32BE(this._c, 8)\n H.writeInt32BE(this._d, 12)\n H.writeInt32BE(this._e, 16)\n H.writeInt32BE(this._f, 20)\n H.writeInt32BE(this._g, 24)\n H.writeInt32BE(this._h, 28)\n\n return H\n}\n\nmodule.exports = Sha256\n","var inherits = require('inherits')\nvar SHA512 = require('./sha512')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar W = new Array(160)\n\nfunction Sha384 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha384, SHA512)\n\nSha384.prototype.init = function () {\n this._ah = 0xcbbb9d5d\n this._bh = 0x629a292a\n this._ch = 0x9159015a\n this._dh = 0x152fecd8\n this._eh = 0x67332667\n this._fh = 0x8eb44a87\n this._gh = 0xdb0c2e0d\n this._hh = 0x47b5481d\n\n this._al = 0xc1059ed8\n this._bl = 0x367cd507\n this._cl = 0x3070dd17\n this._dl = 0xf70e5939\n this._el = 0xffc00b31\n this._fl = 0x68581511\n this._gl = 0x64f98fa7\n this._hl = 0xbefa4fa4\n\n return this\n}\n\nSha384.prototype._hash = function () {\n var H = Buffer.allocUnsafe(48)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n\n return H\n}\n\nmodule.exports = Sha384\n","var inherits = require('inherits')\nvar Hash = require('./hash')\nvar Buffer = require('safe-buffer').Buffer\n\nvar 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\nvar W = new Array(160)\n\nfunction Sha512 () {\n this.init()\n this._w = W\n\n Hash.call(this, 128, 112)\n}\n\ninherits(Sha512, Hash)\n\nSha512.prototype.init = function () {\n this._ah = 0x6a09e667\n this._bh = 0xbb67ae85\n this._ch = 0x3c6ef372\n this._dh = 0xa54ff53a\n this._eh = 0x510e527f\n this._fh = 0x9b05688c\n this._gh = 0x1f83d9ab\n this._hh = 0x5be0cd19\n\n this._al = 0xf3bcc908\n this._bl = 0x84caa73b\n this._cl = 0xfe94f82b\n this._dl = 0x5f1d36f1\n this._el = 0xade682d1\n this._fl = 0x2b3e6c1f\n this._gl = 0xfb41bd6b\n this._hl = 0x137e2179\n\n return this\n}\n\nfunction Ch (x, y, z) {\n return z ^ (x & (y ^ z))\n}\n\nfunction maj (x, y, z) {\n return (x & y) | (z & (x | y))\n}\n\nfunction sigma0 (x, xl) {\n return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)\n}\n\nfunction sigma1 (x, xl) {\n return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)\n}\n\nfunction Gamma0 (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)\n}\n\nfunction Gamma0l (x, xl) {\n return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)\n}\n\nfunction Gamma1 (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)\n}\n\nfunction Gamma1l (x, xl) {\n return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)\n}\n\nfunction getCarry (a, b) {\n return (a >>> 0) < (b >>> 0) ? 1 : 0\n}\n\nSha512.prototype._update = function (M) {\n var W = this._w\n\n var ah = this._ah | 0\n var bh = this._bh | 0\n var ch = this._ch | 0\n var dh = this._dh | 0\n var eh = this._eh | 0\n var fh = this._fh | 0\n var gh = this._gh | 0\n var hh = this._hh | 0\n\n var al = this._al | 0\n var bl = this._bl | 0\n var cl = this._cl | 0\n var dl = this._dl | 0\n var el = this._el | 0\n var fl = this._fl | 0\n var gl = this._gl | 0\n var hl = this._hl | 0\n\n for (var i = 0; i < 32; i += 2) {\n W[i] = M.readInt32BE(i * 4)\n W[i + 1] = M.readInt32BE(i * 4 + 4)\n }\n for (; i < 160; i += 2) {\n var xh = W[i - 15 * 2]\n var xl = W[i - 15 * 2 + 1]\n var gamma0 = Gamma0(xh, xl)\n var gamma0l = Gamma0l(xl, xh)\n\n xh = W[i - 2 * 2]\n xl = W[i - 2 * 2 + 1]\n var gamma1 = Gamma1(xh, xl)\n var gamma1l = Gamma1l(xl, xh)\n\n // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n var Wi7h = W[i - 7 * 2]\n var Wi7l = W[i - 7 * 2 + 1]\n\n var Wi16h = W[i - 16 * 2]\n var Wi16l = W[i - 16 * 2 + 1]\n\n var Wil = (gamma0l + Wi7l) | 0\n var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0\n Wil = (Wil + gamma1l) | 0\n Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0\n Wil = (Wil + Wi16l) | 0\n Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0\n\n W[i] = Wih\n W[i + 1] = Wil\n }\n\n for (var j = 0; j < 160; j += 2) {\n Wih = W[j]\n Wil = W[j + 1]\n\n var majh = maj(ah, bh, ch)\n var majl = maj(al, bl, cl)\n\n var sigma0h = sigma0(ah, al)\n var sigma0l = sigma0(al, ah)\n var sigma1h = sigma1(eh, el)\n var sigma1l = sigma1(el, eh)\n\n // t1 = h + sigma1 + ch + K[j] + W[j]\n var Kih = K[j]\n var Kil = K[j + 1]\n\n var chh = Ch(eh, fh, gh)\n var chl = Ch(el, fl, gl)\n\n var t1l = (hl + sigma1l) | 0\n var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0\n t1l = (t1l + chl) | 0\n t1h = (t1h + chh + getCarry(t1l, chl)) | 0\n t1l = (t1l + Kil) | 0\n t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0\n t1l = (t1l + Wil) | 0\n t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0\n\n // t2 = sigma0 + maj\n var t2l = (sigma0l + majl) | 0\n var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0\n\n hh = gh\n hl = gl\n gh = fh\n gl = fl\n fh = eh\n fl = el\n el = (dl + t1l) | 0\n eh = (dh + t1h + getCarry(el, dl)) | 0\n dh = ch\n dl = cl\n ch = bh\n cl = bl\n bh = ah\n bl = al\n al = (t1l + t2l) | 0\n ah = (t1h + t2h + getCarry(al, t1l)) | 0\n }\n\n this._al = (this._al + al) | 0\n this._bl = (this._bl + bl) | 0\n this._cl = (this._cl + cl) | 0\n this._dl = (this._dl + dl) | 0\n this._el = (this._el + el) | 0\n this._fl = (this._fl + fl) | 0\n this._gl = (this._gl + gl) | 0\n this._hl = (this._hl + hl) | 0\n\n this._ah = (this._ah + ah + getCarry(this._al, al)) | 0\n this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0\n this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0\n this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0\n this._eh = (this._eh + eh + getCarry(this._el, el)) | 0\n this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0\n this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0\n this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0\n}\n\nSha512.prototype._hash = function () {\n var H = Buffer.allocUnsafe(64)\n\n function writeInt64BE (h, l, offset) {\n H.writeInt32BE(h, offset)\n H.writeInt32BE(l, offset + 4)\n }\n\n writeInt64BE(this._ah, this._al, 0)\n writeInt64BE(this._bh, this._bl, 8)\n writeInt64BE(this._ch, this._cl, 16)\n writeInt64BE(this._dh, this._dl, 24)\n writeInt64BE(this._eh, this._el, 32)\n writeInt64BE(this._fh, this._fl, 40)\n writeInt64BE(this._gh, this._gl, 48)\n writeInt64BE(this._hh, this._hl, 56)\n\n return H\n}\n\nmodule.exports = Sha512\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/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\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}","/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","\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","export const NOISE_MSG_MAX_LENGTH_BYTES = 65535\nexport const NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG = NOISE_MSG_MAX_LENGTH_BYTES - 16\n\nexport const DUMP_SESSION_KEYS = process.env.DUMP_SESSION_KEYS\n","import { IHandshake } from './@types/handshake-interface'\nimport { NOISE_MSG_MAX_LENGTH_BYTES, NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG } from './constants'\n\ninterface IReturnEncryptionWrapper {\n (source: Iterable<Uint8Array>): AsyncIterableIterator<Uint8Array>\n}\n\n// Returns generator that encrypts payload from the user\nexport function encryptStream (handshake: IHandshake): IReturnEncryptionWrapper {\n return async function * (source) {\n for await (const chunk of source) {\n for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG) {\n let end = i + NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG\n if (end > chunk.length) {\n end = chunk.length\n }\n\n const data = handshake.encrypt(chunk.slice(i, end), handshake.session)\n yield data\n }\n }\n }\n}\n\n// Decrypt received payload to the user\nexport function decryptStream (handshake: IHandshake): IReturnEncryptionWrapper {\n return async function * (source) {\n for await (const chunk of source) {\n for (let i = 0; i < chunk.length; i += NOISE_MSG_MAX_LENGTH_BYTES) {\n let end = i + NOISE_MSG_MAX_LENGTH_BYTES\n if (end > chunk.length) {\n end = chunk.length\n }\n\n const { plaintext: decrypted, valid } = await handshake.decrypt(chunk.slice(i, end), handshake.session)\n if (!valid) {\n throw new Error('Failed to validate decrypted chunk')\n }\n yield decrypted\n }\n }\n }\n}\n","import { bytes } from './@types/basic'\nimport { MessageBuffer } from './@types/handshake'\nimport BufferList from 'bl/BufferList'\nimport { concat as uint8ArrayConcat } from 'uint8arrays/concat'\n\nconst allocUnsafe = (len: number): Uint8Array => {\n if (globalThis.Buffer) {\n return globalThis.Buffer.allocUnsafe(len)\n }\n\n return new Uint8Array(len)\n}\n\nexport const uint16BEEncode = (value: number, target: Uint8Array, offset: number): Uint8Array => {\n target = target || allocUnsafe(2)\n new DataView(target.buffer, target.byteOffset, target.byteLength).setUint16(offset, value, false)\n return target\n}\nuint16BEEncode.bytes = 2\n\nexport const uint16BEDecode = (data: Uint8Array | BufferList): number => {\n if (data.length < 2) throw RangeError('Could not decode int16BE')\n\n if (data instanceof BufferList) {\n return data.readUInt16BE(0)\n }\n\n return new DataView(data.buffer, data.byteOffset, data.byteLength).getUint16(0, false)\n}\nuint16BEDecode.bytes = 2\n\n// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1)\n\nexport function encode0 (message: MessageBuffer): bytes {\n return uint8ArrayConcat([message.ne, message.ciphertext], message.ne.length + message.ciphertext.length)\n}\n\nexport function encode1 (message: MessageBuffer): bytes {\n return uint8ArrayConcat([message.ne, message.ns, message.ciphertext], message.ne.length + message.ns.length + message.ciphertext.length)\n}\n\nexport function encode2 (message: MessageBuffer): bytes {\n return uint8ArrayConcat([message.ns, message.ciphertext], message.ns.length + message.ciphertext.length)\n}\n\nexport function decode0 (input: bytes): MessageBuffer {\n if (input.length < 32) {\n throw new Error('Cannot decode stage 0 MessageBuffer: length less than 32 bytes.')\n }\n\n return {\n ne: input.slice(0, 32),\n ciphertext: input.slice(32, input.length),\n ns: new Uint8Array(0)\n }\n}\n\nexport function decode1 (input: bytes): MessageBuffer {\n if (input.length < 80) {\n throw new Error('Cannot decode stage 1 MessageBuffer: length less than 80 bytes.')\n }\n\n return {\n ne: input.slice(0, 32),\n ns: input.slice(32, 80),\n ciphertext: input.slice(80, input.length)\n }\n}\n\nexport function decode2 (input: bytes): MessageBuffer {\n if (input.length < 48) {\n throw new Error('Cannot decode stage 2 MessageBuffer: length less than 48 bytes.')\n }\n\n return {\n ne: new Uint8Array(0),\n ns: input.slice(0, 48),\n ciphertext: input.slice(48, input.length)\n }\n}\n","import BufferList from 'bl'\n\nexport class FailedIKError extends Error {\n public initialMsg: string|BufferList|Uint8Array\n\n constructor (initialMsg: string|BufferList|Uint8Array, message?: string) {\n super(message)\n\n this.initialMsg = initialMsg\n this.name = 'FailedIKhandshake'\n }\n}\n","import { WrappedConnection } from './noise'\nimport { IK } from './handshakes/ik'\nimport { CipherState, NoiseSession } from './@types/handshake'\nimport { bytes, bytes32 } from './@types/basic'\nimport { KeyPair } from './@types/libp2p'\nimport { IHandshake } from './@types/handshake-interface'\nimport { decode0, decode1, encode0, encode1 } from './encoder'\nimport { decodePayload, getPeerIdFromPayload, verifySignedPayload } from './utils'\nimport { FailedIKError } from './errors'\nimport {\n logger,\n logLocalStaticKeys,\n logRemoteStaticKey,\n logLocalEphemeralKeys,\n logRemoteEphemeralKey,\n logCipherState\n} from './logger'\nimport PeerId from 'peer-id'\n\nexport class IKHandshake implements IHandshake {\n public isInitiator: boolean\n public session: NoiseSession\n public remotePeer!: PeerId\n public remoteEarlyData: Uint8Array\n\n private readonly payload: bytes\n private readonly prologue: bytes32\n private readonly staticKeypair: KeyPair\n private readonly connection: WrappedConnection\n private readonly ik: IK\n\n constructor (\n isInitiator: boolean,\n payload: bytes,\n prologue: bytes32,\n staticKeypair: KeyPair,\n connection: WrappedConnection,\n remoteStaticKey: bytes,\n remotePeer?: PeerId,\n handshake?: IK\n ) {\n this.isInitiator = isInitiator\n this.payload = payload\n this.prologue = prologue\n this.staticKeypair = staticKeypair\n this.connection = connection\n if (remotePeer) {\n this.remotePeer = remotePeer\n }\n this.ik = handshake ?? new IK()\n this.session = this.ik.initSession(this.isInitiator, this.prologue, this.staticKeypair, remoteStaticKey)\n this.remoteEarlyData = new Uint8Array()\n }\n\n public async stage0 (): Promise<void> {\n logLocalStaticKeys(this.session.hs.s)\n logRemoteStaticKey(this.session.hs.rs)\n if (this.isInitiator) {\n logger('IK Stage 0 - Initiator sending message...')\n const messageBuffer = this.ik.sendMessage(this.session, this.payload)\n this.connection.writeLP(encode1(messageBuffer))\n logger('IK Stage 0 - Initiator sent message.')\n logLocalEphemeralKeys(this.session.hs.e)\n } else {\n logger('IK Stage 0 - Responder receiving message...')\n const receivedMsg = await this.connection.readLP()\n try {\n const receivedMessageBuffer = decode1(receivedMsg.slice())\n const { plaintext, valid } = this.ik.recvMessage(this.session, receivedMessageBuffer)\n if (!valid) {\n throw new Error('ik handshake stage 0 decryption validation fail')\n }\n logger('IK Stage 0 - Responder got message, going to verify payload.')\n const decodedPayload = await decodePayload(plaintext)\n this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload)\n await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer)\n this.setRemoteEarlyData(decodedPayload.data)\n logger('IK Stage 0 - Responder successfully verified payload!')\n logRemoteEphemeralKey(this.session.hs.re)\n } catch (e: any) {\n const err = e as Error\n logger('Responder breaking up with IK handshake in stage 0.')\n\n throw new FailedIKError(receivedMsg, `Error occurred while verifying initiator's signed payload: ${err.message}`)\n }\n }\n }\n\n public async stage1 (): Promise<void> {\n if (this.isInitiator) {\n logger('IK Stage 1 - Initiator receiving message...')\n const receivedMsg = (await this.connection.readLP()).slice()\n const receivedMessageBuffer = decode0(receivedMsg)\n const { plaintext, valid } = this.ik.recvMessage(this.session, receivedMessageBuffer)\n logger('IK Stage 1 - Initiator got message, going to verify payload.')\n try {\n if (!valid) {\n throw new Error('ik stage 1 decryption validation fail')\n }\n const decodedPayload = await decodePayload(plaintext)\n this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload)\n await verifySignedPayload(receivedMessageBuffer.ns.slice(0, 32), decodedPayload, this.remotePeer)\n this.setRemoteEarlyData(decodedPayload.data)\n logger('IK Stage 1 - Initiator successfully verified payload!')\n logRemoteEphemeralKey(this.session.hs.re)\n } catch (e: any) {\n const err = e as Error\n logger('Initiator breaking up with IK handshake in stage 1.')\n throw new FailedIKError(receivedMsg, `Error occurred while verifying responder's signed payload: ${err.message}`)\n }\n } else {\n logger('IK Stage 1 - Responder sending message...')\n const messageBuffer = this.ik.sendMessage(this.session, this.payload)\n this.connection.writeLP(encode0(messageBuffer))\n logger('IK Stage 1 - Responder sent message...')\n logLocalEphemeralKeys(this.session.hs.e)\n }\n logCipherState(this.session)\n }\n\n public decrypt (ciphertext: Uint8Array, session: NoiseSession): {plaintext: bytes, valid: boolean} {\n const cs = this.getCS(session, false)\n return this.ik.decryptWithAd(cs, new Uint8Array(0), ciphertext)\n }\n\n public encrypt (plaintext: Uint8Array, session: NoiseSession): bytes {\n const cs = this.getCS(session)\n return this.ik.encryptWithAd(cs, new Uint8Array(0), plaintext)\n }\n\n public getLocalEphemeralKeys (): KeyPair {\n if (!this.session.hs.e) {\n throw new Error('Ephemeral keys do not exist.')\n }\n\n return this.session.hs.e\n }\n\n private getCS (session: NoiseSession, encryption = true): CipherState {\n if (!session.cs1 || !session.cs2) {\n throw new Error('Handshake not completed properly, cipher state does not exist.')\n }\n\n if (this.isInitiator) {\n return encryption ? session.cs1 : session.cs2\n } else {\n return encryption ? session.cs2 : session.cs1\n }\n }\n\n private setRemoteEarlyData (data: Uint8Array|null|undefined): void {\n if (data) {\n this.remoteEarlyData = data\n }\n }\n}\n","import { XXHandshake } from './handshake-xx'\nimport { XX } from './handshakes/xx'\nimport { KeyPair } from './@types/libp2p'\nimport { bytes, bytes32 } from './@types/basic'\nimport { decodePayload, getPeerIdFromPayload, verifySignedPayload } from './utils'\nimport { logger, logLocalEphemeralKeys, logRemoteEphemeralKey, logRemoteStaticKey } from './logger'\nimport { WrappedConnection } from './noise'\nimport { decode0, decode1 } from './encoder'\nimport PeerId from 'peer-id'\n\nexport class XXFallbackHandshake extends XXHandshake {\n private readonly ephemeralKeys?: KeyPair\n private readonly initialMsg: bytes\n\n constructor (\n isInitiator: boolean,\n payload: bytes,\n prologue: bytes32,\n staticKeypair: KeyPair,\n connection: WrappedConnection,\n initialMsg: bytes,\n remotePeer?: PeerId,\n ephemeralKeys?: KeyPair,\n handshake?: XX\n ) {\n super(isInitiator, payload, prologue, staticKeypair, connection, remotePeer, handshake)\n if (ephemeralKeys) {\n this.ephemeralKeys = ephemeralKeys\n }\n this.initialMsg = initialMsg\n }\n\n // stage 0\n // eslint-disable-next-line require-await\n public async propose (): Promise<void> {\n if (this.isInitiator) {\n this.xx.sendMessage(this.session, new Uint8Array(0), this.ephemeralKeys)\n logger('XX Fallback Stage 0 - Initialized state as the first message was sent by initiator.')\n logLocalEphemeralKeys(this.session.hs.e)\n } else {\n logger('XX Fallback Stage 0 - Responder decoding initial msg from IK.')\n const receivedMessageBuffer = decode0(this.initialMsg)\n const { valid } = this.xx.recvMessage(this.session, {\n ne: receivedMessageBuffer.ne,\n ns: new Uint8Array(0),\n ciphertext: new Uint8Array(0)\n })\n if (!valid) {\n throw new Error('xx fallback stage 0 decryption validation fail')\n }\n logger('XX Fallback Stage 0 - Responder used received message from IK.')\n logRemoteEphemeralKey(this.session.hs.re)\n }\n }\n\n // stage 1\n public async exchange (): Promise<void> {\n if (this.isInitiator) {\n const receivedMessageBuffer = decode1(this.initialMsg)\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer)\n if (!valid) {\n throw new Error('xx fallback stage 1 decryption validation fail')\n }\n logger('XX Fallback Stage 1 - Initiator used received message from IK.')\n logRemoteEphemeralKey(this.session.hs.re)\n logRemoteStaticKey(this.session.hs.rs)\n\n logger(\"Initiator going to check remote's signature...\")\n try {\n const decodedPayload = await decodePayload(plaintext)\n this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload)\n await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer)\n this.setRemoteEarlyData(decodedPayload.data)\n } catch (e: any) {\n const err = e as Error\n throw new Error(`Error occurred while verifying signed payload from responder: ${err.message}`)\n }\n logger('All good with the signature!')\n } else {\n logger('XX Fallback Stage 1 - Responder start')\n await super.exchange()\n logger('XX Fallback Stage 1 - Responder end')\n }\n }\n}\n","import { XX } from './handshakes/xx'\nimport { KeyPair } from './@types/libp2p'\nimport { bytes, bytes32 } from './@types/basic'\nimport { CipherState, NoiseSession } from './@types/handshake'\nimport { IHandshake } from './@types/handshake-interface'\nimport {\n decodePayload,\n getPeerIdFromPayload,\n verifySignedPayload\n} from './utils'\nimport {\n logger,\n logLocalStaticKeys,\n logLocalEphemeralKeys,\n logRemoteEphemeralKey,\n logRemoteStaticKey,\n logCipherState\n} from './logger'\nimport { decode0, decode1, decode2, encode0, encode1, encode2 } from './encoder'\nimport { WrappedConnection } from './noise'\nimport PeerId from 'peer-id'\n\nexport class XXHandshake implements IHandshake {\n public isInitiator: boolean\n public session: NoiseSession\n public remotePeer!: PeerId\n public remoteEarlyData: bytes\n\n protected payload: bytes\n protected connection: WrappedConnection\n protected xx: XX\n protected staticKeypair: KeyPair\n\n private readonly prologue: bytes32\n\n constructor (\n isInitiator: boolean,\n payload: bytes,\n prologue: bytes32,\n staticKeypair: KeyPair,\n connection: WrappedConnection,\n remotePeer?: PeerId,\n handshake?: XX\n ) {\n this.isInitiator = isInitiator\n this.payload = payload\n this.prologue = prologue\n this.staticKeypair = staticKeypair\n this.connection = connection\n if (remotePeer) {\n this.remotePeer = remotePeer\n }\n this.xx = handshake ?? new XX()\n this.session = this.xx.initSession(this.isInitiator, this.prologue, this.staticKeypair)\n this.remoteEarlyData = new Uint8Array(0)\n }\n\n // stage 0\n public async propose (): Promise<void> {\n logLocalStaticKeys(this.session.hs.s)\n if (this.isInitiator) {\n logger('Stage 0 - Initiator starting to send first message.')\n const messageBuffer = this.xx.sendMessage(this.session, new Uint8Array(0))\n this.connection.writeLP(encode0(messageBuffer))\n logger('Stage 0 - Initiator finished sending first message.')\n logLocalEphemeralKeys(this.session.hs.e)\n } else {\n logger('Stage 0 - Responder waiting to receive first message...')\n const receivedMessageBuffer = decode0((await this.connection.readLP()).slice())\n const { valid } = this.xx.recvMessage(this.session, receivedMessageBuffer)\n if (!valid) {\n throw new Error('xx handshake stage 0 validation fail')\n }\n logger('Stage 0 - Responder received first message.')\n logRemoteEphemeralKey(this.session.hs.re)\n }\n }\n\n // stage 1\n public async exchange (): Promise<void> {\n if (this.isInitiator) {\n logger('Stage 1 - Initiator waiting to receive first message from responder...')\n const receivedMessageBuffer = decode1((await this.connection.readLP()).slice())\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer)\n if (!valid) {\n throw new Error('xx handshake stage 1 validation fail')\n }\n logger('Stage 1 - Initiator received the message.')\n logRemoteEphemeralKey(this.session.hs.re)\n logRemoteStaticKey(this.session.hs.rs)\n\n logger(\"Initiator going to check remote's signature...\")\n try {\n const decodedPayload = await decodePayload(plaintext)\n this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload)\n this.remotePeer = await verifySignedPayload(receivedMessageBuffer.ns, decodedPayload, this.remotePeer)\n this.setRemoteEarlyData(decodedPayload.data)\n } catch (e: any) {\n const err = e as Error\n throw new Error(`Error occurred while verifying signed payload: ${err.message}`)\n }\n logger('All good with the signature!')\n } else {\n logger('Stage 1 - Responder sending out first message with signed payload and static key.')\n const messageBuffer = this.xx.sendMessage(this.session, this.payload)\n this.connection.writeLP(encode1(messageBuffer))\n logger('Stage 1 - Responder sent the second handshake message with signed payload.')\n logLocalEphemeralKeys(this.session.hs.e)\n }\n }\n\n // stage 2\n public async finish (): Promise<void> {\n if (this.isInitiator) {\n logger('Stage 2 - Initiator sending third handshake message.')\n const messageBuffer = this.xx.sendMessage(this.session, this.payload)\n this.connection.writeLP(encode2(messageBuffer))\n logger('Stage 2 - Initiator sent message with signed payload.')\n } else {\n logger('Stage 2 - Responder waiting for third handshake message...')\n const receivedMessageBuffer = decode2((await this.connection.readLP()).slice())\n const { plaintext, valid } = this.xx.recvMessage(this.session, receivedMessageBuffer)\n if (!valid) {\n throw new Error('xx handshake stage 2 validation fail')\n }\n logger('Stage 2 - Responder received the message, finished handshake.')\n\n try {\n const decodedPayload = await decodePayload(plaintext)\n this.remotePeer = this.remotePeer || await getPeerIdFromPayload(decodedPayload)\n await verifySignedPayload(this.session.hs.rs, decodedPayload, this.remotePeer)\n this.setRemoteEarlyData(decodedPayload.data)\n } catch (e: any) {\n const err = e as Error\n throw new Error(`Error occurred while verifying signed payload: ${err.message}`)\n }\n }\n logCipherState(this.session)\n }\n\n public encrypt (plaintext: Uint8Array, session: NoiseSession): bytes {\n const cs = this.getCS(session)\n\n return this.xx.encryptWithAd(cs, new Uint8Array(0), plaintext)\n }\n\n public decrypt (ciphertext: Uint8Array, session: NoiseSession): {plaintext: bytes, valid: boolean} {\n const cs = this.getCS(session, false)\n\n return this.xx.decryptWithAd(cs, new Uint8Array(0), ciphertext)\n }\n\n public getRemoteStaticKey (): bytes {\n return this.session.hs.rs\n }\n\n private getCS (session: NoiseSession, encryption = true): CipherState {\n if (!session.cs1 || !session.cs2) {\n throw new Error('Handshake not completed properly, cipher state does not exist.')\n }\n\n if (this.isInitiator) {\n return encryption ? session.cs1 : session.cs2\n } else {\n return encryption ? session.cs2 : session.cs1\n }\n }\n\n protected setRemoteEarlyData (data: Uint8Array|null|undefined): void {\n if (data) {\n this.remoteEarlyData = data\n }\n }\n}\n","import * as x25519 from '@stablelib/x25519'\nimport * as SHA256 from '@stablelib/sha256'\nimport { ChaCha20Poly1305 } from '@stablelib/chacha20poly1305'\nimport { equals as uint8ArrayEquals } from 'uint8arrays/equals'\nimport { concat as uint8ArrayConcat } from 'uint8arrays/concat'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays'\n\nimport { bytes, bytes32, uint64 } from '../@types/basic'\nimport { CipherState, MessageBuffer, SymmetricState } from '../@types/handshake'\nimport { getHkdf } from '../utils'\nimport { logger } from '../logger'\n\nexport const MIN_NONCE = 0\n// For performance reasons, the nonce is represented as a JS `number`\n// JS `number` can only safely represent integers up to 2 ** 53 - 1\n// This is a slight deviation from the noise spec, which describes the max nonce as 2 ** 64 - 2\n// The effect is that this implementation will need a new handshake to be performed after fewer messages are exchanged than other implementations with full uint64 nonces.\n// 2 ** 53 - 1 is still a large number of messages, so the practical effect of this is negligible.\nexport const MAX_NONCE = Number.MAX_SAFE_INTEGER\n\nconst ERR_MAX_NONCE = 'Cipherstate has reached maximum n, a new handshake must be performed'\n\nexport abstract class AbstractHandshake {\n public encryptWithAd (cs: CipherState, ad: Uint8Array, plaintext: Uint8Array): bytes {\n const e = this.encrypt(cs.k, cs.n, ad, plaintext)\n this.setNonce(cs, this.incrementNonce(cs.n))\n\n return e\n }\n\n public decryptWithAd (cs: CipherState, ad: Uint8Array, ciphertext: Uint8Array): {plaintext: bytes, valid: boolean} {\n const { plaintext, valid } = this.decrypt(cs.k, cs.n, ad, ciphertext)\n this.setNonce(cs, this.incrementNonce(cs.n))\n\n return { plaintext, valid }\n }\n\n // Cipher state related\n protected hasKey (cs: CipherState): boolean {\n return !this.isEmptyKey(cs.k)\n }\n\n protected setNonce (cs: CipherState, nonce: uint64): void {\n cs.n = nonce\n }\n\n protected createEmptyKey (): bytes32 {\n return new Uint8Array(32)\n }\n\n protected isEmptyKey (k: bytes32): boolean {\n const emptyKey = this.createEmptyKey()\n return uint8ArrayEquals(emptyKey, k)\n }\n\n protected incrementNonce (n: uint64): uint64 {\n return n + 1\n }\n\n protected nonceToBytes (n: uint64): bytes {\n // Even though we're treating the nonce as 8 bytes, RFC7539 specifies 12 bytes for a nonce.\n const nonce = new Uint8Array(12)\n new DataView(nonce.buffer, nonce.byteOffset, nonce.byteLength).setUint32(4, n, true)\n\n return nonce\n }\n\n protected encrypt (k: bytes32, n: uint64, ad: Uint8Array, plaintext: Uint8Array): bytes {\n if (n > MAX_NONCE) {\n throw new Error(ERR_MAX_NONCE)\n }\n const nonce = this.nonceToBytes(n)\n const ctx = new ChaCha20Poly1305(k)\n return ctx.seal(nonce, plaintext, ad)\n }\n\n protected encryptAndHash (ss: SymmetricState, plaintext: bytes): bytes {\n let ciphertext\n if (this.hasKey(ss.cs)) {\n ciphertext = this.encryptWithAd(ss.cs, ss.h, plaintext)\n } else {\n ciphertext = plaintext\n }\n\n this.mixHash(ss, ciphertext)\n return ciphertext\n }\n\n protected decrypt (k: bytes32, n: uint64, ad: bytes, ciphertext: bytes): {plaintext: bytes, valid: boolean} {\n if (n > MAX_NONCE) {\n throw new Error(ERR_MAX_NONCE)\n }\n const nonce = this.nonceToBytes(n)\n const ctx = new ChaCha20Poly1305(k)\n const encryptedMessage = ctx.open(\n nonce,\n ciphertext,\n ad\n )\n if (encryptedMessage) {\n return {\n plaintext: encryptedMessage,\n valid: true\n }\n } else {\n return {\n plaintext: new Uint8Array(0),\n valid: false\n }\n }\n }\n\n protected decryptAndHash (ss: SymmetricState, ciphertext: bytes): {plaintext: bytes, valid: boolean} {\n let plaintext: bytes; let valid = true\n if (this.hasKey(ss.cs)) {\n ({ plaintext, valid } = this.decryptWithAd(ss.cs, ss.h, ciphertext))\n } else {\n plaintext = ciphertext\n }\n\n this.mixHash(ss, ciphertext)\n return { plaintext, valid }\n }\n\n protected dh (privateKey: bytes32, publicKey: bytes32): bytes32 {\n try {\n const derivedU8 = x25519.sharedKey(privateKey, publicKey)\n\n if (derivedU8.length === 32) {\n return derivedU8\n }\n\n return derivedU8.slice(0, 32)\n } catch (e: any) {\n logger(e.message)\n return new Uint8Array(32)\n }\n }\n\n protected mixHash (ss: SymmetricState, data: bytes): void {\n ss.h = this.getHash(ss.h, data)\n }\n\n protected getHash (a: Uint8Array, b: Uint8Array): bytes32 {\n const u = SHA256.hash(uint8ArrayConcat([a, b], a.length + b.length))\n return u\n }\n\n protected mixKey (ss: SymmetricState, ikm: bytes32): void {\n const [ck, tempK] = getHkdf(ss.ck, ikm)\n ss.cs = this.initializeKey(tempK)\n ss.ck = ck\n }\n\n protected initializeKey (k: bytes32): CipherState {\n const n = MIN_NONCE\n return { k, n }\n }\n\n // Symmetric state related\n\n protected initializeSymmetric (protocolName: string): SymmetricState {\n const protocolNameBytes = uint8ArrayFromString(protocolName, 'utf-8')\n const h = this.hashProtocolName(protocolNameBytes)\n\n const ck = h\n const key = this.createEmptyKey()\n const cs: CipherState = this.initializeKey(key)\n\n return { cs, ck, h }\n }\n\n protected hashProtocolName (protocolName: Uint8Array): bytes32 {\n if (protocolName.length <= 32) {\n const h = new Uint8Array(32)\n h.set(protocolName)\n return h\n } else {\n return this.getHash(protocolName, new Uint8Array(0))\n }\n }\n\n protected split (ss: SymmetricState): {cs1: CipherState, cs2: CipherState} {\n const [tempk1, tempk2] = getHkdf(ss.ck, new Uint8Array(0))\n const cs1 = this.initializeKey(tempk1)\n const cs2 = this.initializeKey(tempk2)\n\n return { cs1, cs2 }\n }\n\n protected writeMessageRegular (cs: CipherState, payload: bytes): MessageBuffer {\n const ciphertext = this.encryptWithAd(cs, new Uint8Array(0), payload)\n const ne = this.createEmptyKey()\n const ns = new Uint8Array(0)\n\n return { ne, ns, ciphertext }\n }\n\n protected readMessageRegular (cs: CipherState, message: MessageBuffer): {plaintext: bytes, valid: boolean} {\n return this.decryptWithAd(cs, new Uint8Array(0), message.ciphertext)\n }\n}\n","import { CipherState, HandshakeState, MessageBuffer, NoiseSession } from '../@types/handshake'\nimport { bytes, bytes32 } from '../@types/basic'\nimport { generateKeypair, isValidPublicKey } from '../utils'\nimport { AbstractHandshake } from './abstract-handshake'\nimport { KeyPair } from '../@types/libp2p'\n\nexport class IK extends AbstractHandshake {\n public initSession (initiator: boolean, prologue: bytes32, s: KeyPair, rs: bytes32): NoiseSession {\n const psk = this.createEmptyKey()\n\n let hs\n if (initiator) {\n hs = this.initializeInitiator(prologue, s, rs, psk)\n } else {\n hs = this.initializeResponder(prologue, s, rs, psk)\n }\n\n return {\n hs,\n i: initiator,\n mc: 0\n }\n }\n\n public sendMessage (session: NoiseSession, message: bytes): MessageBuffer {\n let messageBuffer: MessageBuffer\n if (session.mc === 0) {\n messageBuffer = this.writeMessageA(session.hs, message)\n } else if (session.mc === 1) {\n const { messageBuffer: mb, h, cs1, cs2 } = this.writeMessageB(session.hs, message)\n messageBuffer = mb\n session.h = h\n session.cs1 = cs1\n session.cs2 = cs2\n } else if (session.mc > 1) {\n if (session.i) {\n if (!session.cs1) {\n throw new Error('CS1 (cipher state) is not defined')\n }\n\n messageBuffer = this.writeMessageRegular(session.cs1, message)\n } else {\n if (!session.cs2) {\n throw new Error('CS2 (cipher state) is not defined')\n }\n\n messageBuffer = this.writeMessageRegular(session.cs2, message)\n }\n } else {\n throw new Error('Session invalid.')\n }\n\n session.mc++\n return messageBuffer\n }\n\n public recvMessage (session: NoiseSession, message: MessageBuffer): {plaintext: bytes, valid: boolean} {\n let plaintext = new Uint8Array(0); let valid = false\n if (session.mc === 0) {\n ({ plaintext, valid } = this.readMessageA(session.hs, message))\n }\n if (session.mc === 1) {\n const { plaintext: pt, valid: v, h, cs1, cs2 } = this.readMessageB(session.hs, message)\n plaintext = pt\n valid = v\n session.h = h\n session.cs1 = cs1\n session.cs2 = cs2\n }\n session.mc++\n return { plaintext, valid }\n }\n\n private writeMessageA (hs: HandshakeState, payload: bytes): MessageBuffer {\n hs.e = generateKeypair()\n const ne = hs.e.publicKey\n this.mixHash(hs.ss, ne)\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs))\n const spk = hs.s.publicKey\n const ns = this.encryptAndHash(hs.ss, spk)\n\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.rs))\n const ciphertext = this.encryptAndHash(hs.ss, payload)\n\n return { ne, ns, ciphertext }\n }\n\n private writeMessageB (hs: HandshakeState, payload: bytes): { messageBuffer: MessageBuffer, cs1: CipherState, cs2: CipherState, h: bytes} {\n hs.e = generateKeypair()\n const ne = hs.e.publicKey\n this.mixHash(hs.ss, ne)\n\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re))\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs))\n const ciphertext = this.encryptAndHash(hs.ss, payload)\n const ns = this.createEmptyKey()\n const messageBuffer: MessageBuffer = { ne, ns, ciphertext }\n const { cs1, cs2 } = this.split(hs.ss)\n\n return { messageBuffer, cs1, cs2, h: hs.ss.h }\n }\n\n private readMessageA (hs: HandshakeState, message: MessageBuffer): {plaintext: bytes, valid: boolean} {\n if (isValidPublicKey(message.ne)) {\n hs.re = message.ne\n }\n\n this.mixHash(hs.ss, hs.re)\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re))\n const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns)\n if (valid1 && ns.length === 32 && isValidPublicKey(ns)) {\n hs.rs = ns\n }\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.rs))\n const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext)\n return { plaintext, valid: (valid1 && valid2) }\n }\n\n private readMessageB (hs: HandshakeState, message: MessageBuffer): {h: bytes, plaintext: bytes, valid: boolean, cs1: CipherState, cs2: CipherState} {\n if (isValidPublicKey(message.ne)) {\n hs.re = message.ne\n }\n\n this.mixHash(hs.ss, hs.re)\n if (!hs.e) {\n throw new Error('Handshake state should contain ephemeral key by now.')\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re))\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re))\n const { plaintext, valid } = this.decryptAndHash(hs.ss, message.ciphertext)\n const { cs1, cs2 } = this.split(hs.ss)\n\n return { h: hs.ss.h, valid, plaintext, cs1, cs2 }\n }\n\n private initializeInitiator (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState {\n const name = 'Noise_IK_25519_ChaChaPoly_SHA256'\n const ss = this.initializeSymmetric(name)\n this.mixHash(ss, prologue)\n this.mixHash(ss, rs)\n const re = new Uint8Array(32)\n\n return { ss, s, rs, re, psk }\n }\n\n private initializeResponder (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState {\n const name = 'Noise_IK_25519_ChaChaPoly_SHA256'\n const ss = this.initializeSymmetric(name)\n this.mixHash(ss, prologue)\n this.mixHash(ss, s.publicKey)\n const re = new Uint8Array(32)\n\n return { ss, s, rs, re, psk }\n }\n}\n","import { bytes32, bytes } from '../@types/basic'\nimport { KeyPair } from '../@types/libp2p'\nimport { generateKeypair, isValidPublicKey } from '../utils'\nimport { CipherState, HandshakeState, MessageBuffer, NoiseSession } from '../@types/handshake'\nimport { AbstractHandshake } from './abstract-handshake'\n\nexport class XX extends AbstractHandshake {\n private initializeInitiator (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState {\n const name = 'Noise_XX_25519_ChaChaPoly_SHA256'\n const ss = this.initializeSymmetric(name)\n this.mixHash(ss, prologue)\n const re = new Uint8Array(32)\n\n return { ss, s, rs, psk, re }\n }\n\n private initializeResponder (prologue: bytes32, s: KeyPair, rs: bytes32, psk: bytes32): HandshakeState {\n const name = 'Noise_XX_25519_ChaChaPoly_SHA256'\n const ss = this.initializeSymmetric(name)\n this.mixHash(ss, prologue)\n const re = new Uint8Array(32)\n\n return { ss, s, rs, psk, re }\n }\n\n private writeMessageA (hs: HandshakeState, payload: bytes, e?: KeyPair): MessageBuffer {\n const ns = new Uint8Array(0)\n\n if (e !== undefined) {\n hs.e = e\n } else {\n hs.e = generateKeypair()\n }\n\n const ne = hs.e.publicKey\n\n this.mixHash(hs.ss, ne)\n const ciphertext = this.encryptAndHash(hs.ss, payload)\n\n return { ne, ns, ciphertext }\n }\n\n private writeMessageB (hs: HandshakeState, payload: bytes): MessageBuffer {\n hs.e = generateKeypair()\n const ne = hs.e.publicKey\n this.mixHash(hs.ss, ne)\n\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re))\n const spk = hs.s.publicKey\n const ns = this.encryptAndHash(hs.ss, spk)\n\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re))\n const ciphertext = this.encryptAndHash(hs.ss, payload)\n\n return { ne, ns, ciphertext }\n }\n\n private writeMessageC (hs: HandshakeState, payload: bytes): { messageBuffer: MessageBuffer, cs1: CipherState, cs2: CipherState, h: bytes } {\n const spk = hs.s.publicKey\n const ns = this.encryptAndHash(hs.ss, spk)\n this.mixKey(hs.ss, this.dh(hs.s.privateKey, hs.re))\n const ciphertext = this.encryptAndHash(hs.ss, payload)\n const ne = this.createEmptyKey()\n const messageBuffer: MessageBuffer = { ne, ns, ciphertext }\n const { cs1, cs2 } = this.split(hs.ss)\n\n return { h: hs.ss.h, messageBuffer, cs1, cs2 }\n }\n\n private readMessageA (hs: HandshakeState, message: MessageBuffer): {plaintext: bytes, valid: boolean} {\n if (isValidPublicKey(message.ne)) {\n hs.re = message.ne\n }\n\n this.mixHash(hs.ss, hs.re)\n return this.decryptAndHash(hs.ss, message.ciphertext)\n }\n\n private readMessageB (hs: HandshakeState, message: MessageBuffer): {plaintext: bytes, valid: boolean} {\n if (isValidPublicKey(message.ne)) {\n hs.re = message.ne\n }\n\n this.mixHash(hs.ss, hs.re)\n if (!hs.e) {\n throw new Error('Handshake state `e` param is missing.')\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.re))\n const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns)\n if (valid1 && ns.length === 32 && isValidPublicKey(ns)) {\n hs.rs = ns\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs))\n const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext)\n return { plaintext, valid: (valid1 && valid2) }\n }\n\n private readMessageC (hs: HandshakeState, message: MessageBuffer): {h: bytes, plaintext: bytes, valid: boolean, cs1: CipherState, cs2: CipherState} {\n const { plaintext: ns, valid: valid1 } = this.decryptAndHash(hs.ss, message.ns)\n if (valid1 && ns.length === 32 && isValidPublicKey(ns)) {\n hs.rs = ns\n }\n if (!hs.e) {\n throw new Error('Handshake state `e` param is missing.')\n }\n this.mixKey(hs.ss, this.dh(hs.e.privateKey, hs.rs))\n\n const { plaintext, valid: valid2 } = this.decryptAndHash(hs.ss, message.ciphertext)\n const { cs1, cs2 } = this.split(hs.ss)\n\n return { h: hs.ss.h, plaintext, valid: (valid1 && valid2), cs1, cs2 }\n }\n\n public initSession (initiator: boolean, prologue: bytes32, s: KeyPair): NoiseSession {\n const psk = this.createEmptyKey()\n const rs = new Uint8Array(32) // no static key yet\n let hs\n\n if (initiator) {\n hs = this.initializeInitiator(prologue, s, rs, psk)\n } else {\n hs = this.initializeResponder(prologue, s, rs, psk)\n }\n\n return {\n hs,\n i: initiator,\n mc: 0\n }\n }\n\n public sendMessage (session: NoiseSession, message: bytes, ephemeral?: KeyPair): MessageBuffer {\n let messageBuffer: MessageBuffer\n if (session.mc === 0) {\n messageBuffer = this.writeMessageA(session.hs, message, ephemeral)\n } else if (session.mc === 1) {\n messageBuffer = this.writeMessageB(session.hs, message)\n } else if (session.mc === 2) {\n const { h, messageBuffer: resultingBuffer, cs1, cs2 } = this.writeMessageC(session.hs, message)\n messageBuffer = resultingBuffer\n session.h = h\n session.cs1 = cs1\n session.cs2 = cs2\n } else if (session.mc > 2) {\n if (session.i) {\n if (!session.cs1) {\n throw new Error('CS1 (cipher state) is not defined')\n }\n\n messageBuffer = this.writeMessageRegular(session.cs1, message)\n } else {\n if (!session.cs2) {\n throw new Error('CS2 (cipher state) is not defined')\n }\n\n messageBuffer = this.writeMessageRegular(session.cs2, message)\n }\n } else {\n throw new Error('Session invalid.')\n }\n\n session.mc++\n return messageBuffer\n }\n\n public recvMessage (session: NoiseSession, message: MessageBuffer): {plaintext: bytes, valid: boolean} {\n let plaintext: bytes = new Uint8Array(0)\n let valid = false\n if (session.mc === 0) {\n ({ plaintext, valid } = this.readMessageA(session.hs, message))\n } else if (session.mc === 1) {\n ({ plaintext, valid } = this.readMessageB(session.hs, message))\n } else if (session.mc === 2) {\n const { h, plaintext: resultingPlaintext, valid: resultingValid, cs1, cs2 } = this.readMessageC(session.hs, message)\n plaintext = resultingPlaintext\n valid = resultingValid\n session.h = h\n session.cs1 = cs1\n session.cs2 = cs2\n }\n session.mc++\n return { plaintext, valid }\n }\n}\n","import { bytes32 } from './@types/basic'\nimport PeerId from 'peer-id'\n\n/**\n * Storage for static keys of previously connected peers.\n */\nclass Keycache {\n private readonly storage = new Map<Uint8Array, bytes32>()\n\n public store (peerId: PeerId, key: bytes32): void {\n this.storage.set(peerId.id, key)\n }\n\n public load (peerId?: PeerId): bytes32 | null {\n if (!peerId) {\n return null\n }\n return this.storage.get(peerId.id) ?? null\n }\n\n public resetStorage (): void {\n this.storage.clear()\n }\n}\n\nconst KeyCache = new Keycache()\nexport {\n KeyCache\n}\n","import debug from 'debug'\nimport { DUMP_SESSION_KEYS } from './constants'\nimport { KeyPair } from './@types/libp2p'\nimport { NoiseSession } from './@types/handshake'\nimport { toString as uint8ArrayToString } from 'uint8arrays/to-string'\n\nexport const logger = debug('libp2p:noise')\n\nlet keyLogger\nif (DUMP_SESSION_KEYS) {\n keyLogger = logger\n} else {\n keyLogger = () => { /* do nothing */ }\n}\n\nexport function logLocalStaticKeys (s: KeyPair): void {\n keyLogger(`LOCAL_STATIC_PUBLIC_KEY ${uint8ArrayToString(s.publicKey, 'hex')}`)\n keyLogger(`LOCAL_STATIC_PRIVATE_KEY ${uint8ArrayToString(s.privateKey, 'hex')}`)\n}\n\nexport function logLocalEphemeralKeys (e: KeyPair|undefined): void {\n if (e) {\n keyLogger(`LOCAL_PUBLIC_EPHEMERAL_KEY ${uint8ArrayToString(e.publicKey, 'hex')}`)\n keyLogger(`LOCAL_PRIVATE_EPHEMERAL_KEY ${uint8ArrayToString(e.privateKey, 'hex')}`)\n } else {\n keyLogger('Missing local ephemeral keys.')\n }\n}\n\nexport function logRemoteStaticKey (rs: Uint8Array): void {\n keyLogger(`REMOTE_STATIC_PUBLIC_KEY ${uint8ArrayToString(rs, 'hex')}`)\n}\n\nexport function logRemoteEphemeralKey (re: Uint8Array): void {\n keyLogger(`REMOTE_EPHEMERAL_PUBLIC_KEY ${uint8ArrayToString(re, 'hex')}`)\n}\n\nexport function logCipherState (session: NoiseSession): void {\n if (session.cs1 && session.cs2) {\n keyLogger(`CIPHER_STATE_1 ${session.cs1.n} ${uint8ArrayToString(session.cs1.k, 'hex')}`)\n keyLogger(`CIPHER_STATE_2 ${session.cs2.n} ${uint8ArrayToString(session.cs2.k, 'hex')}`)\n } else {\n keyLogger('Missing cipher state.')\n }\n}\n","import * as x25519 from '@stablelib/x25519'\nimport Wrap from 'it-pb-rpc'\nimport DuplexPair from 'it-pair/duplex'\nimport ensureBuffer from 'it-buffer'\nimport pipe from 'it-pipe'\nimport { encode, decode } from 'it-length-prefixed'\n\nimport { XXHandshake } from './handshake-xx'\nimport { IKHandshake } from './handshake-ik'\nimport { XXFallbackHandshake } from './handshake-xx-fallback'\nimport { generateKeypair, getPayload } from './utils'\nimport { uint16BEDecode, uint16BEEncode } from './encoder'\nimport { decryptStream, encryptStream } from './crypto'\nimport { bytes } from './@types/basic'\nimport { INoiseConnection, KeyPair, SecureOutbound } from './@types/libp2p'\nimport { Duplex } from 'it-pair'\nimport { IHandshake } from './@types/handshake-interface'\nimport { KeyCache } from './keycache'\nimport { logger } from './logger'\nimport PeerId from 'peer-id'\nimport { NOISE_MSG_MAX_LENGTH_BYTES } from './constants'\n\nexport type WrappedConnection = ReturnType<typeof Wrap>\n\ninterface HandshakeParams {\n connection: WrappedConnection\n isInitiator: boolean\n localPeer: PeerId\n remotePeer?: PeerId\n}\n\nexport class Noise implements INoiseConnection {\n public protocol = '/noise'\n\n private readonly prologue = new Uint8Array(0)\n private readonly staticKeys: KeyPair\n private readonly earlyData?: bytes\n private readonly useNoisePipes: boolean\n\n /**\n *\n * @param {bytes} staticNoiseKey - x25519 private key, reuse for faster handshakes\n * @param {bytes} earlyData\n */\n constructor (staticNoiseKey?: bytes, earlyData?: bytes) {\n this.earlyData = earlyData ?? new Uint8Array(0)\n // disabled until properly specked\n this.useNoisePipes = false\n\n if (staticNoiseKey) {\n // accepts x25519 private key of length 32\n const keyPair = x25519.generateKeyPairFromSeed(staticNoiseKey)\n this.staticKeys = {\n privateKey: keyPair.secretKey,\n publicKey: keyPair.publicKey\n }\n } else {\n this.staticKeys = generateKeypair()\n }\n }\n\n /**\n * Encrypt outgoing data to the remote party (handshake as initiator)\n *\n * @param {PeerId} localPeer - PeerId of the receiving peer\n * @param {any} connection - streaming iterable duplex that will be encrypted\n * @param {PeerId} remotePeer - PeerId of the remote peer. Used to validate the integrity of the remote peer.\n * @returns {Promise<SecureOutbound>}\n */\n public async secureOutbound (localPeer: PeerId, connection: any, remotePeer: PeerId): Promise<SecureOutbound> {\n const wrappedConnection = Wrap(\n connection,\n {\n lengthEncoder: uint16BEEncode,\n lengthDecoder: uint16BEDecode,\n maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES\n }\n )\n const handshake = await this.performHandshake({\n connection: wrappedConnection,\n isInitiator: true,\n localPeer,\n remotePeer\n })\n const conn = await this.createSecureConnection(wrappedConnection, handshake)\n\n return {\n conn,\n remoteEarlyData: handshake.remoteEarlyData,\n remotePeer: handshake.remotePeer\n }\n }\n\n /**\n * Decrypt incoming data (handshake as responder).\n *\n * @param {PeerId} localPeer - PeerId of the receiving peer.\n * @param {any} connection - streaming iterable duplex that will be encryption.\n * @param {PeerId} remotePeer - optional PeerId of the initiating peer, if known. This may only exist during transport upgrades.\n * @returns {Promise<SecureOutbound>}\n */\n public async secureInbound (localPeer: PeerId, connection: any, remotePeer?: PeerId): Promise<SecureOutbound> {\n const wrappedConnection = Wrap(\n connection,\n {\n lengthEncoder: uint16BEEncode,\n lengthDecoder: uint16BEDecode,\n maxDataLength: NOISE_MSG_MAX_LENGTH_BYTES\n }\n )\n const handshake = await this.performHandshake({\n connection: wrappedConnection,\n isInitiator: false,\n localPeer,\n remotePeer\n })\n const conn = await this.createSecureConnection(wrappedConnection, handshake)\n\n return {\n conn,\n remoteEarlyData: handshake.remoteEarlyData,\n remotePeer: handshake.remotePeer\n }\n }\n\n /**\n * If Noise pipes supported, tries IK handshake first with XX as fallback if it fails.\n * If noise pipes disabled or remote peer static key is unknown, use XX.\n *\n * @param {HandshakeParams} params\n */\n private async performHandshake (params: HandshakeParams): Promise<IHandshake> {\n const payload = await getPayload(params.localPeer, this.staticKeys.publicKey, this.earlyData)\n let tryIK = this.useNoisePipes\n if (params.isInitiator && KeyCache.load(params.remotePeer) === null) {\n // if we are initiator and remote static key is unknown, don't try IK\n tryIK = false\n }\n // Try IK if acting as responder or initiator that has remote's static key.\n if (tryIK) {\n // Try IK first\n const { remotePeer, connection, isInitiator } = params\n const ikHandshake = new IKHandshake(\n isInitiator,\n payload,\n this.prologue,\n this.staticKeys,\n connection,\n // safe to cast as we did checks\n KeyCache.load(params.remotePeer) ?? new Uint8Array(32),\n remotePeer as PeerId\n )\n\n try {\n return await this.performIKHandshake(ikHandshake)\n } catch (e: any) {\n // IK failed, go to XX fallback\n let ephemeralKeys\n if (params.isInitiator) {\n ephemeralKeys = ikHandshake.getLocalEphemeralKeys()\n }\n return await this.performXXFallbackHandshake(params, payload, e.initialMsg, ephemeralKeys)\n }\n } else {\n // run XX handshake\n return await this.performXXHandshake(params, payload)\n }\n }\n\n private async performXXFallbackHandshake (\n params: HandshakeParams,\n payload: bytes,\n initialMsg: bytes,\n ephemeralKeys?: KeyPair\n ): Promise<XXFallbackHandshake> {\n const { isInitiator, remotePeer, connection } = params\n const handshake =\n new XXFallbackHandshake(isInitiator, payload, this.prologue, this.staticKeys, connection, initialMsg, remotePeer, ephemeralKeys)\n\n try {\n await handshake.propose()\n await handshake.exchange()\n await handshake.finish()\n } catch (e: any) {\n logger(e)\n const err = e as Error\n throw new Error(`Error occurred during XX Fallback handshake: ${err.message}`)\n }\n\n return handshake\n }\n\n private async performXXHandshake (\n params: HandshakeParams,\n payload: bytes\n ): Promise<XXHandshake> {\n const { isInitiator, remotePeer, connection } = params\n const handshake = new XXHandshake(isInitiator, payload, this.prologue, this.staticKeys, connection, remotePeer)\n\n try {\n await handshake.propose()\n await handshake.exchange()\n await handshake.finish()\n\n if (this.useNoisePipes && handshake.remotePeer) {\n KeyCache.store(handshake.remotePeer, handshake.getRemoteStaticKey())\n }\n } catch (e: any) {\n const err = e as Error\n throw new Error(`Error occurred during XX handshake: ${err.message}`)\n }\n\n return handshake\n }\n\n private async performIKHandshake (\n handshake: IKHandshake\n ): Promise<IKHandshake> {\n await handshake.stage0()\n await handshake.stage1()\n\n return handshake\n }\n\n private async createSecureConnection (\n connection: WrappedConnection,\n handshake: IHandshake\n ): Promise<Duplex> {\n // Create encryption box/unbox wrapper\n const [secure, user] = DuplexPair()\n const network = connection.unwrap()\n\n await pipe(\n secure, // write to wrapper\n ensureBuffer, // ensure any type of data is converted to buffer\n encryptStream(handshake), // data is encrypted\n encode({ lengthEncoder: uint16BEEncode }), // prefix with message length\n network, // send to the remote peer\n decode({ lengthDecoder: uint16BEDecode }), // read message length prefix\n ensureBuffer, // ensure any type of data is converted to buffer\n decryptStream(handshake), // decrypt the incoming data\n secure // pipe to the wrapper\n )\n\n return user\n }\n}\n","/*eslint-disable block-scoped-var, id-length, no-control-regex, no-magic-numbers, no-prototype-builtins, no-redeclare, no-shadow, no-var, sort-vars*/\n(function(global, factory) { /* global define, require, module */\n\n /* AMD */ if (typeof define === 'function' && define.amd)\n define([\"protobufjs/minimal\"], factory);\n\n /* CommonJS */ else if (typeof require === 'function' && typeof module === 'object' && module && module.exports)\n module.exports = factory(require(\"protobufjs/minimal\"));\n\n})(this, function($protobuf) {\n \"use strict\";\n\n // Common aliases\n var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n \n // Exported root namespace\n var $root = $protobuf.roots[\"libp2p-noise\"] || ($protobuf.roots[\"libp2p-noise\"] = {});\n \n $root.pb = (function() {\n \n /**\n * Namespace pb.\n * @exports pb\n * @namespace\n */\n var pb = {};\n \n pb.NoiseHandshakePayload = (function() {\n \n /**\n * Properties of a NoiseHandshakePayload.\n * @memberof pb\n * @interface INoiseHandshakePayload\n * @property {Uint8Array|null} [identityKey] NoiseHandshakePayload identityKey\n * @property {Uint8Array|null} [identitySig] NoiseHandshakePayload identitySig\n * @property {Uint8Array|null} [data] NoiseHandshakePayload data\n */\n \n /**\n * Constructs a new NoiseHandshakePayload.\n * @memberof pb\n * @classdesc Represents a NoiseHandshakePayload.\n * @implements INoiseHandshakePayload\n * @constructor\n * @param {pb.INoiseHandshakePayload=} [properties] Properties to set\n */\n function NoiseHandshakePayload(properties) {\n if (properties)\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\n if (properties[keys[i]] != null)\n this[keys[i]] = properties[keys[i]];\n }\n \n /**\n * NoiseHandshakePayload identityKey.\n * @member {Uint8Array} identityKey\n * @memberof pb.NoiseHandshakePayload\n * @instance\n */\n NoiseHandshakePayload.prototype.identityKey = $util.newBuffer([]);\n \n /**\n * NoiseHandshakePayload identitySig.\n * @member {Uint8Array} identitySig\n * @memberof pb.NoiseHandshakePayload\n * @instance\n */\n NoiseHandshakePayload.prototype.identitySig = $util.newBuffer([]);\n \n /**\n * NoiseHandshakePayload data.\n * @member {Uint8Array} data\n * @memberof pb.NoiseHandshakePayload\n * @instance\n */\n NoiseHandshakePayload.prototype.data = $util.newBuffer([]);\n \n /**\n * Creates a new NoiseHandshakePayload instance using the specified properties.\n * @function create\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {pb.INoiseHandshakePayload=} [properties] Properties to set\n * @returns {pb.NoiseHandshakePayload} NoiseHandshakePayload instance\n */\n NoiseHandshakePayload.create = function create(properties) {\n return new NoiseHandshakePayload(properties);\n };\n \n /**\n * Encodes the specified NoiseHandshakePayload message. Does not implicitly {@link pb.NoiseHandshakePayload.verify|verify} messages.\n * @function encode\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {pb.INoiseHandshakePayload} message NoiseHandshakePayload message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n NoiseHandshakePayload.encode = function encode(message, writer) {\n if (!writer)\n writer = $Writer.create();\n if (message.identityKey != null && Object.hasOwnProperty.call(message, \"identityKey\"))\n writer.uint32(/* id 1, wireType 2 =*/10).bytes(message.identityKey);\n if (message.identitySig != null && Object.hasOwnProperty.call(message, \"identitySig\"))\n writer.uint32(/* id 2, wireType 2 =*/18).bytes(message.identitySig);\n if (message.data != null && Object.hasOwnProperty.call(message, \"data\"))\n writer.uint32(/* id 3, wireType 2 =*/26).bytes(message.data);\n return writer;\n };\n \n /**\n * Encodes the specified NoiseHandshakePayload message, length delimited. Does not implicitly {@link pb.NoiseHandshakePayload.verify|verify} messages.\n * @function encodeDelimited\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {pb.INoiseHandshakePayload} message NoiseHandshakePayload message or plain object to encode\n * @param {$protobuf.Writer} [writer] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n NoiseHandshakePayload.encodeDelimited = function encodeDelimited(message, writer) {\n return this.encode(message, writer).ldelim();\n };\n \n /**\n * Decodes a NoiseHandshakePayload message from the specified reader or buffer.\n * @function decode\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @param {number} [length] Message length if known beforehand\n * @returns {pb.NoiseHandshakePayload} NoiseHandshakePayload\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n NoiseHandshakePayload.decode = function decode(reader, length) {\n if (!(reader instanceof $Reader))\n reader = $Reader.create(reader);\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.pb.NoiseHandshakePayload();\n while (reader.pos < end) {\n var tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.identityKey = reader.bytes();\n break;\n case 2:\n message.identitySig = reader.bytes();\n break;\n case 3:\n message.data = reader.bytes();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n };\n \n /**\n * Decodes a NoiseHandshakePayload message from the specified reader or buffer, length delimited.\n * @function decodeDelimited\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from\n * @returns {pb.NoiseHandshakePayload} NoiseHandshakePayload\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n NoiseHandshakePayload.decodeDelimited = function decodeDelimited(reader) {\n if (!(reader instanceof $Reader))\n reader = new $Reader(reader);\n return this.decode(reader, reader.uint32());\n };\n \n /**\n * Verifies a NoiseHandshakePayload message.\n * @function verify\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {Object.<string,*>} message Plain object to verify\n * @returns {string|null} `null` if valid, otherwise the reason why it is not\n */\n NoiseHandshakePayload.verify = function verify(message) {\n if (typeof message !== \"object\" || message === null)\n return \"object expected\";\n if (message.identityKey != null && message.hasOwnProperty(\"identityKey\"))\n if (!(message.identityKey && typeof message.identityKey.length === \"number\" || $util.isString(message.identityKey)))\n return \"identityKey: buffer expected\";\n if (message.identitySig != null && message.hasOwnProperty(\"identitySig\"))\n if (!(message.identitySig && typeof message.identitySig.length === \"number\" || $util.isString(message.identitySig)))\n return \"identitySig: buffer expected\";\n if (message.data != null && message.hasOwnProperty(\"data\"))\n if (!(message.data && typeof message.data.length === \"number\" || $util.isString(message.data)))\n return \"data: buffer expected\";\n return null;\n };\n \n /**\n * Creates a NoiseHandshakePayload message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {Object.<string,*>} object Plain object\n * @returns {pb.NoiseHandshakePayload} NoiseHandshakePayload\n */\n NoiseHandshakePayload.fromObject = function fromObject(object) {\n if (object instanceof $root.pb.NoiseHandshakePayload)\n return object;\n var message = new $root.pb.NoiseHandshakePayload();\n if (object.identityKey != null)\n if (typeof object.identityKey === \"string\")\n $util.base64.decode(object.identityKey, message.identityKey = $util.newBuffer($util.base64.length(object.identityKey)), 0);\n else if (object.identityKey.length)\n message.identityKey = object.identityKey;\n if (object.identitySig != null)\n if (typeof object.identitySig === \"string\")\n $util.base64.decode(object.identitySig, message.identitySig = $util.newBuffer($util.base64.length(object.identitySig)), 0);\n else if (object.identitySig.length)\n message.identitySig = object.identitySig;\n if (object.data != null)\n if (typeof object.data === \"string\")\n $util.base64.decode(object.data, message.data = $util.newBuffer($util.base64.length(object.data)), 0);\n else if (object.data.length)\n message.data = object.data;\n return message;\n };\n \n /**\n * Creates a plain object from a NoiseHandshakePayload message. Also converts values to other types if specified.\n * @function toObject\n * @memberof pb.NoiseHandshakePayload\n * @static\n * @param {pb.NoiseHandshakePayload} message NoiseHandshakePayload\n * @param {$protobuf.IConversionOptions} [options] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n NoiseHandshakePayload.toObject = function toObject(message, options) {\n if (!options)\n options = {};\n var object = {};\n if (options.defaults) {\n if (options.bytes === String)\n object.identityKey = \"\";\n else {\n object.identityKey = [];\n if (options.bytes !== Array)\n object.identityKey = $util.newBuffer(object.identityKey);\n }\n if (options.bytes === String)\n object.identitySig = \"\";\n else {\n object.identitySig = [];\n if (options.bytes !== Array)\n object.identitySig = $util.newBuffer(object.identitySig);\n }\n if (options.bytes === String)\n object.data = \"\";\n else {\n object.data = [];\n if (options.bytes !== Array)\n object.data = $util.newBuffer(object.data);\n }\n }\n if (message.identityKey != null && message.hasOwnProperty(\"identityKey\"))\n object.identityKey = options.bytes === String ? $util.base64.encode(message.identityKey, 0, message.identityKey.length) : options.bytes === Array ? Array.prototype.slice.call(message.identityKey) : message.identityKey;\n if (message.identitySig != null && message.hasOwnProperty(\"identitySig\"))\n object.identitySig = options.bytes === String ? $util.base64.encode(message.identitySig, 0, message.identitySig.length) : options.bytes === Array ? Array.prototype.slice.call(message.identitySig) : message.identitySig;\n if (message.data != null && message.hasOwnProperty(\"data\"))\n object.data = options.bytes === String ? $util.base64.encode(message.data, 0, message.data.length) : options.bytes === Array ? Array.prototype.slice.call(message.data) : message.data;\n return object;\n };\n \n /**\n * Converts this NoiseHandshakePayload to JSON.\n * @function toJSON\n * @memberof pb.NoiseHandshakePayload\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n NoiseHandshakePayload.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return NoiseHandshakePayload;\n })();\n \n return pb;\n })();\n\n return $root;\n});\n","import { HKDF } from '@stablelib/hkdf'\nimport { SHA256 } from '@stablelib/sha256'\nimport * as x25519 from '@stablelib/x25519'\nimport PeerId from 'peer-id'\nimport { KeyPair } from './@types/libp2p'\nimport { bytes, bytes32 } from './@types/basic'\nimport { Hkdf, INoisePayload } from './@types/handshake'\nimport { pb } from './proto/payload'\nimport { equals as uint8ArrayEquals } from 'uint8arrays/equals'\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'\nimport { concat as uint8ArrayConcat } from 'uint8arrays/concat'\n\nconst NoiseHandshakePayloadProto = pb.NoiseHandshakePayload\n\nexport function generateKeypair (): KeyPair {\n const keypair = x25519.generateKeyPair()\n\n return {\n publicKey: keypair.publicKey,\n privateKey: keypair.secretKey\n }\n}\n\nexport async function getPayload (\n localPeer: PeerId,\n staticPublicKey: bytes,\n earlyData?: bytes\n): Promise<bytes> {\n const signedPayload = await signPayload(localPeer, getHandshakePayload(staticPublicKey))\n const earlyDataPayload = earlyData ?? new Uint8Array(0)\n\n return createHandshakePayload(\n localPeer.marshalPubKey(),\n signedPayload,\n earlyDataPayload\n )\n}\n\nexport function createHandshakePayload (\n libp2pPublicKey: Uint8Array,\n signedPayload: Uint8Array,\n earlyData?: Uint8Array\n): bytes {\n const payloadInit = NoiseHandshakePayloadProto.create({\n identityKey: libp2pPublicKey,\n identitySig: signedPayload,\n data: earlyData ?? null\n })\n\n return NoiseHandshakePayloadProto.encode(payloadInit).finish()\n}\n\nexport async function signPayload (peerId: PeerId, payload: bytes): Promise<bytes> {\n return await peerId.privKey.sign(payload)\n}\n\nexport async function getPeerIdFromPayload (payload: pb.INoiseHandshakePayload): Promise<PeerId> {\n return await PeerId.createFromPubKey(payload.identityKey as Uint8Array)\n}\n\nexport function decodePayload (payload: bytes|Uint8Array): pb.INoiseHandshakePayload {\n return NoiseHandshakePayloadProto.toObject(\n NoiseHandshakePayloadProto.decode(payload)\n ) as INoisePayload\n}\n\nexport function getHandshakePayload (publicKey: bytes): bytes {\n const prefix = uint8ArrayFromString('noise-libp2p-static-key:')\n return uint8ArrayConcat([prefix, publicKey], prefix.length + publicKey.length)\n}\n\nasync function isValidPeerId (peerId: Uint8Array, publicKeyProtobuf: bytes): Promise<boolean> {\n const generatedPeerId = await PeerId.createFromPubKey(publicKeyProtobuf)\n return uint8ArrayEquals(generatedPeerId.id, peerId)\n}\n\n/**\n * Verifies signed payload, throws on any irregularities.\n *\n * @param {bytes} noiseStaticKey - owner's noise static key\n * @param {bytes} payload - decoded payload\n * @param {PeerId} remotePeer - owner's libp2p peer ID\n * @returns {Promise<PeerId>} - peer ID of payload owner\n */\nexport async function verifySignedPayload (\n noiseStaticKey: bytes,\n payload: pb.INoiseHandshakePayload,\n remotePeer: PeerId\n): Promise<PeerId> {\n const identityKey = payload.identityKey as Uint8Array\n if (!(await isValidPeerId(remotePeer.id, identityKey))) {\n throw new Error(\"Peer ID doesn't match libp2p public key.\")\n }\n const generatedPayload = getHandshakePayload(noiseStaticKey)\n // Unmarshaling from PublicKey protobuf\n const peerId = await PeerId.createFromPubKey(identityKey)\n // TODO remove this after libp2p-crypto ships proper types\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (!payload.identitySig || !peerId.pubKey.verify(generatedPayload, payload.identitySig)) {\n throw new Error(\"Static key doesn't match to peer that signed payload!\")\n }\n return peerId\n}\n\nexport function getHkdf (ck: bytes32, ikm: Uint8Array): Hkdf {\n const hkdf = new HKDF(SHA256, ikm, ck)\n const okmU8Array = hkdf.expand(96)\n const okm = okmU8Array\n\n const k1 = okm.slice(0, 32)\n const k2 = okm.slice(32, 64)\n const k3 = okm.slice(64, 96)\n\n return [k1, k2, k3]\n}\n\nexport function isValidPublicKey (pk: bytes): boolean {\n if (!(pk instanceof Uint8Array)) {\n return false\n }\n\n if (pk.length !== 32) {\n return false\n }\n\n return true\n}\n","\"use strict\";\n\nlet _permanentCensorErrors = false;\nlet _censorErrors = false;\n\nconst LogLevels: { [ name: string ]: number } = { debug: 1, \"default\": 2, info: 2, warning: 3, error: 4, off: 5 };\nlet _logLevel = LogLevels[\"default\"];\n\nimport { version } from \"./_version\";\n\nlet _globalLogger: Logger = null;\n\nfunction _checkNormalize(): string {\n try {\n const missing: Array<string> = [ ];\n\n // Make sure all forms of normalization are supported\n [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].forEach((form) => {\n try {\n if (\"test\".normalize(form) !== \"test\") {\n throw new Error(\"bad normalize\");\n };\n } catch(error) {\n missing.push(form);\n }\n });\n\n if (missing.length) {\n throw new Error(\"missing \" + missing.join(\", \"));\n }\n\n if (String.fromCharCode(0xe9).normalize(\"NFD\") !== String.fromCharCode(0x65, 0x0301)) {\n throw new Error(\"broken implementation\")\n }\n } catch (error) {\n return error.message;\n }\n\n return null;\n}\n\nconst _normalizeError = _checkNormalize();\n\nexport enum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n WARNING = \"WARNING\",\n ERROR = \"ERROR\",\n OFF = \"OFF\"\n}\n\n\nexport enum ErrorCode {\n\n ///////////////////\n // Generic Errors\n\n // Unknown Error\n UNKNOWN_ERROR = \"UNKNOWN_ERROR\",\n\n // Not Implemented\n NOT_IMPLEMENTED = \"NOT_IMPLEMENTED\",\n\n // Unsupported Operation\n // - operation\n UNSUPPORTED_OPERATION = \"UNSUPPORTED_OPERATION\",\n\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\n // - event (\"noNetwork\" is not re-thrown in provider.ready; otherwise thrown)\n NETWORK_ERROR = \"NETWORK_ERROR\",\n\n // Some sort of bad response from the server\n SERVER_ERROR = \"SERVER_ERROR\",\n\n // Timeout\n TIMEOUT = \"TIMEOUT\",\n\n ///////////////////\n // Operational Errors\n\n // Buffer Overrun\n BUFFER_OVERRUN = \"BUFFER_OVERRUN\",\n\n // Numeric Fault\n // - operation: the operation being executed\n // - fault: the reason this faulted\n NUMERIC_FAULT = \"NUMERIC_FAULT\",\n\n\n ///////////////////\n // Argument Errors\n\n // Missing new operator to an object\n // - name: The name of the class\n MISSING_NEW = \"MISSING_NEW\",\n\n // Invalid argument (e.g. value is incompatible with type) to a function:\n // - argument: The argument name that was invalid\n // - value: The value of the argument\n INVALID_ARGUMENT = \"INVALID_ARGUMENT\",\n\n // Missing argument to a function:\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n MISSING_ARGUMENT = \"MISSING_ARGUMENT\",\n\n // Too many arguments\n // - count: The number of arguments received\n // - expectedCount: The number of arguments expected\n UNEXPECTED_ARGUMENT = \"UNEXPECTED_ARGUMENT\",\n\n\n ///////////////////\n // Blockchain Errors\n\n // Call exception\n // - transaction: the transaction\n // - address?: the contract address\n // - args?: The arguments passed into the function\n // - method?: The Solidity method signature\n // - errorSignature?: The EIP848 error signature\n // - errorArgs?: The EIP848 error parameters\n // - reason: The reason (only for EIP848 \"Error(string)\")\n CALL_EXCEPTION = \"CALL_EXCEPTION\",\n\n // Insufficient funds (< value + gasLimit * gasPrice)\n // - transaction: the transaction attempted\n INSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\n // Nonce has already been used\n // - transaction: the transaction attempted\n NONCE_EXPIRED = \"NONCE_EXPIRED\",\n\n // The replacement fee for the transaction is too low\n // - transaction: the transaction attempted\n REPLACEMENT_UNDERPRICED = \"REPLACEMENT_UNDERPRICED\",\n\n // The gas limit could not be estimated\n // - transaction: the transaction passed to estimateGas\n UNPREDICTABLE_GAS_LIMIT = \"UNPREDICTABLE_GAS_LIMIT\",\n\n // The transaction was replaced by one with a higher gas price\n // - reason: \"cancelled\", \"replaced\" or \"repriced\"\n // - cancelled: true if reason == \"cancelled\" or reason == \"replaced\")\n // - hash: original transaction hash\n // - replacement: the full TransactionsResponse for the replacement\n // - receipt: the receipt of the replacement\n TRANSACTION_REPLACED = \"TRANSACTION_REPLACED\",\n};\n\nconst HEX = \"0123456789abcdef\";\n\nexport class Logger {\n readonly version: string;\n\n static errors = ErrorCode;\n\n static levels = LogLevel;\n\n constructor(version: string) {\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n value: version,\n writable: false\n });\n }\n\n _log(logLevel: LogLevel, args: Array<any>): void {\n const level = logLevel.toLowerCase();\n if (LogLevels[level] == null) {\n this.throwArgumentError(\"invalid log level name\", \"logLevel\", logLevel);\n }\n if (_logLevel > LogLevels[level]) { return; }\n console.log.apply(console, args);\n }\n\n debug(...args: Array<any>): void {\n this._log(Logger.levels.DEBUG, args);\n }\n\n info(...args: Array<any>): void {\n this._log(Logger.levels.INFO, args);\n }\n\n warn(...args: Array<any>): void {\n this._log(Logger.levels.WARNING, args);\n }\n\n makeError(message: string, code?: ErrorCode, params?: any): Error {\n // Errors are being censored\n if (_censorErrors) {\n return this.makeError(\"censored error\", code, { });\n }\n\n if (!code) { code = Logger.errors.UNKNOWN_ERROR; }\n if (!params) { params = {}; }\n\n const messageDetails: Array<string> = [];\n Object.keys(params).forEach((key) => {\n const value = params[key];\n try {\n if (value instanceof Uint8Array) {\n let hex = \"\";\n for (let i = 0; i < value.length; i++) {\n hex += HEX[value[i] >> 4];\n hex += HEX[value[i] & 0x0f];\n }\n messageDetails.push(key + \"=Uint8Array(0x\" + hex + \")\");\n } else {\n messageDetails.push(key + \"=\" + JSON.stringify(value));\n }\n } catch (error) {\n messageDetails.push(key + \"=\" + JSON.stringify(params[key].toString()));\n }\n });\n messageDetails.push(`code=${ code }`);\n messageDetails.push(`version=${ this.version }`);\n\n const reason = message;\n if (messageDetails.length) {\n message += \" (\" + messageDetails.join(\", \") + \")\";\n }\n\n // @TODO: Any??\n const error: any = new Error(message);\n error.reason = reason;\n error.code = code\n\n Object.keys(params).forEach(function(key) {\n error[key] = params[key];\n });\n\n return error;\n }\n\n throwError(message: string, code?: ErrorCode, params?: any): never {\n throw this.makeError(message, code, params);\n }\n\n throwArgumentError(message: string, name: string, value: any): never {\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\n argument: name,\n value: value\n });\n }\n\n assert(condition: any, message: string, code?: ErrorCode, params?: any): void {\n if (!!condition) { return; }\n this.throwError(message, code, params);\n }\n\n assertArgument(condition: any, message: string, name: string, value: any): void {\n if (!!condition) { return; }\n this.throwArgumentError(message, name, value);\n }\n\n checkNormalize(message?: string): void {\n if (message == null) { message = \"platform missing String.prototype.normalize\"; }\n if (_normalizeError) {\n this.throwError(\"platform missing String.prototype.normalize\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"String.prototype.normalize\", form: _normalizeError\n });\n }\n }\n\n checkSafeUint53(value: number, message?: string): void {\n if (typeof(value) !== \"number\") { return; }\n\n if (message == null) { message = \"value not safe\"; }\n\n if (value < 0 || value >= 0x1fffffffffffff) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"out-of-safe-range\",\n value: value\n });\n }\n\n if (value % 1) {\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\n operation: \"checkSafeInteger\",\n fault: \"non-integer\",\n value: value\n });\n }\n }\n\n checkArgumentCount(count: number, expectedCount: number, message?: string): void {\n if (message) {\n message = \": \" + message;\n } else {\n message = \"\";\n }\n\n if (count < expectedCount) {\n this.throwError(\"missing argument\" + message, Logger.errors.MISSING_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n\n if (count > expectedCount) {\n this.throwError(\"too many arguments\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\n count: count,\n expectedCount: expectedCount\n });\n }\n }\n\n checkNew(target: any, kind: any): void {\n if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n\n checkAbstract(target: any, kind: any): void {\n if (target === kind) {\n this.throwError(\n \"cannot instantiate abstract class \" + JSON.stringify(kind.name) + \" directly; use a sub-class\",\n Logger.errors.UNSUPPORTED_OPERATION,\n { name: target.name, operation: \"new\" }\n );\n } else if (target === Object || target == null) {\n this.throwError(\"missing new\", Logger.errors.MISSING_NEW, { name: kind.name });\n }\n }\n\n static globalLogger(): Logger {\n if (!_globalLogger) { _globalLogger = new Logger(version); }\n return _globalLogger;\n }\n\n static setCensorship(censorship: boolean, permanent?: boolean): void {\n if (!censorship && permanent) {\n this.globalLogger().throwError(\"cannot permanently disable censorship\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n\n if (_permanentCensorErrors) {\n if (!censorship) { return; }\n this.globalLogger().throwError(\"error censorship permanent\", Logger.errors.UNSUPPORTED_OPERATION, {\n operation: \"setCensorship\"\n });\n }\n\n _censorErrors = !!censorship;\n _permanentCensorErrors = !!permanent;\n }\n\n static setLogLevel(logLevel: LogLevel): void {\n const level = LogLevels[logLevel.toLowerCase()];\n if (level == null) {\n Logger.globalLogger().warn(\"invalid log level - \" + logLevel);\n return;\n }\n _logLevel = level;\n }\n\n static from(version: string): Logger {\n return new Logger(version);\n }\n}\n","export const version = \"logger/5.5.0\";\n","export const version = \"bytes/5.5.0\";\n","\"use strict\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\n///////////////////////////////\n// Exported Types\n\nexport type Bytes = ArrayLike<number>;\n\nexport type BytesLike = Bytes | string;\n\nexport type DataOptions = {\n allowMissingPrefix?: boolean;\n hexPad?: \"left\" | \"right\" | null;\n};\n\nexport interface Hexable {\n toHexString(): string;\n}\n\n\n/*\nexport interface HexString {\n length: number;\n substring: (start: number, end?: number) => string;\n\n [index: number]: string;\n}\n*/\n\nexport type SignatureLike = {\n r: string;\n s?: string;\n _vs?: string,\n recoveryParam?: number;\n v?: number;\n} | BytesLike;\n\nexport interface Signature {\n r: string;\n\n s: string;\n _vs: string,\n\n recoveryParam: number;\n v: number;\n}\n\n///////////////////////////////\n\n\nfunction isHexable(value: any): value is Hexable {\n return !!(value.toHexString);\n}\n\nfunction addSlice(array: Uint8Array): Uint8Array {\n if (array.slice) { return array; }\n\n array.slice = function() {\n const args = Array.prototype.slice.call(arguments);\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\n }\n\n return array;\n}\n\nexport function isBytesLike(value: any): value is BytesLike {\n return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\n}\n\nfunction isInteger(value: number) {\n return (typeof(value) === \"number\" && value == value && (value % 1) === 0);\n}\n\nexport function isBytes(value: any): value is Bytes {\n if (value == null) { return false; }\n\n if (value.constructor === Uint8Array) { return true; }\n if (typeof(value) === \"string\") { return false; }\n if (!isInteger(value.length) || value.length < 0) { return false; }\n\n for (let i = 0; i < value.length; i++) {\n const v = value[i];\n if (!isInteger(v) || v < 0 || v >= 256) { return false; }\n }\n return true;\n}\n\n\nexport function arrayify(value: BytesLike | Hexable | number, options?: DataOptions): Uint8Array {\n if (!options) { options = { }; }\n\n if (typeof(value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid arrayify value\");\n\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value = parseInt(String(value / 256));\n }\n if (result.length === 0) { result.push(0); }\n\n return addSlice(new Uint8Array(result));\n }\n\n if (options.allowMissingPrefix && typeof(value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n\n if (isHexable(value)) { value = value.toHexString(); }\n\n if (isHexString(value)) {\n let hex = (<string>value).substring(2);\n if (hex.length % 2) {\n if (options.hexPad === \"left\") {\n hex = \"0x0\" + hex.substring(2);\n } else if (options.hexPad === \"right\") {\n hex += \"0\";\n } else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n\n const result = [];\n for (let i = 0; i < hex.length; i += 2) {\n result.push(parseInt(hex.substring(i, i + 2), 16));\n }\n\n return addSlice(new Uint8Array(result));\n }\n\n if (isBytes(value)) {\n return addSlice(new Uint8Array(value));\n }\n\n return logger.throwArgumentError(\"invalid arrayify value\", \"value\", value);\n}\n\nexport function concat(items: ReadonlyArray<BytesLike>): Uint8Array {\n const objects = items.map(item => arrayify(item));\n const length = objects.reduce((accum, item) => (accum + item.length), 0);\n\n const result = new Uint8Array(length);\n\n objects.reduce((offset, object) => {\n result.set(object, offset);\n return offset + object.length;\n }, 0);\n\n return addSlice(result);\n}\n\nexport function stripZeros(value: BytesLike): Uint8Array {\n let result: Uint8Array = arrayify(value);\n\n if (result.length === 0) { return result; }\n\n // Find the first non-zero entry\n let start = 0;\n while (start < result.length && result[start] === 0) { start++ }\n\n // If we started with zeros, strip them\n if (start) {\n result = result.slice(start);\n }\n\n return result;\n}\n\nexport function zeroPad(value: BytesLike, length: number): Uint8Array {\n value = arrayify(value);\n\n if (value.length > length) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[0]);\n }\n\n const result = new Uint8Array(length);\n result.set(value, length - value.length);\n return addSlice(result);\n}\n\n\nexport function isHexString(value: any, length?: number): boolean {\n if (typeof(value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n return false\n }\n if (length && value.length !== 2 + 2 * length) { return false; }\n return true;\n}\n\nconst HexCharacters: string = \"0123456789abcdef\";\n\nexport function hexlify(value: BytesLike | Hexable | number | bigint, options?: DataOptions): string {\n if (!options) { options = { }; }\n\n if (typeof(value) === \"number\") {\n logger.checkSafeUint53(value, \"invalid hexlify value\");\n\n let hex = \"\";\n while (value) {\n hex = HexCharacters[value & 0xf] + hex;\n value = Math.floor(value / 16);\n }\n\n if (hex.length) {\n if (hex.length % 2) { hex = \"0\" + hex; }\n return \"0x\" + hex;\n }\n\n return \"0x00\";\n }\n\n if (typeof(value) === \"bigint\") {\n value = value.toString(16);\n if (value.length % 2) { return (\"0x0\" + value); }\n return \"0x\" + value;\n }\n\n if (options.allowMissingPrefix && typeof(value) === \"string\" && value.substring(0, 2) !== \"0x\") {\n value = \"0x\" + value;\n }\n\n if (isHexable(value)) { return value.toHexString(); }\n\n if (isHexString(value)) {\n if ((<string>value).length % 2) {\n if (options.hexPad === \"left\") {\n value = \"0x0\" + (<string>value).substring(2);\n } else if (options.hexPad === \"right\") {\n value += \"0\";\n } else {\n logger.throwArgumentError(\"hex data is odd-length\", \"value\", value);\n }\n }\n return (<string>value).toLowerCase();\n }\n\n if (isBytes(value)) {\n let result = \"0x\";\n for (let i = 0; i < value.length; i++) {\n let v = value[i];\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n }\n return result;\n }\n\n return logger.throwArgumentError(\"invalid hexlify value\", \"value\", value);\n}\n\n/*\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\n if (typeof(value) === \"string\" && value.length % 2 && value.substring(0, 2) === \"0x\") {\n return \"0x0\" + value.substring(2);\n }\n return value;\n}\n*/\nexport function hexDataLength(data: BytesLike) {\n if (typeof(data) !== \"string\") {\n data = hexlify(data);\n } else if (!isHexString(data) || (data.length % 2)) {\n return null;\n }\n\n return (data.length - 2) / 2;\n}\n\nexport function hexDataSlice(data: BytesLike, offset: number, endOffset?: number): string {\n if (typeof(data) !== \"string\") {\n data = hexlify(data);\n } else if (!isHexString(data) || (data.length % 2)) {\n logger.throwArgumentError(\"invalid hexData\", \"value\", data );\n }\n\n offset = 2 + 2 * offset;\n\n if (endOffset != null) {\n return \"0x\" + data.substring(offset, 2 + 2 * endOffset);\n }\n\n return \"0x\" + data.substring(offset);\n}\n\nexport function hexConcat(items: ReadonlyArray<BytesLike>): string {\n let result = \"0x\";\n items.forEach((item) => {\n result += hexlify(item).substring(2);\n });\n return result;\n}\n\nexport function hexValue(value: BytesLike | Hexable | number | bigint): string {\n const trimmed = hexStripZeros(hexlify(value, { hexPad: \"left\" }));\n if (trimmed === \"0x\") { return \"0x0\"; }\n return trimmed;\n}\n\nexport function hexStripZeros(value: BytesLike): string {\n if (typeof(value) !== \"string\") { value = hexlify(value); }\n\n if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n value = value.substring(2);\n let offset = 0;\n while (offset < value.length && value[offset] === \"0\") { offset++; }\n return \"0x\" + value.substring(offset);\n}\n\nexport function hexZeroPad(value: BytesLike, length: number): string {\n if (typeof(value) !== \"string\") {\n value = hexlify(value);\n } else if (!isHexString(value)) {\n logger.throwArgumentError(\"invalid hex string\", \"value\", value);\n }\n\n if (value.length > 2 * length + 2) {\n logger.throwArgumentError(\"value out of range\", \"value\", arguments[1]);\n }\n\n while (value.length < 2 * length + 2) {\n value = \"0x0\" + value.substring(2);\n }\n\n return value;\n}\n\nexport function splitSignature(signature: SignatureLike): Signature {\n const result = {\n r: \"0x\",\n s: \"0x\",\n _vs: \"0x\",\n recoveryParam: 0,\n v: 0\n };\n\n if (isBytesLike(signature)) {\n const bytes: Uint8Array = arrayify(signature);\n if (bytes.length !== 65) {\n logger.throwArgumentError(\"invalid signature string; must be 65 bytes\", \"signature\", signature);\n }\n\n // Get the r, s and v\n result.r = hexlify(bytes.slice(0, 32));\n result.s = hexlify(bytes.slice(32, 64));\n result.v = bytes[64];\n\n // Allow a recid to be used as the v\n if (result.v < 27) {\n if (result.v === 0 || result.v === 1) {\n result.v += 27;\n } else {\n logger.throwArgumentError(\"signature invalid v byte\", \"signature\", signature);\n }\n }\n\n // Compute recoveryParam from v\n result.recoveryParam = 1 - (result.v % 2);\n\n // Compute _vs from recoveryParam and s\n if (result.recoveryParam) { bytes[32] |= 0x80; }\n result._vs = hexlify(bytes.slice(32, 64))\n\n } else {\n result.r = signature.r;\n result.s = signature.s;\n result.v = signature.v;\n result.recoveryParam = signature.recoveryParam;\n result._vs = signature._vs;\n\n // If the _vs is available, use it to populate missing s, v and recoveryParam\n // and verify non-missing s, v and recoveryParam\n if (result._vs != null) {\n const vs = zeroPad(arrayify(result._vs), 32);\n result._vs = hexlify(vs);\n\n // Set or check the recid\n const recoveryParam = ((vs[0] >= 128) ? 1: 0);\n if (result.recoveryParam == null) {\n result.recoveryParam = recoveryParam;\n } else if (result.recoveryParam !== recoveryParam) {\n logger.throwArgumentError(\"signature recoveryParam mismatch _vs\", \"signature\", signature);\n }\n\n // Set or check the s\n vs[0] &= 0x7f;\n const s = hexlify(vs);\n if (result.s == null) {\n result.s = s;\n } else if (result.s !== s) {\n logger.throwArgumentError(\"signature v mismatch _vs\", \"signature\", signature);\n }\n }\n\n // Use recid and v to populate each other\n if (result.recoveryParam == null) {\n if (result.v == null) {\n logger.throwArgumentError(\"signature missing v and recoveryParam\", \"signature\", signature);\n } else if (result.v === 0 || result.v === 1) {\n result.recoveryParam = result.v;\n } else {\n result.recoveryParam = 1 - (result.v % 2);\n }\n } else {\n if (result.v == null) {\n result.v = 27 + result.recoveryParam;\n } else {\n const recId = (result.v === 0 || result.v === 1) ? result.v :(1 - (result.v % 2));\n if (result.recoveryParam !== recId) {\n logger.throwArgumentError(\"signature recoveryParam mismatch v\", \"signature\", signature);\n }\n }\n }\n\n if (result.r == null || !isHexString(result.r)) {\n logger.throwArgumentError(\"signature missing or invalid r\", \"signature\", signature);\n } else {\n result.r = hexZeroPad(result.r, 32);\n }\n\n if (result.s == null || !isHexString(result.s)) {\n logger.throwArgumentError(\"signature missing or invalid s\", \"signature\", signature);\n } else {\n result.s = hexZeroPad(result.s, 32);\n }\n\n const vs = arrayify(result.s);\n if (vs[0] >= 128) {\n logger.throwArgumentError(\"signature s out of range\", \"signature\", signature);\n }\n if (result.recoveryParam) { vs[0] |= 0x80; }\n const _vs = hexlify(vs);\n\n if (result._vs) {\n if (!isHexString(result._vs)) {\n logger.throwArgumentError(\"signature invalid _vs\", \"signature\", signature);\n }\n result._vs = hexZeroPad(result._vs, 32);\n }\n\n // Set or check the _vs\n if (result._vs == null) {\n result._vs = _vs;\n } else if (result._vs !== _vs) {\n logger.throwArgumentError(\"signature _vs mismatch v and s\", \"signature\", signature);\n }\n }\n\n return result;\n}\n\nexport function joinSignature(signature: SignatureLike): string {\n signature = splitSignature(signature);\n\n return hexlify(concat([\n signature.r,\n signature.s,\n (signature.recoveryParam ? \"0x1c\": \"0x1b\")\n ]));\n}\n\n","export const version = \"rlp/5.5.0\";\n","\"use strict\";\n\n//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { arrayify, BytesLike, hexlify, isBytesLike } from \"@ethersproject/bytes\";\n\nimport { Logger } from \"@ethersproject/logger\";\nimport { version } from \"./_version\";\nconst logger = new Logger(version);\n\nfunction arrayifyInteger(value: number): Array<number> {\n const result = [];\n while (value) {\n result.unshift(value & 0xff);\n value >>= 8;\n }\n return result;\n}\n\nfunction unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {\n let result = 0;\n for (let i = 0; i < length; i++) {\n result = (result * 256) + data[offset + i];\n }\n return result;\n}\n\nfunction _encode(object: Array<any> | string): Array<number> {\n if (Array.isArray(object)) {\n let payload: Array<number> = [];\n object.forEach(function(child) {\n payload = payload.concat(_encode(child));\n });\n\n if (payload.length <= 55) {\n payload.unshift(0xc0 + payload.length)\n return payload;\n }\n\n const length = arrayifyInteger(payload.length);\n length.unshift(0xf7 + length.length);\n\n return length.concat(payload);\n\n }\n\n if (!isBytesLike(object)) {\n logger.throwArgumentError(\"RLP object must be BytesLike\", \"object\", object);\n }\n\n const data: Array<number> = Array.prototype.slice.call(arrayify(object));\n\n if (data.length === 1 && data[0] <= 0x7f) {\n return data;\n\n } else if (data.length <= 55) {\n data.unshift(0x80 + data.length);\n return data;\n }\n\n const length = arrayifyInteger(data.length);\n length.unshift(0xb7 + length.length);\n\n return length.concat(data);\n}\n\nexport function encode(object: any): string {\n return hexlify(_encode(object));\n}\n\ntype Decoded = {\n result: any;\n consumed: number;\n};\n\nfunction _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {\n const result = [];\n\n while (childOffset < offset + 1 + length) {\n const decoded = _decode(data, childOffset);\n\n result.push(decoded.result);\n\n childOffset += decoded.consumed;\n if (childOffset > offset + 1 + length) {\n logger.throwError(\"child data too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n }\n\n return {consumed: (1 + length), result: result};\n}\n\n// returns { consumed: number, result: Object }\nfunction _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {\n if (data.length === 0) {\n logger.throwError(\"data too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n // Array with extra length prefix\n if (data[offset] >= 0xf8) {\n const lengthLength = data[offset] - 0xf7;\n if (offset + 1 + lengthLength > data.length) {\n logger.throwError(\"data short segment too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n logger.throwError(\"data long segment too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n\n } else if (data[offset] >= 0xc0) {\n const length = data[offset] - 0xc0;\n if (offset + 1 + length > data.length) {\n logger.throwError(\"data array too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n return _decodeChildren(data, offset, offset + 1, length);\n\n } else if (data[offset] >= 0xb8) {\n const lengthLength = data[offset] - 0xb7;\n if (offset + 1 + lengthLength > data.length) {\n logger.throwError(\"data array too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\n if (offset + 1 + lengthLength + length > data.length) {\n logger.throwError(\"data array too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n return { consumed: (1 + lengthLength + length), result: result }\n\n } else if (data[offset] >= 0x80) {\n const length = data[offset] - 0x80;\n if (offset + 1 + length > data.length) {\n logger.throwError(\"data too short\", Logger.errors.BUFFER_OVERRUN, { });\n }\n\n const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n return { consumed: (1 + length), result: result }\n }\n return { consumed: 1, result: hexlify(data[offset]) };\n}\n\nexport function decode(data: BytesLike): any {\n const bytes = arrayify(data);\n const decoded = _decode(bytes, 0);\n if (decoded.consumed !== bytes.length) {\n logger.throwArgumentError(\"invalid rlp data\", \"data\", data);\n }\n return decoded.result;\n}\n\n","const v4Regex = /^(\\d{1,3}\\.){3,3}\\d{1,3}$/\nconst v4Size = 4\nconst v6Regex = /^(::)?(((\\d{1,3}\\.){3}(\\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?$/i\nconst v6Size = 16\n\nconst v4 = {\n name: 'v4',\n size: v4Size,\n isFormat: ip => v4Regex.test(ip),\n encode (ip, buff, offset) {\n offset = ~~offset\n buff = buff || new Uint8Array(offset + v4Size)\n const max = ip.length\n let n = 0\n for (let i = 0; i < max;) {\n const c = ip.charCodeAt(i++)\n if (c === 46) { // \".\"\n buff[offset++] = n\n n = 0\n } else {\n n = n * 10 + (c - 48)\n }\n }\n buff[offset] = n\n return buff\n },\n decode (buff, offset) {\n offset = ~~offset\n return `${buff[offset++]}.${buff[offset++]}.${buff[offset++]}.${buff[offset]}`\n }\n}\n\nconst v6 = {\n name: 'v6',\n size: v6Size,\n isFormat: ip => ip.length > 0 && v6Regex.test(ip),\n encode (ip, buff, offset) {\n offset = ~~offset\n let end = offset + v6Size\n let fill = -1\n let hexN = 0\n let decN = 0\n let prevColon = true\n let useDec = false\n buff = buff || new Uint8Array(offset + v6Size)\n // Note: This algorithm needs to check if the offset\n // could exceed the buffer boundaries as it supports\n // non-standard compliant encodings that may go beyond\n // the boundary limits. if (offset < end) checks should\n // not be necessary...\n for (let i = 0; i < ip.length; i++) {\n let c = ip.charCodeAt(i)\n if (c === 58) { // :\n if (prevColon) {\n if (fill !== -1) {\n // Not Standard! (standard doesn't allow multiple ::)\n // We need to treat\n if (offset < end) buff[offset] = 0\n if (offset < end - 1) buff[offset + 1] = 0\n offset += 2\n } else if (offset < end) {\n // :: in the middle\n fill = offset\n }\n } else {\n // : ends the previous number\n if (useDec === true) {\n // Non-standard! (ipv4 should be at end only)\n // A ipv4 address should not be found anywhere else but at\n // the end. This codec also support putting characters\n // after the ipv4 address..\n if (offset < end) buff[offset] = decN\n offset++\n } else {\n if (offset < end) buff[offset] = hexN >> 8\n if (offset < end - 1) buff[offset + 1] = hexN & 0xff\n offset += 2\n }\n hexN = 0\n decN = 0\n }\n prevColon = true\n useDec = false\n } else if (c === 46) { // . indicates IPV4 notation\n if (offset < end) buff[offset] = decN\n offset++\n decN = 0\n hexN = 0\n prevColon = false\n useDec = true\n } else {\n prevColon = false\n if (c >= 97) {\n c -= 87 // a-f ... 97~102 -87 => 10~15\n } else if (c >= 65) {\n c -= 55 // A-F ... 65~70 -55 => 10~15\n } else {\n c -= 48 // 0-9 ... starting from charCode 48\n decN = decN * 10 + c\n }\n // We don't know yet if its a dec or hex number\n hexN = (hexN << 4) + c\n }\n }\n if (prevColon === false) {\n // Commiting last number\n if (useDec === true) {\n if (offset < end) buff[offset] = decN\n offset++\n } else {\n if (offset < end) buff[offset] = hexN >> 8\n if (offset < end - 1) buff[offset + 1] = hexN & 0xff\n offset += 2\n }\n } else if (fill === 0) {\n // Not Standard! (standard doesn't allow multiple ::)\n // This means that a : was found at the start AND end which means the\n // end needs to be treated as 0 entry...\n if (offset < end) buff[offset] = 0\n if (offset < end - 1) buff[offset + 1] = 0\n offset += 2\n } else if (fill !== -1) {\n // Non-standard! (standard doens't allow multiple ::)\n // Here we find that there has been a :: somewhere in the middle\n // and the end. To treat the end with priority we need to move all\n // written data two bytes to the right.\n offset += 2\n for (let i = Math.min(offset - 1, end - 1); i >= fill + 2; i--) {\n buff[i] = buff[i - 2]\n }\n buff[fill] = 0\n buff[fill + 1] = 0\n fill = offset\n }\n if (fill !== offset && fill !== -1) {\n // Move the written numbers to the end while filling the everything\n // \"fill\" to the bytes with zeros.\n if (offset > end - 2) {\n // Non Standard support, when the cursor exceeds bounds.\n offset = end - 2\n }\n while (end > fill) {\n buff[--end] = offset < end && offset > fill ? buff[--offset] : 0\n }\n } else {\n // Fill the rest with zeros\n while (offset < end) {\n buff[offset++] = 0\n }\n }\n return buff\n },\n decode (buff, offset) {\n offset = ~~offset\n let result = ''\n for (let i = 0; i < v6Size; i += 2) {\n if (i !== 0) {\n result += ':'\n }\n result += (buff[offset + i] << 8 | buff[offset + i + 1]).toString(16)\n }\n return result\n .replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n .replace(/:{3,4}/, '::')\n }\n}\n\nfunction sizeOf (ip) {\n if (v4.isFormat(ip)) return v4.size\n if (v6.isFormat(ip)) return v6.size\n throw Error(`Invalid ip address: ${ip}`)\n}\n\nmodule.exports = Object.freeze({\n name: 'ip',\n sizeOf,\n familyOf: string => sizeOf(string) === v4.size ? 1 : 2,\n v4,\n v6,\n encode (ip, buff, offset) {\n offset = ~~offset\n const size = sizeOf(ip)\n if (typeof buff === 'function') {\n buff = buff(offset + size)\n }\n if (size === v4.size) {\n return v4.encode(ip, buff, offset)\n }\n return v6.encode(ip, buff, offset)\n },\n decode (buff, offset, length) {\n offset = ~~offset\n length = length || (buff.length - offset)\n if (length === v4.size) {\n return v4.decode(buff, offset, length)\n }\n if (length === v6.size) {\n return v6.decode(buff, offset, length)\n }\n throw Error(`Invalid buffer size needs to be ${v4.size} for v4 or ${v6.size} for v6.`)\n }\n})\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","\"use strict\";\n/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utils = exports.curve25519 = exports.getSharedSecret = exports.verify = exports.sign = exports.getPublicKey = exports.Signature = exports.Point = exports.ExtendedPoint = exports.CURVE = void 0;\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _255n = BigInt(255);\nconst CURVE = {\n a: BigInt(-1),\n d: BigInt('37095705934669439343138083508754565189542113879843219016388785533085940283555'),\n P: _2n ** _255n - BigInt(19),\n n: _2n ** BigInt(252) + BigInt('27742317777372353535851937790883648493'),\n h: BigInt(8),\n Gx: BigInt('15112221349535400772501151409588531511454012693041857206046113283949847762202'),\n Gy: BigInt('46316835694926478169428394003475163141307993866256225615783033603165251855960'),\n};\nexports.CURVE = CURVE;\nconst SQRT_M1 = BigInt('19681161376707505956807079304988542015446066515923890162744021073123829784752');\nconst SQRT_D = BigInt('6853475219497561581579357271197624642482790079785650197046958215289687604742');\nconst SQRT_AD_MINUS_ONE = BigInt('25063068953384623474111414158702152701244531502492656460079210482610430750235');\nconst INVSQRT_A_MINUS_D = BigInt('54469307008909316920995813868745141605393597292927456921205312896311721017578');\nconst ONE_MINUS_D_SQ = BigInt('1159843021668779879193775521855586647937357759715417654439879720876111806838');\nconst D_MINUS_ONE_SQ = BigInt('40440834346308536858101042469323190826248399146238708352240133220865137265952');\nclass ExtendedPoint {\n constructor(x, y, z, t) {\n this.x = x;\n this.y = y;\n this.z = z;\n this.t = t;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('ExtendedPoint#fromAffine: expected Point');\n }\n if (p.equals(Point.ZERO))\n return ExtendedPoint.ZERO;\n return new ExtendedPoint(p.x, p.y, _1n, mod(p.x * p.y));\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return this.toAffineBatch(points).map(this.fromAffine);\n }\n static fromRistrettoHash(hash) {\n hash = ensureBytes(hash);\n assertLen(64, hash);\n const r1 = bytes255ToNumberLE(hash.slice(0, 32));\n const R1 = this.calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(hash.slice(32, 64));\n const R2 = this.calcElligatorRistrettoMap(r2);\n return R1.add(R2);\n }\n static calcElligatorRistrettoMap(r0) {\n const { d } = CURVE;\n const r = mod(SQRT_M1 * r0 * r0);\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ);\n let c = BigInt(-1);\n const D = mod((c - d * r) * mod(r + d));\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D);\n let s_ = mod(s * r0);\n if (!edIsNegative(s_))\n s_ = mod(-s_);\n if (!Ns_D_is_sq)\n s = s_;\n if (!Ns_D_is_sq)\n c = r;\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D);\n const s2 = s * s;\n const W0 = mod((s + s) * D);\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE);\n const W2 = mod(_1n - s2);\n const W3 = mod(_1n + s2);\n return new ExtendedPoint(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n }\n static fromRistrettoBytes(bytes) {\n bytes = ensureBytes(bytes);\n assertLen(32, bytes);\n const { a, d } = CURVE;\n const emsg = 'ExtendedPoint.fromRistrettoBytes: Cannot convert bytes to Ristretto Point';\n const s = bytes255ToNumberLE(bytes);\n if (!equalBytes(numberToBytesLEPadded(s, 32), bytes) || edIsNegative(s))\n throw new Error(emsg);\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2);\n const u2 = mod(_1n - a * s2);\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2);\n const { isValid, value: I } = invertSqrt(mod(v * u2_2));\n const Dx = mod(I * u2);\n const Dy = mod(I * Dx * v);\n let x = mod((s + s) * Dx);\n if (edIsNegative(x))\n x = mod(-x);\n const y = mod(u1 * Dy);\n const t = mod(x * y);\n if (!isValid || edIsNegative(t) || y === _0n)\n throw new Error(emsg);\n return new ExtendedPoint(x, y, _1n, t);\n }\n toRistrettoBytes() {\n let { x, y, z, t } = this;\n const u1 = mod(mod(z + y) * mod(z - y));\n const u2 = mod(x * y);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2 ** _2n));\n const D1 = mod(invsqrt * u1);\n const D2 = mod(invsqrt * u2);\n const zInv = mod(D1 * D2 * t);\n let D;\n if (edIsNegative(t * zInv)) {\n let _x = mod(y * SQRT_M1);\n let _y = mod(x * SQRT_M1);\n x = _x;\n y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n }\n else {\n D = D2;\n }\n if (edIsNegative(x * zInv))\n y = mod(-y);\n let s = mod((z - y) * D);\n if (edIsNegative(s))\n s = mod(-s);\n return numberToBytesLEPadded(s, 32);\n }\n equals(other) {\n const a = this;\n const b = other;\n return mod(a.t * b.z) === mod(b.t * a.z);\n }\n negate() {\n return new ExtendedPoint(mod(-this.x), this.y, this.z, mod(-this.t));\n }\n double() {\n const X1 = this.x;\n const Y1 = this.y;\n const Z1 = this.z;\n const { a } = CURVE;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(_2n * Z1 ** _2n);\n const D = mod(a * A);\n const E = mod((X1 + Y1) ** _2n - A - B);\n const G = mod(D + B);\n const F = mod(G - C);\n const H = mod(D - B);\n const X3 = mod(E * F);\n const Y3 = mod(G * H);\n const T3 = mod(E * H);\n const Z3 = mod(F * G);\n return new ExtendedPoint(X3, Y3, Z3, T3);\n }\n add(other) {\n const X1 = this.x;\n const Y1 = this.y;\n const Z1 = this.z;\n const T1 = this.t;\n const X2 = other.x;\n const Y2 = other.y;\n const Z2 = other.z;\n const T2 = other.t;\n const A = mod((Y1 - X1) * (Y2 + X2));\n const B = mod((Y1 + X1) * (Y2 - X2));\n const F = mod(B - A);\n if (F === _0n) {\n return this.double();\n }\n const C = mod(Z1 * _2n * T2);\n const D = mod(T1 * _2n * Z2);\n const E = mod(D + C);\n const G = mod(B + A);\n const H = mod(D - C);\n const X3 = mod(E * F);\n const Y3 = mod(G * H);\n const T3 = mod(E * H);\n const Z3 = mod(F * G);\n return new ExtendedPoint(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n const P0 = ExtendedPoint.ZERO;\n if (this.equals(P0) || n === _1n)\n return this;\n let p = P0;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n precomputeWindow(W) {\n const windows = 256 / W + 1;\n let points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(ExtendedPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = ExtendedPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = ExtendedPoint.ZERO;\n let f = ExtendedPoint.ZERO;\n const windows = 256 / W + 1;\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return [p, f];\n }\n multiply(scalar, affinePoint) {\n const n = normalizeScalar(scalar);\n return ExtendedPoint.normalizeZ(this.wNAF(n, affinePoint))[0];\n }\n toAffine(invZ = invert(this.z)) {\n const x = mod(this.x * invZ);\n const y = mod(this.y * invZ);\n return new Point(x, y);\n }\n}\nexports.ExtendedPoint = ExtendedPoint;\nExtendedPoint.BASE = new ExtendedPoint(CURVE.Gx, CURVE.Gy, _1n, mod(CURVE.Gx * CURVE.Gy));\nExtendedPoint.ZERO = new ExtendedPoint(_0n, _1n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromHex(hex) {\n const { d, P } = CURVE;\n const bytes = ensureBytes(hex);\n assertLen(32, bytes);\n const normed = bytes.slice();\n normed[31] = bytes[31] & ~0x80;\n const y = bytesToNumberLE(normed);\n if (y >= P)\n throw new Error('Point.fromHex expects hex <= Fp');\n const y2 = mod(y * y);\n const u = mod(y2 - _1n);\n const v = mod(d * y2 + _1n);\n let { isValid, value: x } = uvRatio(u, v);\n if (!isValid)\n throw new Error('Point.fromHex: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n;\n const isLastByteOdd = (bytes[31] & 0x80) !== 0;\n if (isLastByteOdd !== isXOdd) {\n x = mod(-x);\n }\n return new Point(x, y);\n }\n static async fromPrivateKey(privateKey) {\n return (await getExtendedPublicKey(privateKey)).point;\n }\n toRawBytes() {\n const bytes = numberToBytesLEPadded(this.y, 32);\n bytes[31] |= this.x & _1n ? 0x80 : 0;\n return bytes;\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n toX25519() {\n const { y } = this;\n return mod((_1n + y) * invert(_1n - y));\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(mod(-this.x), this.y);\n }\n add(other) {\n return ExtendedPoint.fromAffine(this).add(ExtendedPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return ExtendedPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n}\nexports.Point = Point;\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _1n);\nclass Signature {\n constructor(r, s) {\n this.r = r;\n if (!(r instanceof Point))\n throw new Error('Expected Point instance');\n this.s = normalizeScalar(s);\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n assertLen(64, bytes);\n const r = Point.fromHex(bytes.slice(0, 32));\n const s = bytesToNumberLE(bytes.slice(32, 64));\n return new Signature(r, s);\n }\n toRawBytes() {\n const u8 = new Uint8Array(64);\n u8.set(this.r.toRawBytes());\n u8.set(numberToBytesLEPadded(this.s, 32), 32);\n return u8;\n }\n toHex() {\n return bytesToHex(this.toRawBytes());\n }\n}\nexports.Signature = Signature;\nfunction concatBytes(...arrays) {\n if (!arrays.every((a) => a instanceof Uint8Array))\n throw new Error('Expected Uint8Array list');\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\nfunction bytesToHex(uint8a) {\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += hexes[uint8a[i]];\n }\n return hex;\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte))\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\nfunction numberToBytesBEPadded(num, length) {\n const hex = num.toString(16).padStart(length * 2, '0');\n return hexToBytes(hex);\n}\nfunction numberToBytesLEPadded(num, length) {\n return numberToBytesBEPadded(num, length).reverse();\n}\nfunction edIsNegative(num) {\n return (mod(num) & _1n) === _1n;\n}\nfunction bytesToNumberLE(uint8a) {\n if (!(uint8a instanceof Uint8Array))\n throw new Error(`bytesToNumberLE: expected Uint8Array, got ${uint8a}`);\n let value = _0n;\n const _8n = BigInt(8);\n for (let i = 0; i < uint8a.length; i++) {\n value += BigInt(uint8a[i]) << (_8n * BigInt(i));\n }\n return value;\n}\nfunction bytes255ToNumberLE(bytes) {\n return mod(bytesToNumberLE(bytes) & (_2n ** _255n - _1n));\n}\nfunction mod(a, b = CURVE.P) {\n const res = a % b;\n return res >= _0n ? res : b + res;\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, modulo = CURVE.P) {\n const len = nums.length;\n const scratch = new Array(len);\n let acc = _1n;\n for (let i = 0; i < len; i++) {\n if (nums[i] === _0n)\n continue;\n scratch[i] = acc;\n acc = mod(acc * nums[i], modulo);\n }\n acc = invert(acc, modulo);\n for (let i = len - 1; i >= 0; i--) {\n if (nums[i] === _0n)\n continue;\n let tmp = mod(acc * nums[i], modulo);\n nums[i] = mod(acc * scratch[i], modulo);\n acc = tmp;\n }\n return nums;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction pow_2_252_3(x) {\n const { P } = CURVE;\n const _5n = BigInt(5);\n const _10n = BigInt(10);\n const _20n = BigInt(20);\n const _40n = BigInt(40);\n const _80n = BigInt(80);\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P;\n const b4 = (pow2(b2, _2n) * b2) % P;\n const b5 = (pow2(b4, _1n) * x) % P;\n const b10 = (pow2(b5, _5n) * b5) % P;\n const b20 = (pow2(b10, _10n) * b10) % P;\n const b40 = (pow2(b20, _20n) * b20) % P;\n const b80 = (pow2(b40, _40n) * b40) % P;\n const b160 = (pow2(b80, _80n) * b80) % P;\n const b240 = (pow2(b160, _80n) * b80) % P;\n const b250 = (pow2(b240, _10n) * b10) % P;\n const pow_p_5_8 = (pow2(b250, _2n) * x) % P;\n return { pow_p_5_8, b2 };\n}\nfunction uvRatio(u, v) {\n const v3 = mod(v * v * v);\n const v7 = mod(v3 * v3 * v);\n const pow = pow_2_252_3(u * v7).pow_p_5_8;\n let x = mod(u * v3 * pow);\n const vx2 = mod(v * x * x);\n const root1 = x;\n const root2 = mod(x * SQRT_M1);\n const useRoot1 = vx2 === u;\n const useRoot2 = vx2 === mod(-u);\n const noRoot = vx2 === mod(-u * SQRT_M1);\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2;\n if (edIsNegative(x))\n x = mod(-x);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\nfunction invertSqrt(number) {\n return uvRatio(_1n, number);\n}\nasync function sha512ModnLE(...args) {\n const messageArray = concatBytes(...args);\n const hash = await exports.utils.sha512(messageArray);\n const value = bytesToNumberLE(hash);\n return mod(value, CURVE.n);\n}\nfunction equalBytes(b1, b2) {\n if (b1.length !== b2.length) {\n return false;\n }\n for (let i = 0; i < b1.length; i++) {\n if (b1[i] !== b2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction ensureBytes(hash) {\n return hash instanceof Uint8Array ? Uint8Array.from(hash) : hexToBytes(hash);\n}\nfunction assertLen(len, bytes) {\n if (bytes.length !== len)\n throw new Error(`Expected ${len} bytes`);\n}\nfunction normalizeScalar(num, max = CURVE.n) {\n if (typeof num === 'number' && num > 0 && Number.isSafeInteger(num))\n return BigInt(num);\n if (typeof num === 'bigint' && _0n < num && num < max)\n return num;\n throw new TypeError('Expected valid scalar: 0 < scalar < max');\n}\nfunction normalizePrivateKey(key) {\n const bytes = typeof key === 'bigint' || typeof key === 'number'\n ? numberToBytesBEPadded(normalizeScalar(key, _2n ** BigInt(256)), 32)\n : ensureBytes(key);\n assertLen(32, bytes);\n return bytes;\n}\nfunction decodeScalar25519(n) {\n n = ensureBytes(n);\n assertLen(32, n);\n n[0] &= 248;\n n[31] &= 127;\n n[31] |= 64;\n return bytesToNumberLE(n);\n}\nasync function getExtendedPublicKey(key) {\n const hashed = await exports.utils.sha512(normalizePrivateKey(key));\n const head = hashed.slice(0, 32);\n const prefix = hashed.slice(32, 64);\n const scalar = mod(decodeScalar25519(head), CURVE.n);\n const point = Point.BASE.multiply(scalar);\n const pubBytes = point.toRawBytes();\n return { head, prefix, scalar, point, pubBytes };\n}\nasync function getPublicKey(privateKey) {\n return (await getExtendedPublicKey(privateKey)).pubBytes;\n}\nexports.getPublicKey = getPublicKey;\nasync function sign(message, privateKey) {\n const msg = ensureBytes(message);\n const { prefix, scalar: p, pubBytes } = await getExtendedPublicKey(privateKey);\n const r = await sha512ModnLE(prefix, msg);\n const R = Point.BASE.multiply(r);\n const k = await sha512ModnLE(R.toRawBytes(), pubBytes, msg);\n const S = mod(r + k * p, CURVE.n);\n return new Signature(R, S).toRawBytes();\n}\nexports.sign = sign;\nasync function verify(sig, message, publicKey) {\n message = ensureBytes(message);\n if (!(publicKey instanceof Point))\n publicKey = Point.fromHex(publicKey);\n if (!(sig instanceof Signature))\n sig = Signature.fromHex(sig);\n const SB = ExtendedPoint.BASE.multiply(sig.s);\n const k = await sha512ModnLE(sig.r.toRawBytes(), publicKey.toRawBytes(), message);\n const kA = ExtendedPoint.fromAffine(publicKey).multiplyUnsafe(k);\n const RkA = ExtendedPoint.fromAffine(sig.r).add(kA);\n return RkA.subtract(SB).multiplyUnsafe(CURVE.h).equals(ExtendedPoint.ZERO);\n}\nexports.verify = verify;\nasync function getSharedSecret(privateKey, publicKey) {\n const { scalar: p } = await getExtendedPublicKey(privateKey);\n const u = Point.fromHex(publicKey).toX25519();\n return montgomeryLadderChecked(p, u);\n}\nexports.getSharedSecret = getSharedSecret;\nPoint.BASE._setWindowSize(8);\nfunction cswap(swap, x_2, x_3) {\n const dummy = mod(swap * (x_2 - x_3));\n x_2 = mod(x_2 - dummy);\n x_3 = mod(x_3 + dummy);\n return [x_2, x_3];\n}\nfunction montgomeryLadder(pointU, scalar) {\n const { P, n } = CURVE;\n const u = normalizeScalar(pointU, P);\n const k = normalizeScalar(scalar, P);\n const a24 = BigInt(121665);\n const x_1 = u;\n let x_2 = _1n;\n let z_2 = _0n;\n let x_3 = u;\n let z_3 = _1n;\n let swap = _0n;\n let sw;\n for (let t = BigInt(255 - 1); t >= _0n; t--) {\n const k_t = (k >> t) & _1n;\n swap ^= k_t;\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n swap = k_t;\n const A = mod(x_2 + z_2);\n const AA = mod(A * A);\n const B = mod(x_2 - z_2);\n const BB = mod(B * B);\n const E = mod(AA - BB);\n const C = mod(x_3 + z_3);\n const D = mod(x_3 - z_3);\n const DA = mod(D * A);\n const CB = mod(C * B);\n x_3 = mod(mod(DA + CB) ** _2n);\n z_3 = mod(x_1 * mod(DA - CB) ** _2n);\n x_2 = mod(AA * BB);\n z_2 = mod(E * (AA + mod(a24 * E)));\n }\n sw = cswap(swap, x_2, x_3);\n x_2 = sw[0];\n x_3 = sw[1];\n sw = cswap(swap, z_2, z_3);\n z_2 = sw[0];\n z_3 = sw[1];\n const { pow_p_5_8, b2 } = pow_2_252_3(z_2);\n const xp2 = mod(pow2(pow_p_5_8, BigInt(3)) * b2);\n return mod(x_2 * xp2);\n}\nfunction encodeUCoordinate(u) {\n return numberToBytesLEPadded(mod(u, CURVE.P), 32);\n}\nfunction montgomeryLadderChecked(u, p) {\n const pu = montgomeryLadder(u, p);\n if (pu === _0n)\n throw new Error('Invalid private or public key received');\n return encodeUCoordinate(pu);\n}\nfunction decodeUCoordinate(uEnc) {\n const u = ensureBytes(uEnc);\n assertLen(32, u);\n u[31] &= 127;\n return bytesToNumberLE(u);\n}\nexports.curve25519 = {\n BASE_POINT_U: '0900000000000000000000000000000000000000000000000000000000000000',\n scalarMult(privateKey, publicKey) {\n const u = decodeUCoordinate(publicKey);\n const p = decodeScalar25519(privateKey);\n return montgomeryLadderChecked(u, p);\n },\n scalarMultBase(privateKey) {\n return exports.curve25519.scalarMult(privateKey, exports.curve25519.BASE_POINT_U);\n },\n};\nconst crypto = {\n node: crypto_1.default,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexports.utils = {\n TORSION_SUBGROUP: [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n ],\n bytesToHex,\n getExtendedPublicKey,\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return new Uint8Array(randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n return exports.utils.randomBytes(32);\n },\n sha512: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-512', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n return Uint8Array.from(crypto.node.createHash('sha512').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha512 function\");\n }\n },\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point.equals(Point.BASE) ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_1n);\n return cached;\n },\n};\n","\"use strict\";\n/*! noble-secp256k1 - MIT License (c) Paul Miller (paulmillr.com) */\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.utils = exports.schnorr = exports.verify = exports.signSync = exports.sign = exports.getSharedSecret = exports.recoverPublicKey = exports.getPublicKey = exports.SignResult = exports.Signature = exports.Point = exports.CURVE = void 0;\nconst crypto_1 = __importDefault(require(\"crypto\"));\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _3n = BigInt(3);\nconst _8n = BigInt(8);\nconst POW_2_256 = _2n ** BigInt(256);\nconst CURVE = {\n a: _0n,\n b: BigInt(7),\n P: POW_2_256 - _2n ** BigInt(32) - BigInt(977),\n n: POW_2_256 - BigInt('432420386565659656852420866394968145599'),\n h: _1n,\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n};\nexports.CURVE = CURVE;\nfunction weistrass(x) {\n const { a, b } = CURVE;\n return mod(x ** _3n + a * x + b);\n}\nconst USE_ENDOMORPHISM = CURVE.a === _0n;\nclass JacobianPoint {\n constructor(x, y, z) {\n this.x = x;\n this.y = y;\n this.z = z;\n }\n static fromAffine(p) {\n if (!(p instanceof Point)) {\n throw new TypeError('JacobianPoint#fromAffine: expected Point');\n }\n return new JacobianPoint(p.x, p.y, _1n);\n }\n static toAffineBatch(points) {\n const toInv = invertBatch(points.map((p) => p.z));\n return points.map((p, i) => p.toAffine(toInv[i]));\n }\n static normalizeZ(points) {\n return JacobianPoint.toAffineBatch(points).map(JacobianPoint.fromAffine);\n }\n equals(other) {\n const a = this;\n const b = other;\n const az2 = mod(a.z * a.z);\n const az3 = mod(a.z * az2);\n const bz2 = mod(b.z * b.z);\n const bz3 = mod(b.z * bz2);\n return mod(a.x * bz2) === mod(az2 * b.x) && mod(a.y * bz3) === mod(az3 * b.y);\n }\n negate() {\n return new JacobianPoint(this.x, mod(-this.y), this.z);\n }\n double() {\n const X1 = this.x;\n const Y1 = this.y;\n const Z1 = this.z;\n const A = mod(X1 ** _2n);\n const B = mod(Y1 ** _2n);\n const C = mod(B ** _2n);\n const D = mod(_2n * (mod(mod((X1 + B) ** _2n)) - A - C));\n const E = mod(_3n * A);\n const F = mod(E ** _2n);\n const X3 = mod(F - _2n * D);\n const Y3 = mod(E * (D - X3) - _8n * C);\n const Z3 = mod(_2n * Y1 * Z1);\n return new JacobianPoint(X3, Y3, Z3);\n }\n add(other) {\n if (!(other instanceof JacobianPoint)) {\n throw new TypeError('JacobianPoint#add: expected JacobianPoint');\n }\n const X1 = this.x;\n const Y1 = this.y;\n const Z1 = this.z;\n const X2 = other.x;\n const Y2 = other.y;\n const Z2 = other.z;\n if (X2 === _0n || Y2 === _0n)\n return this;\n if (X1 === _0n || Y1 === _0n)\n return other;\n const Z1Z1 = mod(Z1 ** _2n);\n const Z2Z2 = mod(Z2 ** _2n);\n const U1 = mod(X1 * Z2Z2);\n const U2 = mod(X2 * Z1Z1);\n const S1 = mod(Y1 * Z2 * Z2Z2);\n const S2 = mod(mod(Y2 * Z1) * Z1Z1);\n const H = mod(U2 - U1);\n const r = mod(S2 - S1);\n if (H === _0n) {\n if (r === _0n) {\n return this.double();\n }\n else {\n return JacobianPoint.ZERO;\n }\n }\n const HH = mod(H ** _2n);\n const HHH = mod(H * HH);\n const V = mod(U1 * HH);\n const X3 = mod(r ** _2n - HHH - _2n * V);\n const Y3 = mod(r * (V - X3) - S1 * HHH);\n const Z3 = mod(Z1 * Z2 * H);\n return new JacobianPoint(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiplyUnsafe(scalar) {\n let n = normalizeScalar(scalar);\n if (!USE_ENDOMORPHISM) {\n let p = JacobianPoint.ZERO;\n let d = this;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let k1p = JacobianPoint.ZERO;\n let k2p = JacobianPoint.ZERO;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n return k1p.add(k2p);\n }\n precomputeWindow(W) {\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n let points = [];\n let p = this;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n for (let i = 1; i < 2 ** (W - 1); i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n wNAF(n, affinePoint) {\n if (!affinePoint && this.equals(JacobianPoint.BASE))\n affinePoint = Point.BASE;\n const W = (affinePoint && affinePoint._WINDOW_SIZE) || 1;\n if (256 % W) {\n throw new Error('Point#wNAF: Invalid precomputation window, must be power of 2');\n }\n let precomputes = affinePoint && pointPrecomputes.get(affinePoint);\n if (!precomputes) {\n precomputes = this.precomputeWindow(W);\n if (affinePoint && W !== 1) {\n precomputes = JacobianPoint.normalizeZ(precomputes);\n pointPrecomputes.set(affinePoint, precomputes);\n }\n }\n let p = JacobianPoint.ZERO;\n let f = JacobianPoint.ZERO;\n const windows = USE_ENDOMORPHISM ? 128 / W + 1 : 256 / W + 1;\n const windowSize = 2 ** (W - 1);\n const mask = BigInt(2 ** W - 1);\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n let wbits = Number(n & mask);\n n >>= shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n if (wbits === 0) {\n let pr = precomputes[offset];\n if (window % 2)\n pr = pr.negate();\n f = f.add(pr);\n }\n else {\n let cached = precomputes[offset + Math.abs(wbits) - 1];\n if (wbits < 0)\n cached = cached.negate();\n p = p.add(cached);\n }\n }\n return { p, f };\n }\n multiply(scalar, affinePoint) {\n let n = normalizeScalar(scalar);\n let point;\n let fake;\n if (USE_ENDOMORPHISM) {\n let { k1neg, k1, k2neg, k2 } = splitScalarEndo(n);\n let { p: k1p, f: f1p } = this.wNAF(k1, affinePoint);\n let { p: k2p, f: f2p } = this.wNAF(k2, affinePoint);\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new JacobianPoint(mod(k2p.x * CURVE.beta), k2p.y, k2p.z);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n let { p, f } = this.wNAF(n, affinePoint);\n point = p;\n fake = f;\n }\n return JacobianPoint.normalizeZ([point, fake])[0];\n }\n toAffine(invZ = invert(this.z)) {\n const invZ2 = invZ ** _2n;\n const x = mod(this.x * invZ2);\n const y = mod(this.y * invZ2 * invZ);\n return new Point(x, y);\n }\n}\nJacobianPoint.BASE = new JacobianPoint(CURVE.Gx, CURVE.Gy, _1n);\nJacobianPoint.ZERO = new JacobianPoint(_0n, _1n, _0n);\nconst pointPrecomputes = new WeakMap();\nclass Point {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n static fromCompressedHex(bytes) {\n const isShort = bytes.length === 32;\n const x = bytesToNumber(isShort ? bytes : bytes.slice(1));\n const y2 = weistrass(x);\n let y = sqrtMod(y2);\n const isYOdd = (y & _1n) === _1n;\n if (isShort) {\n if (isYOdd)\n y = mod(-y);\n }\n else {\n const isFirstByteOdd = (bytes[0] & 1) === 1;\n if (isFirstByteOdd !== isYOdd)\n y = mod(-y);\n }\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromUncompressedHex(bytes) {\n const x = bytesToNumber(bytes.slice(1, 33));\n const y = bytesToNumber(bytes.slice(33));\n const point = new Point(x, y);\n point.assertValidity();\n return point;\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n const header = bytes[0];\n if (bytes.length === 32 || (bytes.length === 33 && (header === 0x02 || header === 0x03))) {\n return this.fromCompressedHex(bytes);\n }\n if (bytes.length === 65 && header === 0x04)\n return this.fromUncompressedHex(bytes);\n throw new Error(`Point.fromHex: received invalid point. Expected 32-33 compressed bytes or 65 uncompressed bytes, not ${bytes.length}`);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normalizePrivateKey(privateKey));\n }\n static fromSignature(msgHash, signature, recovery) {\n let h = msgHash instanceof Uint8Array ? bytesToNumber(msgHash) : hexToNumber(msgHash);\n const sig = normalizeSignature(signature);\n const { r, s } = sig;\n if (recovery !== 0 && recovery !== 1) {\n throw new Error('Cannot recover signature: invalid yParity bit');\n }\n const prefix = 2 + (recovery & 1);\n const P_ = Point.fromHex(`0${prefix}${pad64(r)}`);\n const sP = JacobianPoint.fromAffine(P_).multiplyUnsafe(s);\n const hG = JacobianPoint.BASE.multiply(h);\n const rinv = invert(r, CURVE.n);\n const Q = sP.subtract(hG).multiplyUnsafe(rinv);\n const point = Q.toAffine();\n point.assertValidity();\n return point;\n }\n toRawBytes(isCompressed = false) {\n return hexToBytes(this.toHex(isCompressed));\n }\n toHex(isCompressed = false) {\n const x = pad64(this.x);\n if (isCompressed) {\n return `${this.y & _1n ? '03' : '02'}${x}`;\n }\n else {\n return `04${x}${pad64(this.y)}`;\n }\n }\n toHexX() {\n return this.toHex(true).slice(2);\n }\n toRawX() {\n return this.toRawBytes(true).slice(1);\n }\n assertValidity() {\n const msg = 'Point is not on elliptic curve';\n const { P } = CURVE;\n const { x, y } = this;\n if (x === _0n || y === _0n || x >= P || y >= P)\n throw new Error(msg);\n const left = mod(y * y);\n const right = weistrass(x);\n if ((left - right) % P !== _0n)\n throw new Error(msg);\n }\n equals(other) {\n return this.x === other.x && this.y === other.y;\n }\n negate() {\n return new Point(this.x, mod(-this.y));\n }\n double() {\n return JacobianPoint.fromAffine(this).double().toAffine();\n }\n add(other) {\n return JacobianPoint.fromAffine(this).add(JacobianPoint.fromAffine(other)).toAffine();\n }\n subtract(other) {\n return this.add(other.negate());\n }\n multiply(scalar) {\n return JacobianPoint.fromAffine(this).multiply(scalar, this).toAffine();\n }\n}\nexports.Point = Point;\nPoint.BASE = new Point(CURVE.Gx, CURVE.Gy);\nPoint.ZERO = new Point(_0n, _0n);\nfunction sliceDer(s) {\n return Number.parseInt(s[0], 16) >= 8 ? '00' + s : s;\n}\nclass Signature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n }\n static fromCompact(hex) {\n if (typeof hex !== 'string' && !(hex instanceof Uint8Array)) {\n throw new TypeError(`Signature.fromCompact: Expected string or Uint8Array`);\n }\n const str = hex instanceof Uint8Array ? bytesToHex(hex) : hex;\n if (str.length !== 128)\n throw new Error('Signature.fromCompact: Expected 64-byte hex');\n const sig = new Signature(hexToNumber(str.slice(0, 64)), hexToNumber(str.slice(64, 128)));\n sig.assertValidity();\n return sig;\n }\n static fromDER(hex) {\n const fn = 'Signature.fromDER';\n if (typeof hex !== 'string' && !(hex instanceof Uint8Array)) {\n throw new TypeError(`${fn}: Expected string or Uint8Array`);\n }\n const str = hex instanceof Uint8Array ? bytesToHex(hex) : hex;\n const length = parseByte(str.slice(2, 4));\n if (str.slice(0, 2) !== '30' || length !== str.length - 4 || str.slice(4, 6) !== '02') {\n throw new Error(`${fn}: Invalid signature ${str}`);\n }\n const rLen = parseByte(str.slice(6, 8));\n const rEnd = 8 + rLen;\n const rr = str.slice(8, rEnd);\n if (rr.startsWith('00') && parseByte(rr.slice(2, 4)) <= 0x7f) {\n throw new Error(`${fn}: Invalid r with trailing length`);\n }\n const r = hexToNumber(rr);\n const separator = str.slice(rEnd, rEnd + 2);\n if (separator !== '02') {\n throw new Error(`${fn}: Invalid r-s separator`);\n }\n const sLen = parseByte(str.slice(rEnd + 2, rEnd + 4));\n const diff = length - sLen - rLen - 10;\n if (diff > 0 || diff === -4) {\n throw new Error(`${fn}: Invalid total length`);\n }\n if (sLen > length - rLen - 4) {\n throw new Error(`${fn}: Invalid s`);\n }\n const sStart = rEnd + 4;\n const ss = str.slice(sStart, sStart + sLen);\n if (ss.startsWith('00') && parseByte(ss.slice(2, 4)) <= 0x7f) {\n throw new Error(`${fn}: Invalid s with trailing length`);\n }\n const s = hexToNumber(ss);\n const sig = new Signature(r, s);\n sig.assertValidity();\n return sig;\n }\n static fromHex(hex) {\n return this.fromDER(hex);\n }\n assertValidity() {\n const { r, s } = this;\n if (!isWithinCurveOrder(r))\n throw new Error('Invalid Signature: r must be 0 < r < n');\n if (!isWithinCurveOrder(s))\n throw new Error('Invalid Signature: s must be 0 < s < n');\n }\n toDERRawBytes(isCompressed = false) {\n return hexToBytes(this.toDERHex(isCompressed));\n }\n toDERHex(isCompressed = false) {\n const sHex = sliceDer(numberToHex(this.s));\n if (isCompressed)\n return sHex;\n const rHex = sliceDer(numberToHex(this.r));\n const rLen = numberToHex(rHex.length / 2);\n const sLen = numberToHex(sHex.length / 2);\n const length = numberToHex(rHex.length / 2 + sHex.length / 2 + 4);\n return `30${length}02${rLen}${rHex}02${sLen}${sHex}`;\n }\n toRawBytes() {\n return this.toDERRawBytes();\n }\n toHex() {\n return this.toDERHex();\n }\n toCompactRawBytes() {\n return hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return pad64(this.r) + pad64(this.s);\n }\n}\nexports.Signature = Signature;\nexports.SignResult = Signature;\nfunction concatBytes(...arrays) {\n if (arrays.length === 1)\n return arrays[0];\n const length = arrays.reduce((a, arr) => a + arr.length, 0);\n const result = new Uint8Array(length);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const arr = arrays[i];\n result.set(arr, pad);\n pad += arr.length;\n }\n return result;\n}\nfunction bytesToHex(uint8a) {\n let hex = '';\n for (let i = 0; i < uint8a.length; i++) {\n hex += uint8a[i].toString(16).padStart(2, '0');\n }\n return hex;\n}\nfunction pad64(num) {\n return num.toString(16).padStart(64, '0');\n}\nfunction pad32b(num) {\n return hexToBytes(pad64(num));\n}\nfunction numberToHex(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nfunction hexToNumber(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToNumber: expected string, got ' + typeof hex);\n }\n return BigInt(`0x${hex}`);\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== 'string') {\n throw new TypeError('hexToBytes: expected string, got ' + typeof hex);\n }\n if (hex.length % 2)\n throw new Error('hexToBytes: received invalid unpadded hex');\n const array = new Uint8Array(hex.length / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n array[i] = Number.parseInt(hex.slice(j, j + 2), 16);\n }\n return array;\n}\nfunction ensureBytes(hex) {\n return hex instanceof Uint8Array ? hex : hexToBytes(hex);\n}\nfunction bytesToNumber(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nfunction parseByte(str) {\n return Number.parseInt(str, 16) * 2;\n}\nfunction normalizeScalar(num) {\n if (typeof num === 'number' && num > 0 && Number.isSafeInteger(num))\n return BigInt(num);\n if (typeof num === 'bigint' && isWithinCurveOrder(num))\n return num;\n throw new TypeError('Expected valid private scalar: 0 < scalar < curve.n');\n}\nfunction mod(a, b = CURVE.P) {\n const result = a % b;\n return result >= 0 ? result : b + result;\n}\nfunction pow2(x, power) {\n const { P } = CURVE;\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= P;\n }\n return res;\n}\nfunction sqrtMod(x) {\n const { P } = CURVE;\n const _6n = BigInt(6);\n const _11n = BigInt(11);\n const _22n = BigInt(22);\n const _23n = BigInt(23);\n const _44n = BigInt(44);\n const _88n = BigInt(88);\n const b2 = (x * x * x) % P;\n const b3 = (b2 * b2 * x) % P;\n const b6 = (pow2(b3, _3n) * b3) % P;\n const b9 = (pow2(b6, _3n) * b3) % P;\n const b11 = (pow2(b9, _2n) * b2) % P;\n const b22 = (pow2(b11, _11n) * b11) % P;\n const b44 = (pow2(b22, _22n) * b22) % P;\n const b88 = (pow2(b44, _44n) * b44) % P;\n const b176 = (pow2(b88, _88n) * b88) % P;\n const b220 = (pow2(b176, _44n) * b44) % P;\n const b223 = (pow2(b220, _3n) * b3) % P;\n const t1 = (pow2(b223, _23n) * b22) % P;\n const t2 = (pow2(t1, _6n) * b2) % P;\n return pow2(t2, _2n);\n}\nfunction invert(number, modulo = CURVE.P) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\nfunction invertBatch(nums, n = CURVE.P) {\n const len = nums.length;\n const scratch = new Array(len);\n let acc = _1n;\n for (let i = 0; i < len; i++) {\n if (nums[i] === _0n)\n continue;\n scratch[i] = acc;\n acc = mod(acc * nums[i], n);\n }\n acc = invert(acc, n);\n for (let i = len - 1; i >= 0; i--) {\n if (nums[i] === _0n)\n continue;\n const tmp = mod(acc * nums[i], n);\n nums[i] = mod(acc * scratch[i], n);\n acc = tmp;\n }\n return nums;\n}\nconst divNearest = (a, b) => (a + b / _2n) / b;\nconst POW_2_128 = _2n ** BigInt(128);\nfunction splitScalarEndo(k) {\n const { n } = CURVE;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128)\n throw new Error('splitScalarEndo: Endomorphism failed');\n return { k1neg, k1, k2neg, k2 };\n}\nfunction truncateHash(hash) {\n if (typeof hash !== 'string')\n hash = bytesToHex(hash);\n let msg = hexToNumber(hash || '0');\n const byteLength = hash.length / 2;\n const delta = byteLength * 8 - 256;\n if (delta > 0) {\n msg = msg >> BigInt(delta);\n }\n if (msg >= CURVE.n) {\n msg -= CURVE.n;\n }\n return msg;\n}\nfunction _abc6979(msgHash, privateKey) {\n if (msgHash == null)\n throw new Error(`sign: expected valid msgHash, not \"${msgHash}\"`);\n const num = typeof msgHash === 'string' ? hexToNumber(msgHash) : bytesToNumber(msgHash);\n const h1 = pad32b(num);\n const h1n = bytesToNumber(h1);\n const x = pad32b(privateKey);\n let v = new Uint8Array(32).fill(1);\n let k = new Uint8Array(32).fill(0);\n const b0 = Uint8Array.from([0x00]);\n const b1 = Uint8Array.from([0x01]);\n return { h1, h1n, x, v, k, b0, b1 };\n}\nasync function getQRSrfc6979(msgHash, privateKey) {\n const privKey = normalizePrivateKey(privateKey);\n let { h1, h1n, x, v, k, b0, b1 } = _abc6979(msgHash, privKey);\n const hmac = exports.utils.hmacSha256;\n k = await hmac(k, v, b0, x, h1);\n v = await hmac(k, v);\n k = await hmac(k, v, b1, x, h1);\n v = await hmac(k, v);\n for (let i = 0; i < 1000; i++) {\n v = await hmac(k, v);\n let qrs = calcQRSFromK(v, h1n, privKey);\n if (qrs)\n return qrs;\n k = await hmac(k, v, b0);\n v = await hmac(k, v);\n }\n throw new TypeError('secp256k1: Tried 1,000 k values for sign(), all were invalid');\n}\nfunction getQRSrfc6979Sync(msgHash, privateKey) {\n const privKey = normalizePrivateKey(privateKey);\n let { h1, h1n, x, v, k, b0, b1 } = _abc6979(msgHash, privKey);\n const hmac = exports.utils.hmacSha256Sync;\n if (!hmac)\n throw new Error('utils.hmacSha256Sync is undefined, you need to set it');\n k = hmac(k, v, b0, x, h1);\n if (k instanceof Promise)\n throw new Error('To use sync sign(), ensure utils.hmacSha256 is sync');\n v = hmac(k, v);\n k = hmac(k, v, b1, x, h1);\n v = hmac(k, v);\n for (let i = 0; i < 1000; i++) {\n v = hmac(k, v);\n let qrs = calcQRSFromK(v, h1n, privKey);\n if (qrs)\n return qrs;\n k = hmac(k, v, b0);\n v = hmac(k, v);\n }\n throw new TypeError('secp256k1: Tried 1,000 k values for sign(), all were invalid');\n}\nfunction isWithinCurveOrder(num) {\n return 0 < num && num < CURVE.n;\n}\nfunction calcQRSFromK(v, msg, priv) {\n const k = bytesToNumber(v);\n if (!isWithinCurveOrder(k))\n return;\n const max = CURVE.n;\n const q = Point.BASE.multiply(k);\n const r = mod(q.x, max);\n const s = mod(invert(k, max) * (msg + r * priv), max);\n if (r === _0n || s === _0n)\n return;\n return [q, r, s];\n}\nfunction normalizePrivateKey(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else if (typeof key === 'number' && Number.isSafeInteger(key) && key > 0) {\n num = BigInt(key);\n }\n else if (typeof key === 'string') {\n if (key.length !== 64)\n throw new Error('Expected 32 bytes of private key');\n num = hexToNumber(key);\n }\n else if (key instanceof Uint8Array) {\n if (key.length !== 32)\n throw new Error('Expected 32 bytes of private key');\n num = bytesToNumber(key);\n }\n else {\n throw new TypeError('Expected valid private key');\n }\n if (!isWithinCurveOrder(num))\n throw new Error('Expected private key: 0 < key < n');\n return num;\n}\nfunction normalizePublicKey(publicKey) {\n if (publicKey instanceof Point) {\n publicKey.assertValidity();\n return publicKey;\n }\n else {\n return Point.fromHex(publicKey);\n }\n}\nfunction normalizeSignature(signature) {\n if (signature instanceof Signature) {\n signature.assertValidity();\n return signature;\n }\n else {\n return Signature.fromDER(signature);\n }\n}\nfunction getPublicKey(privateKey, isCompressed = false) {\n const point = Point.fromPrivateKey(privateKey);\n if (typeof privateKey === 'string') {\n return point.toHex(isCompressed);\n }\n return point.toRawBytes(isCompressed);\n}\nexports.getPublicKey = getPublicKey;\nfunction recoverPublicKey(msgHash, signature, recovery) {\n const point = Point.fromSignature(msgHash, signature, recovery);\n return typeof msgHash === 'string' ? point.toHex() : point.toRawBytes();\n}\nexports.recoverPublicKey = recoverPublicKey;\nfunction isPub(item) {\n const arr = item instanceof Uint8Array;\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === 33 || len === 65;\n if (str)\n return len === 66 || len === 130;\n if (item instanceof Point)\n return true;\n return false;\n}\nfunction getSharedSecret(privateA, publicB, isCompressed = false) {\n if (isPub(privateA))\n throw new TypeError('getSharedSecret: first arg must be private key');\n if (!isPub(publicB))\n throw new TypeError('getSharedSecret: second arg must be public key');\n const b = normalizePublicKey(publicB);\n b.assertValidity();\n const shared = b.multiply(normalizePrivateKey(privateA));\n return typeof privateA === 'string'\n ? shared.toHex(isCompressed)\n : shared.toRawBytes(isCompressed);\n}\nexports.getSharedSecret = getSharedSecret;\nfunction QRSToSig(qrs, opts, str = false) {\n const [q, r, s] = qrs;\n let { canonical, der, recovered } = opts;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n);\n let adjustedS = s;\n const HIGH_NUMBER = CURVE.n >> _1n;\n if (s > HIGH_NUMBER && canonical) {\n adjustedS = CURVE.n - s;\n recovery ^= 1;\n }\n const sig = new Signature(r, adjustedS);\n sig.assertValidity();\n const hex = der === false ? sig.toCompactHex() : sig.toDERHex();\n const hashed = str ? hex : hexToBytes(hex);\n return recovered ? [hashed, recovery] : hashed;\n}\nasync function sign(msgHash, privKey, opts = {}) {\n return QRSToSig(await getQRSrfc6979(msgHash, privKey), opts, typeof msgHash === 'string');\n}\nexports.sign = sign;\nfunction signSync(msgHash, privKey, opts = {}) {\n return QRSToSig(getQRSrfc6979Sync(msgHash, privKey), opts, typeof msgHash === 'string');\n}\nexports.signSync = signSync;\nfunction verify(signature, msgHash, publicKey) {\n const { n } = CURVE;\n let sig;\n try {\n sig = normalizeSignature(signature);\n }\n catch (error) {\n return false;\n }\n const { r, s } = sig;\n const h = truncateHash(msgHash);\n if (h === _0n)\n return false;\n const pubKey = JacobianPoint.fromAffine(normalizePublicKey(publicKey));\n const s1 = invert(s, n);\n const u1 = mod(h * s1, n);\n const u2 = mod(r * s1, n);\n const Ghs1 = JacobianPoint.BASE.multiply(u1);\n const Prs1 = pubKey.multiplyUnsafe(u2);\n const R = Ghs1.add(Prs1).toAffine();\n const v = mod(R.x, n);\n return v === r;\n}\nexports.verify = verify;\nasync function taggedHash(tag, ...messages) {\n const tagB = new Uint8Array(tag.split('').map((c) => c.charCodeAt(0)));\n const tagH = await exports.utils.sha256(tagB);\n const h = await exports.utils.sha256(concatBytes(tagH, tagH, ...messages));\n return bytesToNumber(h);\n}\nasync function createChallenge(x, P, message) {\n const rx = pad32b(x);\n const t = await taggedHash('BIP0340/challenge', rx, P.toRawX(), message);\n return mod(t, CURVE.n);\n}\nfunction hasEvenY(point) {\n return mod(point.y, _2n) === _0n;\n}\nclass SchnorrSignature {\n constructor(r, s) {\n this.r = r;\n this.s = s;\n if (r <= _0n || s <= _0n || r >= CURVE.P || s >= CURVE.n)\n throw new Error('Invalid signature');\n }\n static fromHex(hex) {\n const bytes = ensureBytes(hex);\n if (bytes.length !== 64) {\n throw new TypeError(`SchnorrSignature.fromHex: expected 64 bytes, not ${bytes.length}`);\n }\n const r = bytesToNumber(bytes.slice(0, 32));\n const s = bytesToNumber(bytes.slice(32));\n return new SchnorrSignature(r, s);\n }\n toHex() {\n return pad64(this.r) + pad64(this.s);\n }\n toRawBytes() {\n return hexToBytes(this.toHex());\n }\n}\nfunction schnorrGetPublicKey(privateKey) {\n const P = Point.fromPrivateKey(privateKey);\n return typeof privateKey === 'string' ? P.toHexX() : P.toRawX();\n}\nasync function schnorrSign(msgHash, privateKey, auxRand = exports.utils.randomBytes()) {\n if (msgHash == null)\n throw new TypeError(`sign: Expected valid message, not \"${msgHash}\"`);\n if (!privateKey)\n privateKey = _0n;\n const { n } = CURVE;\n const m = ensureBytes(msgHash);\n const d0 = normalizePrivateKey(privateKey);\n const rand = ensureBytes(auxRand);\n if (rand.length !== 32)\n throw new TypeError('sign: Expected 32 bytes of aux randomness');\n const P = Point.fromPrivateKey(d0);\n const d = hasEvenY(P) ? d0 : n - d0;\n const t0h = await taggedHash('BIP0340/aux', rand);\n const t = d ^ t0h;\n const k0h = await taggedHash('BIP0340/nonce', pad32b(t), P.toRawX(), m);\n const k0 = mod(k0h, n);\n if (k0 === _0n)\n throw new Error('sign: Creation of signature failed. k is zero');\n const R = Point.fromPrivateKey(k0);\n const k = hasEvenY(R) ? k0 : n - k0;\n const e = await createChallenge(R.x, P, m);\n const sig = new SchnorrSignature(R.x, mod(k + e * d, n));\n const isValid = await schnorrVerify(sig.toRawBytes(), m, P.toRawX());\n if (!isValid)\n throw new Error('sign: Invalid signature produced');\n return typeof msgHash === 'string' ? sig.toHex() : sig.toRawBytes();\n}\nasync function schnorrVerify(signature, msgHash, publicKey) {\n const sig = signature instanceof SchnorrSignature ? signature : SchnorrSignature.fromHex(signature);\n const m = typeof msgHash === 'string' ? hexToBytes(msgHash) : msgHash;\n const P = normalizePublicKey(publicKey);\n const e = await createChallenge(sig.r, P, m);\n const sG = Point.fromPrivateKey(sig.s);\n const eP = P.multiply(e);\n const R = sG.subtract(eP);\n if (R.equals(Point.BASE) || !hasEvenY(R) || R.x !== sig.r)\n return false;\n return true;\n}\nexports.schnorr = {\n Signature: SchnorrSignature,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n};\nPoint.BASE._setWindowSize(8);\nconst crypto = {\n node: crypto_1.default,\n web: typeof self === 'object' && 'crypto' in self ? self.crypto : undefined,\n};\nexports.utils = {\n isValidPrivateKey(privateKey) {\n try {\n normalizePrivateKey(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n randomBytes: (bytesLength = 32) => {\n if (crypto.web) {\n return crypto.web.getRandomValues(new Uint8Array(bytesLength));\n }\n else if (crypto.node) {\n const { randomBytes } = crypto.node;\n return new Uint8Array(randomBytes(bytesLength).buffer);\n }\n else {\n throw new Error(\"The environment doesn't have randomBytes function\");\n }\n },\n randomPrivateKey: () => {\n let i = 8;\n while (i--) {\n const b32 = exports.utils.randomBytes(32);\n const num = bytesToNumber(b32);\n if (isWithinCurveOrder(num) && num !== _1n)\n return b32;\n }\n throw new Error('Valid private key was not found in 8 iterations. PRNG is broken');\n },\n sha256: async (message) => {\n if (crypto.web) {\n const buffer = await crypto.web.subtle.digest('SHA-256', message.buffer);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHash } = crypto.node;\n return Uint8Array.from(createHash('sha256').update(message).digest());\n }\n else {\n throw new Error(\"The environment doesn't have sha256 function\");\n }\n },\n hmacSha256: async (key, ...messages) => {\n if (crypto.web) {\n const ckey = await crypto.web.subtle.importKey('raw', key, { name: 'HMAC', hash: { name: 'SHA-256' } }, false, ['sign']);\n const message = concatBytes(...messages);\n const buffer = await crypto.web.subtle.sign('HMAC', ckey, message);\n return new Uint8Array(buffer);\n }\n else if (crypto.node) {\n const { createHmac } = crypto.node;\n const hash = createHmac('sha256', key);\n for (let message of messages) {\n hash.update(message);\n }\n return Uint8Array.from(hash.digest());\n }\n else {\n throw new Error(\"The environment doesn't have hmac-sha256 function\");\n }\n },\n sha256Sync: undefined,\n hmacSha256Sync: undefined,\n precompute(windowSize = 8, point = Point.BASE) {\n const cached = point === Point.BASE ? point : new Point(point.x, point.y);\n cached._setWindowSize(windowSize);\n cached.multiply(_3n);\n return cached;\n },\n};\n","\"use strict\";\r\nmodule.exports = asPromise;\r\n\r\n/**\r\n * Callback as used by {@link util.asPromise}.\r\n * @typedef asPromiseCallback\r\n * @type {function}\r\n * @param {Error|null} error Error, if any\r\n * @param {...*} params Additional arguments\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Returns a promise from a node-style callback function.\r\n * @memberof util\r\n * @param {asPromiseCallback} fn Function to call\r\n * @param {*} ctx Function context\r\n * @param {...*} params Function arguments\r\n * @returns {Promise<*>} Promisified function\r\n */\r\nfunction asPromise(fn, ctx/*, varargs */) {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0,\r\n index = 2,\r\n pending = true;\r\n while (index < arguments.length)\r\n params[offset++] = arguments[index++];\r\n return new Promise(function executor(resolve, reject) {\r\n params[offset] = function callback(err/*, varargs */) {\r\n if (pending) {\r\n pending = false;\r\n if (err)\r\n reject(err);\r\n else {\r\n var params = new Array(arguments.length - 1),\r\n offset = 0;\r\n while (offset < params.length)\r\n params[offset++] = arguments[offset];\r\n resolve.apply(null, params);\r\n }\r\n }\r\n };\r\n try {\r\n fn.apply(ctx || null, params);\r\n } catch (err) {\r\n if (pending) {\r\n pending = false;\r\n reject(err);\r\n }\r\n }\r\n });\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal base64 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar base64 = exports;\r\n\r\n/**\r\n * Calculates the byte length of a base64 encoded string.\r\n * @param {string} string Base64 encoded string\r\n * @returns {number} Byte length\r\n */\r\nbase64.length = function length(string) {\r\n var p = string.length;\r\n if (!p)\r\n return 0;\r\n var n = 0;\r\n while (--p % 4 > 1 && string.charAt(p) === \"=\")\r\n ++n;\r\n return Math.ceil(string.length * 3) / 4 - n;\r\n};\r\n\r\n// Base64 encoding table\r\nvar b64 = new Array(64);\r\n\r\n// Base64 decoding table\r\nvar s64 = new Array(123);\r\n\r\n// 65..90, 97..122, 48..57, 43, 47\r\nfor (var i = 0; i < 64;)\r\n s64[b64[i] = i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i - 59 | 43] = i++;\r\n\r\n/**\r\n * Encodes a buffer to a base64 encoded string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} Base64 encoded string\r\n */\r\nbase64.encode = function encode(buffer, start, end) {\r\n var parts = null,\r\n chunk = [];\r\n var i = 0, // output index\r\n j = 0, // goto index\r\n t; // temporary\r\n while (start < end) {\r\n var b = buffer[start++];\r\n switch (j) {\r\n case 0:\r\n chunk[i++] = b64[b >> 2];\r\n t = (b & 3) << 4;\r\n j = 1;\r\n break;\r\n case 1:\r\n chunk[i++] = b64[t | b >> 4];\r\n t = (b & 15) << 2;\r\n j = 2;\r\n break;\r\n case 2:\r\n chunk[i++] = b64[t | b >> 6];\r\n chunk[i++] = b64[b & 63];\r\n j = 0;\r\n break;\r\n }\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (j) {\r\n chunk[i++] = b64[t];\r\n chunk[i++] = 61;\r\n if (j === 1)\r\n chunk[i++] = 61;\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\nvar invalidEncoding = \"invalid encoding\";\r\n\r\n/**\r\n * Decodes a base64 encoded string to a buffer.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Number of bytes written\r\n * @throws {Error} If encoding is invalid\r\n */\r\nbase64.decode = function decode(string, buffer, offset) {\r\n var start = offset;\r\n var j = 0, // goto index\r\n t; // temporary\r\n for (var i = 0; i < string.length;) {\r\n var c = string.charCodeAt(i++);\r\n if (c === 61 && j > 1)\r\n break;\r\n if ((c = s64[c]) === undefined)\r\n throw Error(invalidEncoding);\r\n switch (j) {\r\n case 0:\r\n t = c;\r\n j = 1;\r\n break;\r\n case 1:\r\n buffer[offset++] = t << 2 | (c & 48) >> 4;\r\n t = c;\r\n j = 2;\r\n break;\r\n case 2:\r\n buffer[offset++] = (t & 15) << 4 | (c & 60) >> 2;\r\n t = c;\r\n j = 3;\r\n break;\r\n case 3:\r\n buffer[offset++] = (t & 3) << 6 | c;\r\n j = 0;\r\n break;\r\n }\r\n }\r\n if (j === 1)\r\n throw Error(invalidEncoding);\r\n return offset - start;\r\n};\r\n\r\n/**\r\n * Tests if the specified string appears to be base64 encoded.\r\n * @param {string} string String to test\r\n * @returns {boolean} `true` if probably base64 encoded, otherwise false\r\n */\r\nbase64.test = function test(string) {\r\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(string);\r\n};\r\n","\"use strict\";\r\nmodule.exports = EventEmitter;\r\n\r\n/**\r\n * Constructs a new event emitter instance.\r\n * @classdesc A minimal event emitter.\r\n * @memberof util\r\n * @constructor\r\n */\r\nfunction EventEmitter() {\r\n\r\n /**\r\n * Registered listeners.\r\n * @type {Object.<string,*>}\r\n * @private\r\n */\r\n this._listeners = {};\r\n}\r\n\r\n/**\r\n * Registers an event listener.\r\n * @param {string} evt Event name\r\n * @param {function} fn Listener\r\n * @param {*} [ctx] Listener context\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.on = function on(evt, fn, ctx) {\r\n (this._listeners[evt] || (this._listeners[evt] = [])).push({\r\n fn : fn,\r\n ctx : ctx || this\r\n });\r\n return this;\r\n};\r\n\r\n/**\r\n * Removes an event listener or any matching listeners if arguments are omitted.\r\n * @param {string} [evt] Event name. Removes all listeners if omitted.\r\n * @param {function} [fn] Listener to remove. Removes all listeners of `evt` if omitted.\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.off = function off(evt, fn) {\r\n if (evt === undefined)\r\n this._listeners = {};\r\n else {\r\n if (fn === undefined)\r\n this._listeners[evt] = [];\r\n else {\r\n var listeners = this._listeners[evt];\r\n for (var i = 0; i < listeners.length;)\r\n if (listeners[i].fn === fn)\r\n listeners.splice(i, 1);\r\n else\r\n ++i;\r\n }\r\n }\r\n return this;\r\n};\r\n\r\n/**\r\n * Emits an event by calling its listeners with the specified arguments.\r\n * @param {string} evt Event name\r\n * @param {...*} args Arguments\r\n * @returns {util.EventEmitter} `this`\r\n */\r\nEventEmitter.prototype.emit = function emit(evt) {\r\n var listeners = this._listeners[evt];\r\n if (listeners) {\r\n var args = [],\r\n i = 1;\r\n for (; i < arguments.length;)\r\n args.push(arguments[i++]);\r\n for (i = 0; i < listeners.length;)\r\n listeners[i].fn.apply(listeners[i++].ctx, args);\r\n }\r\n return this;\r\n};\r\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\nmodule.exports = inquire;\r\n\r\n/**\r\n * Requires a module only if available.\r\n * @memberof util\r\n * @param {string} moduleName Module to require\r\n * @returns {?Object} Required module if available and not empty, otherwise `null`\r\n */\r\nfunction inquire(moduleName) {\r\n try {\r\n var mod = eval(\"quire\".replace(/^/,\"re\"))(moduleName); // eslint-disable-line no-eval\r\n if (mod && (mod.length || Object.keys(mod).length))\r\n return mod;\r\n } catch (e) {} // eslint-disable-line no-empty\r\n return null;\r\n}\r\n","\"use strict\";\r\nmodule.exports = pool;\r\n\r\n/**\r\n * An allocator as used by {@link util.pool}.\r\n * @typedef PoolAllocator\r\n * @type {function}\r\n * @param {number} size Buffer size\r\n * @returns {Uint8Array} Buffer\r\n */\r\n\r\n/**\r\n * A slicer as used by {@link util.pool}.\r\n * @typedef PoolSlicer\r\n * @type {function}\r\n * @param {number} start Start offset\r\n * @param {number} end End offset\r\n * @returns {Uint8Array} Buffer slice\r\n * @this {Uint8Array}\r\n */\r\n\r\n/**\r\n * A general purpose buffer pool.\r\n * @memberof util\r\n * @function\r\n * @param {PoolAllocator} alloc Allocator\r\n * @param {PoolSlicer} slice Slicer\r\n * @param {number} [size=8192] Slab size\r\n * @returns {PoolAllocator} Pooled allocator\r\n */\r\nfunction pool(alloc, slice, size) {\r\n var SIZE = size || 8192;\r\n var MAX = SIZE >>> 1;\r\n var slab = null;\r\n var offset = SIZE;\r\n return function pool_alloc(size) {\r\n if (size < 1 || size > MAX)\r\n return alloc(size);\r\n if (offset + size > SIZE) {\r\n slab = alloc(SIZE);\r\n offset = 0;\r\n }\r\n var buf = slice.call(slab, offset, offset += size);\r\n if (offset & 7) // align to 32 bit\r\n offset = (offset | 7) + 1;\r\n return buf;\r\n };\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package binary provides functions for encoding and decoding numbers in byte arrays.\n */\n\nimport { isSafeInteger } from \"@stablelib/int\";\n\n// TODO(dchest): add asserts for correct value ranges and array offsets.\n\n/**\n * Reads 2 bytes from array starting at offset as big-endian\n * signed 16-bit integer and returns it.\n */\nexport function readInt16BE(array: Uint8Array, offset = 0): number {\n return (((array[offset + 0] << 8) | array[offset + 1]) << 16) >> 16;\n}\n\n/**\n * Reads 2 bytes from array starting at offset as big-endian\n * unsigned 16-bit integer and returns it.\n */\nexport function readUint16BE(array: Uint8Array, offset = 0): number {\n return ((array[offset + 0] << 8) | array[offset + 1]) >>> 0;\n}\n\n/**\n * Reads 2 bytes from array starting at offset as little-endian\n * signed 16-bit integer and returns it.\n */\nexport function readInt16LE(array: Uint8Array, offset = 0): number {\n return (((array[offset + 1] << 8) | array[offset]) << 16) >> 16;\n}\n\n/**\n * Reads 2 bytes from array starting at offset as little-endian\n * unsigned 16-bit integer and returns it.\n */\nexport function readUint16LE(array: Uint8Array, offset = 0): number {\n return ((array[offset + 1] << 8) | array[offset]) >>> 0;\n}\n\n/**\n * Writes 2-byte big-endian representation of 16-bit unsigned\n * value to byte array starting at offset.\n *\n * If byte array is not given, creates a new 2-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint16BE(value: number, out = new Uint8Array(2), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 8;\n out[offset + 1] = value >>> 0;\n return out;\n}\n\nexport const writeInt16BE = writeUint16BE;\n\n/**\n * Writes 2-byte little-endian representation of 16-bit unsigned\n * value to array starting at offset.\n *\n * If byte array is not given, creates a new 2-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint16LE(value: number, out = new Uint8Array(2), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 0;\n out[offset + 1] = value >>> 8;\n return out;\n}\n\nexport const writeInt16LE = writeUint16LE;\n\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * signed 32-bit integer and returns it.\n */\nexport function readInt32BE(array: Uint8Array, offset = 0): number {\n return (array[offset] << 24) |\n (array[offset + 1] << 16) |\n (array[offset + 2] << 8) |\n array[offset + 3];\n}\n\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * unsigned 32-bit integer and returns it.\n */\nexport function readUint32BE(array: Uint8Array, offset = 0): number {\n return ((array[offset] << 24) |\n (array[offset + 1] << 16) |\n (array[offset + 2] << 8) |\n array[offset + 3]) >>> 0;\n}\n\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * signed 32-bit integer and returns it.\n */\nexport function readInt32LE(array: Uint8Array, offset = 0): number {\n return (array[offset + 3] << 24) |\n (array[offset + 2] << 16) |\n (array[offset + 1] << 8) |\n array[offset];\n}\n\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * unsigned 32-bit integer and returns it.\n */\nexport function readUint32LE(array: Uint8Array, offset = 0): number {\n return ((array[offset + 3] << 24) |\n (array[offset + 2] << 16) |\n (array[offset + 1] << 8) |\n array[offset]) >>> 0;\n}\n\n/**\n * Writes 4-byte big-endian representation of 32-bit unsigned\n * value to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint32BE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 24;\n out[offset + 1] = value >>> 16;\n out[offset + 2] = value >>> 8;\n out[offset + 3] = value >>> 0;\n return out;\n}\n\nexport const writeInt32BE = writeUint32BE;\n\n/**\n * Writes 4-byte little-endian representation of 32-bit unsigned\n * value to array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint32LE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n out[offset + 0] = value >>> 0;\n out[offset + 1] = value >>> 8;\n out[offset + 2] = value >>> 16;\n out[offset + 3] = value >>> 24;\n return out;\n}\n\n\nexport const writeInt32LE = writeUint32LE;\n\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * signed 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports exact\n * numbers in range -9007199254740991 to 9007199254740991.\n * If the number stored in the byte array is outside this range,\n * the result is not exact.\n */\nexport function readInt64BE(array: Uint8Array, offset = 0): number {\n const hi = readInt32BE(array, offset);\n const lo = readInt32BE(array, offset + 4);\n return hi * 0x100000000 + lo - ((lo>>31) * 0x100000000);\n}\n\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * unsigned 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports values up to 2^53-1.\n */\nexport function readUint64BE(array: Uint8Array, offset = 0): number {\n const hi = readUint32BE(array, offset);\n const lo = readUint32BE(array, offset + 4);\n return hi * 0x100000000 + lo;\n}\n\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * signed 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports exact\n * numbers in range -9007199254740991 to 9007199254740991.\n * If the number stored in the byte array is outside this range,\n * the result is not exact.\n */\nexport function readInt64LE(array: Uint8Array, offset = 0): number {\n const lo = readInt32LE(array, offset);\n const hi = readInt32LE(array, offset + 4);\n return hi * 0x100000000 + lo - ((lo>>31) * 0x100000000);\n}\n\n\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * unsigned 64-bit integer and returns it.\n *\n * IMPORTANT: due to JavaScript limitation, supports values up to 2^53-1.\n */\nexport function readUint64LE(array: Uint8Array, offset = 0): number {\n const lo = readUint32LE(array, offset);\n const hi = readUint32LE(array, offset + 4);\n return hi * 0x100000000 + lo;\n}\n\n/**\n * Writes 8-byte big-endian representation of 64-bit unsigned\n * value to byte array starting at offset.\n *\n * Due to JavaScript limitation, supports values up to 2^53-1.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint64BE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n writeUint32BE(value / 0x100000000 >>> 0, out, offset);\n writeUint32BE(value >>> 0, out, offset + 4);\n return out;\n}\n\nexport const writeInt64BE = writeUint64BE;\n\n/**\n * Writes 8-byte little-endian representation of 64-bit unsigned\n * value to byte array starting at offset.\n *\n * Due to JavaScript limitation, supports values up to 2^53-1.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeUint64LE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n writeUint32LE(value >>> 0, out, offset);\n writeUint32LE(value / 0x100000000 >>> 0, out, offset + 4);\n return out;\n}\n\nexport const writeInt64LE = writeUint64LE;\n\n/**\n * Reads bytes from array starting at offset as big-endian\n * unsigned bitLen-bit integer and returns it.\n *\n * Supports bit lengths divisible by 8, up to 48.\n */\nexport function readUintBE(bitLength: number, array: Uint8Array, offset = 0): number {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"readUintBE supports only bitLengths divisible by 8\");\n }\n if (bitLength / 8 > array.length - offset) {\n throw new Error(\"readUintBE: array is too short for the given bitLength\");\n }\n let result = 0;\n let mul = 1;\n for (let i = bitLength / 8 + offset - 1; i >= offset; i--) {\n result += array[i] * mul;\n mul *= 256;\n }\n return result;\n}\n\n/**\n * Reads bytes from array starting at offset as little-endian\n * unsigned bitLen-bit integer and returns it.\n *\n * Supports bit lengths divisible by 8, up to 48.\n */\nexport function readUintLE(bitLength: number, array: Uint8Array, offset = 0): number {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"readUintLE supports only bitLengths divisible by 8\");\n }\n if (bitLength / 8 > array.length - offset) {\n throw new Error(\"readUintLE: array is too short for the given bitLength\");\n }\n let result = 0;\n let mul = 1;\n for (let i = offset; i < offset + bitLength / 8; i++) {\n result += array[i] * mul;\n mul *= 256;\n }\n return result;\n}\n\n/**\n * Writes a big-endian representation of bitLen-bit unsigned\n * value to array starting at offset.\n *\n * Supports bit lengths divisible by 8, up to 48.\n *\n * If byte array is not given, creates a new one.\n *\n * Returns the output byte array.\n */\nexport function writeUintBE(bitLength: number, value: number,\n out = new Uint8Array(bitLength / 8), offset = 0): Uint8Array {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"writeUintBE supports only bitLengths divisible by 8\");\n }\n if (!isSafeInteger(value)) {\n throw new Error(\"writeUintBE value must be an integer\");\n }\n let div = 1;\n for (let i = bitLength / 8 + offset - 1; i >= offset; i--) {\n out[i] = (value / div) & 0xff;\n div *= 256;\n }\n return out;\n}\n\n/**\n * Writes a little-endian representation of bitLen-bit unsigned\n * value to array starting at offset.\n *\n * Supports bit lengths divisible by 8, up to 48.\n *\n * If byte array is not given, creates a new one.\n *\n * Returns the output byte array.\n */\nexport function writeUintLE(bitLength: number, value: number,\n out = new Uint8Array(bitLength / 8), offset = 0): Uint8Array {\n // TODO(dchest): implement support for bitLengths non-divisible by 8\n if (bitLength % 8 !== 0) {\n throw new Error(\"writeUintLE supports only bitLengths divisible by 8\");\n }\n if (!isSafeInteger(value)) {\n throw new Error(\"writeUintLE value must be an integer\");\n }\n let div = 1;\n for (let i = offset; i < offset + bitLength / 8; i++) {\n out[i] = (value / div) & 0xff;\n div *= 256;\n }\n return out;\n}\n\n/**\n * Reads 4 bytes from array starting at offset as big-endian\n * 32-bit floating-point number and returns it.\n */\nexport function readFloat32BE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset);\n}\n\n/**\n * Reads 4 bytes from array starting at offset as little-endian\n * 32-bit floating-point number and returns it.\n */\nexport function readFloat32LE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset, true);\n}\n\n/**\n * Reads 8 bytes from array starting at offset as big-endian\n * 64-bit floating-point number (\"double\") and returns it.\n */\nexport function readFloat64BE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset);\n}\n\n/**\n * Reads 8 bytes from array starting at offset as little-endian\n * 64-bit floating-point number (\"double\") and returns it.\n */\nexport function readFloat64LE(array: Uint8Array, offset = 0): number {\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset, true);\n}\n\n/**\n * Writes 4-byte big-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat32BE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat32(offset, value);\n return out;\n}\n\n/**\n * Writes 4-byte little-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 4-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat32LE(value: number, out = new Uint8Array(4), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat32(offset, value, true);\n return out;\n}\n\n/**\n * Writes 8-byte big-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat64BE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat64(offset, value);\n return out;\n}\n\n/**\n * Writes 8-byte little-endian floating-point representation of value\n * to byte array starting at offset.\n *\n * If byte array is not given, creates a new 8-byte one.\n *\n * Returns the output byte array.\n */\nexport function writeFloat64LE(value: number, out = new Uint8Array(8), offset = 0): Uint8Array {\n const view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n view.setFloat64(offset, value, true);\n return out;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package chacha implements ChaCha stream cipher.\n */\n\nimport { writeUint32LE } from \"@stablelib/binary\";\nimport { wipe } from \"@stablelib/wipe\";\n\n// Number of ChaCha rounds (ChaCha20).\nconst ROUNDS = 20;\n\n// Applies the ChaCha core function to 16-byte input,\n// 32-byte key key, and puts the result into 64-byte array out.\nfunction core(out: Uint8Array, input: Uint8Array, key: Uint8Array): void {\n let j0 = 0x61707865; // \"expa\" -- ChaCha's \"sigma\" constant\n let j1 = 0x3320646E; // \"nd 3\" for 32-byte keys\n let j2 = 0x79622D32; // \"2-by\"\n let j3 = 0x6B206574; // \"te k\"\n let j4 = (key[3] << 24) | (key[2] << 16) | (key[1] << 8) | key[0];\n let j5 = (key[7] << 24) | (key[6] << 16) | (key[5] << 8) | key[4];\n let j6 = (key[11] << 24) | (key[10] << 16) | (key[9] << 8) | key[8];\n let j7 = (key[15] << 24) | (key[14] << 16) | (key[13] << 8) | key[12];\n let j8 = (key[19] << 24) | (key[18] << 16) | (key[17] << 8) | key[16];\n let j9 = (key[23] << 24) | (key[22] << 16) | (key[21] << 8) | key[20];\n let j10 = (key[27] << 24) | (key[26] << 16) | (key[25] << 8) | key[24];\n let j11 = (key[31] << 24) | (key[30] << 16) | (key[29] << 8) | key[28];\n let j12 = (input[3] << 24) | (input[2] << 16) | (input[1] << 8) | input[0];\n let j13 = (input[7] << 24) | (input[6] << 16) | (input[5] << 8) | input[4];\n let j14 = (input[11] << 24) | (input[10] << 16) | (input[9] << 8) | input[8];\n let j15 = (input[15] << 24) | (input[14] << 16) | (input[13] << 8) | input[12];\n\n let x0 = j0;\n let x1 = j1;\n let x2 = j2;\n let x3 = j3;\n let x4 = j4;\n let x5 = j5;\n let x6 = j6;\n let x7 = j7;\n let x8 = j8;\n let x9 = j9;\n let x10 = j10;\n let x11 = j11;\n let x12 = j12;\n let x13 = j13;\n let x14 = j14;\n let x15 = j15;\n\n for (let i = 0; i < ROUNDS; i += 2) {\n x0 = x0 + x4 | 0; x12 ^= x0; x12 = x12 >>> (32 - 16) | x12 << 16;\n x8 = x8 + x12 | 0; x4 ^= x8; x4 = x4 >>> (32 - 12) | x4 << 12;\n x1 = x1 + x5 | 0; x13 ^= x1; x13 = x13 >>> (32 - 16) | x13 << 16;\n x9 = x9 + x13 | 0; x5 ^= x9; x5 = x5 >>> (32 - 12) | x5 << 12;\n\n x2 = x2 + x6 | 0; x14 ^= x2; x14 = x14 >>> (32 - 16) | x14 << 16;\n x10 = x10 + x14 | 0; x6 ^= x10; x6 = x6 >>> (32 - 12) | x6 << 12;\n x3 = x3 + x7 | 0; x15 ^= x3; x15 = x15 >>> (32 - 16) | x15 << 16;\n x11 = x11 + x15 | 0; x7 ^= x11; x7 = x7 >>> (32 - 12) | x7 << 12;\n\n x2 = x2 + x6 | 0; x14 ^= x2; x14 = x14 >>> (32 - 8) | x14 << 8;\n x10 = x10 + x14 | 0; x6 ^= x10; x6 = x6 >>> (32 - 7) | x6 << 7;\n x3 = x3 + x7 | 0; x15 ^= x3; x15 = x15 >>> (32 - 8) | x15 << 8;\n x11 = x11 + x15 | 0; x7 ^= x11; x7 = x7 >>> (32 - 7) | x7 << 7;\n\n x1 = x1 + x5 | 0; x13 ^= x1; x13 = x13 >>> (32 - 8) | x13 << 8;\n x9 = x9 + x13 | 0; x5 ^= x9; x5 = x5 >>> (32 - 7) | x5 << 7;\n x0 = x0 + x4 | 0; x12 ^= x0; x12 = x12 >>> (32 - 8) | x12 << 8;\n x8 = x8 + x12 | 0; x4 ^= x8; x4 = x4 >>> (32 - 7) | x4 << 7;\n\n x0 = x0 + x5 | 0; x15 ^= x0; x15 = x15 >>> (32 - 16) | x15 << 16;\n x10 = x10 + x15 | 0; x5 ^= x10; x5 = x5 >>> (32 - 12) | x5 << 12;\n x1 = x1 + x6 | 0; x12 ^= x1; x12 = x12 >>> (32 - 16) | x12 << 16;\n x11 = x11 + x12 | 0; x6 ^= x11; x6 = x6 >>> (32 - 12) | x6 << 12;\n\n x2 = x2 + x7 | 0; x13 ^= x2; x13 = x13 >>> (32 - 16) | x13 << 16;\n x8 = x8 + x13 | 0; x7 ^= x8; x7 = x7 >>> (32 - 12) | x7 << 12;\n x3 = x3 + x4 | 0; x14 ^= x3; x14 = x14 >>> (32 - 16) | x14 << 16;\n x9 = x9 + x14 | 0; x4 ^= x9; x4 = x4 >>> (32 - 12) | x4 << 12;\n\n x2 = x2 + x7 | 0; x13 ^= x2; x13 = x13 >>> (32 - 8) | x13 << 8;\n x8 = x8 + x13 | 0; x7 ^= x8; x7 = x7 >>> (32 - 7) | x7 << 7;\n x3 = x3 + x4 | 0; x14 ^= x3; x14 = x14 >>> (32 - 8) | x14 << 8;\n x9 = x9 + x14 | 0; x4 ^= x9; x4 = x4 >>> (32 - 7) | x4 << 7;\n\n x1 = x1 + x6 | 0; x12 ^= x1; x12 = x12 >>> (32 - 8) | x12 << 8;\n x11 = x11 + x12 | 0; x6 ^= x11; x6 = x6 >>> (32 - 7) | x6 << 7;\n x0 = x0 + x5 | 0; x15 ^= x0; x15 = x15 >>> (32 - 8) | x15 << 8;\n x10 = x10 + x15 | 0; x5 ^= x10; x5 = x5 >>> (32 - 7) | x5 << 7;\n }\n writeUint32LE(x0 + j0 | 0, out, 0);\n writeUint32LE(x1 + j1 | 0, out, 4);\n writeUint32LE(x2 + j2 | 0, out, 8);\n writeUint32LE(x3 + j3 | 0, out, 12);\n writeUint32LE(x4 + j4 | 0, out, 16);\n writeUint32LE(x5 + j5 | 0, out, 20);\n writeUint32LE(x6 + j6 | 0, out, 24);\n writeUint32LE(x7 + j7 | 0, out, 28);\n writeUint32LE(x8 + j8 | 0, out, 32);\n writeUint32LE(x9 + j9 | 0, out, 36);\n writeUint32LE(x10 + j10 | 0, out, 40);\n writeUint32LE(x11 + j11 | 0, out, 44);\n writeUint32LE(x12 + j12 | 0, out, 48);\n writeUint32LE(x13 + j13 | 0, out, 52);\n writeUint32LE(x14 + j14 | 0, out, 56);\n writeUint32LE(x15 + j15 | 0, out, 60);\n}\n\n/**\n * Encrypt src with ChaCha20 stream generated for the given 32-byte key and\n * 8-byte (as in original implementation) or 12-byte (as in RFC7539) nonce and\n * write the result into dst and return it.\n *\n * dst and src may be the same, but otherwise must not overlap.\n *\n * If nonce is 12 bytes, users should not encrypt more than 256 GiB with the\n * same key and nonce, otherwise the stream will repeat. The function will\n * throw error if counter overflows to prevent this.\n *\n * If nonce is 8 bytes, the output is practically unlimited (2^70 bytes, which\n * is more than a million petabytes). However, it is not recommended to\n * generate 8-byte nonces randomly, as the chance of collision is high.\n *\n * Never use the same key and nonce to encrypt more than one message.\n *\n * If nonceInplaceCounterLength is not 0, the nonce is assumed to be a 16-byte\n * array with stream counter in first nonceInplaceCounterLength bytes and nonce\n * in the last remaining bytes. The counter will be incremented inplace for\n * each ChaCha block. This is useful if you need to encrypt one stream of data\n * in chunks.\n */\nexport function streamXOR(key: Uint8Array, nonce: Uint8Array,\n src: Uint8Array, dst: Uint8Array, nonceInplaceCounterLength = 0): Uint8Array {\n // We only support 256-bit keys.\n if (key.length !== 32) {\n throw new Error(\"ChaCha: key size must be 32 bytes\");\n }\n\n if (dst.length < src.length) {\n throw new Error(\"ChaCha: destination is shorter than source\");\n }\n\n let nc: Uint8Array;\n let counterLength: number;\n\n if (nonceInplaceCounterLength === 0) {\n if (nonce.length !== 8 && nonce.length !== 12) {\n throw new Error(\"ChaCha nonce must be 8 or 12 bytes\");\n }\n nc = new Uint8Array(16);\n // First counterLength bytes of nc are counter, starting with zero.\n counterLength = nc.length - nonce.length;\n // Last bytes of nc after counterLength are nonce, set them.\n nc.set(nonce, counterLength);\n } else {\n if (nonce.length !== 16) {\n throw new Error(\"ChaCha nonce with counter must be 16 bytes\");\n }\n // This will update passed nonce with counter inplace.\n nc = nonce;\n counterLength = nonceInplaceCounterLength;\n }\n\n // Allocate temporary space for ChaCha block.\n const block = new Uint8Array(64);\n\n for (let i = 0; i < src.length; i += 64) {\n // Generate a block.\n core(block, nc, key);\n\n // XOR block bytes with src into dst.\n for (let j = i; j < i + 64 && j < src.length; j++) {\n dst[j] = src[j] ^ block[j - i];\n }\n\n // Increment counter.\n incrementCounter(nc, 0, counterLength);\n }\n\n // Cleanup temporary space.\n wipe(block);\n\n if (nonceInplaceCounterLength === 0) {\n // Cleanup counter.\n wipe(nc);\n }\n\n return dst;\n}\n\n/**\n * Generate ChaCha20 stream for the given 32-byte key and 8-byte or 12-byte\n * nonce and write it into dst and return it.\n *\n * Never use the same key and nonce to generate more than one stream.\n *\n * If nonceInplaceCounterLength is not 0, it behaves the same with respect to\n * the nonce as described in the streamXOR documentation.\n *\n * stream is like streamXOR with all-zero src.\n */\nexport function stream(key: Uint8Array, nonce: Uint8Array,\n dst: Uint8Array, nonceInplaceCounterLength = 0): Uint8Array {\n wipe(dst);\n return streamXOR(key, nonce, dst, dst, nonceInplaceCounterLength);\n}\n\nfunction incrementCounter(counter: Uint8Array, pos: number, len: number) {\n let carry = 1;\n while (len--) {\n carry = carry + (counter[pos] & 0xff) | 0;\n counter[pos] = carry & 0xff;\n carry >>>= 8;\n pos++;\n }\n if (carry > 0) {\n throw new Error(\"ChaCha: counter overflow\");\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package chacha20poly1305 implements ChaCha20-Poly1305 AEAD.\n */\n\nimport { AEAD } from \"@stablelib/aead\";\nimport { streamXOR, stream } from \"@stablelib/chacha\";\nimport { Poly1305 } from \"@stablelib/poly1305\";\nimport { wipe } from \"@stablelib/wipe\";\nimport { writeUint64LE } from \"@stablelib/binary\";\nimport { equal } from \"@stablelib/constant-time\";\n\nexport const KEY_LENGTH = 32;\nexport const NONCE_LENGTH = 12;\nexport const TAG_LENGTH = 16;\n\nconst ZEROS = new Uint8Array(16);\n\n/**\n * ChaCha20-Poly1305 Authenticated Encryption with Associated Data.\n *\n * Defined in RFC7539.\n */\nexport class ChaCha20Poly1305 implements AEAD {\n readonly nonceLength = NONCE_LENGTH;\n readonly tagLength = TAG_LENGTH;\n\n private _key: Uint8Array;\n\n /**\n * Creates a new instance with the given 32-byte key.\n */\n constructor(key: Uint8Array) {\n if (key.length !== KEY_LENGTH) {\n throw new Error(\"ChaCha20Poly1305 needs 32-byte key\");\n }\n // Copy key.\n this._key = new Uint8Array(key);\n }\n\n /**\n * Encrypts and authenticates plaintext, authenticates associated data,\n * and returns sealed ciphertext, which includes authentication tag.\n *\n * RFC7539 specifies 12 bytes for nonce. It may be this 12-byte nonce\n * (\"IV\"), or full 16-byte counter (called \"32-bit fixed-common part\")\n * and nonce.\n *\n * If dst is given (it must be the size of plaintext + the size of tag\n * length) the result will be put into it. Dst and plaintext must not\n * overlap.\n */\n seal(nonce: Uint8Array, plaintext: Uint8Array, associatedData?: Uint8Array,\n dst?: Uint8Array): Uint8Array {\n if (nonce.length > 16) {\n throw new Error(\"ChaCha20Poly1305: incorrect nonce length\");\n }\n\n // Allocate space for counter, and set nonce as last bytes of it.\n const counter = new Uint8Array(16);\n counter.set(nonce, counter.length - nonce.length);\n\n // Generate authentication key by taking first 32-bytes of stream.\n // We pass full counter, which has 12-byte nonce and 4-byte block counter,\n // and it will get incremented after generating the block, which is\n // exactly what we need: we only use the first 32 bytes of 64-byte\n // ChaCha block and discard the next 32 bytes.\n const authKey = new Uint8Array(32);\n stream(this._key, counter, authKey, 4);\n\n // Allocate space for sealed ciphertext.\n const resultLength = plaintext.length + this.tagLength;\n let result;\n if (dst) {\n if (dst.length !== resultLength) {\n throw new Error(\"ChaCha20Poly1305: incorrect destination length\");\n }\n result = dst;\n } else {\n result = new Uint8Array(resultLength);\n }\n\n // Encrypt plaintext.\n streamXOR(this._key, counter, plaintext, result, 4);\n\n // Authenticate.\n // XXX: can \"simplify\" here: pass full result (which is already padded\n // due to zeroes prepared for tag), and ciphertext length instead of\n // subarray of result.\n this._authenticate(result.subarray(result.length - this.tagLength, result.length),\n authKey, result.subarray(0, result.length - this.tagLength), associatedData);\n\n // Cleanup.\n wipe(counter);\n\n return result;\n }\n\n /**\n * Authenticates sealed ciphertext (which includes authentication tag) and\n * associated data, decrypts ciphertext and returns decrypted plaintext.\n *\n * RFC7539 specifies 12 bytes for nonce. It may be this 12-byte nonce\n * (\"IV\"), or full 16-byte counter (called \"32-bit fixed-common part\")\n * and nonce.\n *\n * If authentication fails, it returns null.\n *\n * If dst is given (it must be of ciphertext length minus tag length),\n * the result will be put into it. Dst and plaintext must not overlap.\n */\n open(nonce: Uint8Array, sealed: Uint8Array, associatedData?: Uint8Array,\n dst?: Uint8Array): Uint8Array | null {\n if (nonce.length > 16) {\n throw new Error(\"ChaCha20Poly1305: incorrect nonce length\");\n }\n\n // Sealed ciphertext should at least contain tag.\n if (sealed.length < this.tagLength) {\n // TODO(dchest): should we throw here instead?\n return null;\n }\n\n // Allocate space for counter, and set nonce as last bytes of it.\n const counter = new Uint8Array(16);\n counter.set(nonce, counter.length - nonce.length);\n\n // Generate authentication key by taking first 32-bytes of stream.\n const authKey = new Uint8Array(32);\n stream(this._key, counter, authKey, 4);\n\n // Authenticate.\n // XXX: can simplify and avoid allocation: since authenticate()\n // already allocates tag (from Poly1305.digest(), it can return)\n // it instead of copying to calculatedTag. But then in seal()\n // we'll need to copy it.\n const calculatedTag = new Uint8Array(this.tagLength);\n this._authenticate(calculatedTag, authKey,\n sealed.subarray(0, sealed.length - this.tagLength), associatedData);\n\n // Constant-time compare tags and return null if they differ.\n if (!equal(calculatedTag,\n sealed.subarray(sealed.length - this.tagLength, sealed.length))) {\n return null;\n }\n\n // Allocate space for decrypted plaintext.\n const resultLength = sealed.length - this.tagLength;\n let result;\n if (dst) {\n if (dst.length !== resultLength) {\n throw new Error(\"ChaCha20Poly1305: incorrect destination length\");\n }\n result = dst;\n } else {\n result = new Uint8Array(resultLength);\n }\n\n // Decrypt.\n streamXOR(this._key, counter,\n sealed.subarray(0, sealed.length - this.tagLength), result, 4);\n\n // Cleanup.\n wipe(counter);\n\n return result;\n }\n\n clean(): this {\n wipe(this._key);\n return this;\n }\n\n private _authenticate(tagOut: Uint8Array, authKey: Uint8Array,\n ciphertext: Uint8Array, associatedData?: Uint8Array) {\n\n // Initialize Poly1305 with authKey.\n const h = new Poly1305(authKey);\n\n // Authenticate padded associated data.\n if (associatedData) {\n h.update(associatedData);\n if (associatedData.length % 16 > 0) {\n h.update(ZEROS.subarray(associatedData.length % 16));\n }\n }\n\n // Authenticate padded ciphertext.\n h.update(ciphertext);\n if (ciphertext.length % 16 > 0) {\n h.update(ZEROS.subarray(ciphertext.length % 16));\n }\n\n // Authenticate length of associated data.\n // XXX: can avoid allocation here?\n const length = new Uint8Array(8);\n if (associatedData) {\n writeUint64LE(associatedData.length, length);\n }\n h.update(length);\n\n // Authenticate length of ciphertext.\n writeUint64LE(ciphertext.length, length);\n h.update(length);\n\n // Get tag and copy it into tagOut.\n const tag = h.digest();\n for (let i = 0; i < tag.length; i++) {\n tagOut[i] = tag[i];\n }\n\n // Cleanup.\n h.clean();\n wipe(tag);\n wipe(length);\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package constant-time provides functions for performing algorithmically constant-time operations.\n */\n\n/**\n * NOTE! Due to the inability to guarantee real constant time evaluation of\n * anything in JavaScript VM, this is module is the best effort.\n */\n\n/**\n * Returns resultIfOne if subject is 1, or resultIfZero if subject is 0.\n *\n * Supports only 32-bit integers, so resultIfOne or resultIfZero are not\n * integers, they'll be converted to them with bitwise operations.\n */\nexport function select(subject: number, resultIfOne: number, resultIfZero: number): number {\n return (~(subject - 1) & resultIfOne) | ((subject - 1) & resultIfZero);\n}\n\n/**\n * Returns 1 if a <= b, or 0 if not.\n * Arguments must be positive 32-bit integers less than or equal to 2^31 - 1.\n */\nexport function lessOrEqual(a: number, b: number): number {\n return (((a | 0) - (b | 0) - 1) >>> 31) & 1;\n}\n\n/**\n * Returns 1 if a and b are of equal length and their contents\n * are equal, or 0 otherwise.\n *\n * Note that unlike in equal(), zero-length inputs are considered\n * the same, so this function will return 1.\n */\nexport function compare(a: Uint8Array, b: Uint8Array): number {\n if (a.length !== b.length) {\n return 0;\n }\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n result |= a[i] ^ b[i];\n }\n return (1 & ((result - 1) >>> 8));\n}\n\n/**\n * Returns true if a and b are of equal non-zero length,\n * and their contents are equal, or false otherwise.\n *\n * Note that unlike in compare() zero-length inputs are considered\n * _not_ equal, so this function will return false.\n */\nexport function equal(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length === 0 || b.length === 0) {\n return false;\n }\n return compare(a, b) !== 0;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package hash provides interface for hash functions.\n */\n\n/**\n * Hash interface describes properties of\n * cryptographic hash functions.\n */\nexport interface Hash {\n readonly digestLength: number;\n readonly blockSize: number;\n update(data: Uint8Array): this;\n reset(): this;\n finish(out: Uint8Array): this;\n digest(): Uint8Array;\n clean(): void;\n}\n\nexport interface SerializableHash extends Hash {\n saveState(): any;\n restoreState(savedState: any): this;\n cleanSavedState(savedState: any): void;\n}\n\nexport function isSerializableHash(h: Hash): h is SerializableHash {\n return (\n typeof (h as SerializableHash).saveState !== \"undefined\" &&\n typeof (h as SerializableHash).restoreState !== \"undefined\" &&\n typeof (h as SerializableHash).cleanSavedState !== \"undefined\"\n );\n}\n\n// TODO(dchest): figure out the standardized interface for XOF such as\n// SHAKE and BLAKE2X.\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package hkdf implements HKDF key derivation function.\n */\n\nimport { Hash } from \"@stablelib/hash\";\nimport { HMAC, hmac } from \"@stablelib/hmac\";\nimport { wipe } from \"@stablelib/wipe\";\n\n/**\n * HMAC-based Extract-and-Expand Key Derivation Function.\n *\n * Implements HKDF from RFC5869.\n *\n * Expands the given master key with salt and info into\n * a limited stream of key material.\n */\nexport class HKDF {\n private _hmac: HMAC;\n private _buffer: Uint8Array;\n private _bufpos: number;\n private _counter = new Uint8Array(1); // starts with zero\n private _hash: new () => Hash;\n private _info?: Uint8Array;\n\n /**\n * Create a new HKDF instance for the given hash function\n * with the master key, optional salt, and info.\n *\n * - Master key is a high-entropy secret key (not a password).\n * - Salt is a non-secret random value.\n * - Info is application- and/or context-specific information.\n */\n constructor(hash: new () => Hash,\n key: Uint8Array,\n salt = new Uint8Array(0),\n info?: Uint8Array) {\n\n this._hash = hash;\n this._info = info;\n\n // HKDF-Extract uses salt as HMAC key, and key as data.\n const okm = hmac(this._hash, salt, key);\n\n // Initialize HMAC for expanding with extracted key.\n this._hmac = new HMAC(hash, okm);\n\n // Allocate buffer.\n this._buffer = new Uint8Array(this._hmac.digestLength);\n this._bufpos = this._buffer.length;\n }\n\n // Fill buffer with new block of HKDF-Extract output.\n private _fillBuffer(): void {\n // Increment counter.\n this._counter[0]++;\n\n const ctr = this._counter[0];\n\n // Check if counter overflowed.\n if (ctr === 0) {\n throw new Error(\"hkdf: cannot expand more\");\n }\n\n // Prepare HMAC instance for new data with old key.\n this._hmac.reset();\n\n // Hash in previous output if it was generated\n // (i.e. counter is greater than 1).\n if (ctr > 1) {\n this._hmac.update(this._buffer);\n }\n\n // Hash in info if it exists.\n if (this._info) {\n this._hmac.update(this._info);\n }\n\n // Hash in the counter.\n this._hmac.update(this._counter);\n\n // Output result to buffer and clean HMAC instance.\n this._hmac.finish(this._buffer);\n\n // Reset buffer position.\n this._bufpos = 0;\n }\n\n /**\n * Expand returns next key material of the given length.\n *\n * It throws if expansion limit is reached (which is\n * 254 digests of the underlying HMAC function).\n */\n expand(length: number): Uint8Array {\n const out = new Uint8Array(length);\n for (let i = 0; i < out.length; i++) {\n if (this._bufpos === this._buffer.length) {\n this._fillBuffer();\n }\n out[i] = this._buffer[this._bufpos++];\n }\n return out;\n }\n\n clean(): void {\n this._hmac.clean();\n wipe(this._buffer);\n wipe(this._counter);\n this._bufpos = 0;\n }\n}\n\n// TODO(dchest): maybe implement deriveKey?\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package hmac implements HMAC algorithm.\n */\n\nimport { Hash, SerializableHash, isSerializableHash } from \"@stablelib/hash\";\nimport { equal as constantTimeEqual } from \"@stablelib/constant-time\";\nimport { wipe } from \"@stablelib/wipe\";\n\n/**\n * HMAC implements hash-based message authentication algorithm.\n */\nexport class HMAC implements SerializableHash {\n readonly blockSize: number;\n readonly digestLength: number;\n\n private _inner: Hash; // inner hash\n private _outer: Hash; // outer hash\n\n private _finished = false; // true if HMAC was finalized\n\n // Copies of hash states after keying.\n // Need for quick reset without hashing the key again.\n private _innerKeyedState: any | undefined;\n private _outerKeyedState: any | undefined;\n\n /**\n * Constructs a new HMAC with the given Hash and secret key.\n */\n constructor(hash: new () => Hash | SerializableHash, key: Uint8Array) {\n // Initialize inner and outer hashes.\n this._inner = new hash();\n this._outer = new hash();\n\n // Set block and digest sizes for this HMAC\n // instance to values from the hash.\n this.blockSize = this._outer.blockSize;\n this.digestLength = this._outer.digestLength;\n\n // Pad temporary stores a key (or its hash) padded with zeroes.\n const pad = new Uint8Array(this.blockSize);\n\n if (key.length > this.blockSize) {\n // If key is bigger than hash block size, it must be\n // hashed and this hash is used as a key instead.\n this._inner.update(key).finish(pad).clean();\n } else {\n // Otherwise, copy the key into pad.\n pad.set(key);\n }\n\n // Now two different keys are derived from padded key\n // by xoring a different byte value to each.\n\n // To make inner hash key, xor byte 0x36 into pad.\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36;\n }\n // Update inner hash with the result.\n this._inner.update(pad);\n\n // To make outer hash key, xor byte 0x5c into pad.\n // But since we already xored 0x36 there, we must\n // first undo this by xoring it again.\n for (let i = 0; i < pad.length; i++) {\n pad[i] ^= 0x36 ^ 0x5c;\n }\n // Update outer hash with the result.\n this._outer.update(pad);\n\n // Save states of both hashes, so that we can quickly restore\n // them later in reset() without the need to remember the actual\n // key and perform this initialization again.\n if (isSerializableHash(this._inner) && isSerializableHash(this._outer)) {\n this._innerKeyedState = this._inner.saveState();\n this._outerKeyedState = this._outer.saveState();\n }\n\n // Clean pad.\n wipe(pad);\n }\n\n /**\n * Returns HMAC state to the state initialized with key\n * to make it possible to run HMAC over the other data with the same\n * key without creating a new instance.\n */\n reset(): this {\n if (!isSerializableHash(this._inner) || !isSerializableHash(this._outer)) {\n throw new Error(\"hmac: can't reset() because hash doesn't implement restoreState()\");\n }\n // Restore keyed states of inner and outer hashes.\n this._inner.restoreState(this._innerKeyedState);\n this._outer.restoreState(this._outerKeyedState);\n this._finished = false;\n return this;\n }\n\n /**\n * Cleans HMAC state.\n */\n clean() {\n if (isSerializableHash(this._inner)) {\n this._inner.cleanSavedState(this._innerKeyedState);\n }\n if (isSerializableHash(this._outer)) {\n this._outer.cleanSavedState(this._outerKeyedState);\n }\n this._inner.clean();\n this._outer.clean();\n }\n\n /**\n * Updates state with provided data.\n */\n update(data: Uint8Array): this {\n this._inner.update(data);\n return this;\n }\n\n /**\n * Finalizes HMAC and puts the result in out.\n */\n finish(out: Uint8Array): this {\n if (this._finished) {\n // If HMAC was finalized, outer hash is also finalized,\n // so it produces the same digest it produced when it\n // was finalized.\n this._outer.finish(out);\n return this;\n }\n\n // Finalize inner hash and store the result temporarily.\n this._inner.finish(out);\n\n // Update outer hash with digest of inner hash and and finalize it.\n this._outer.update(out.subarray(0, this.digestLength)).finish(out);\n this._finished = true;\n\n return this;\n }\n\n /**\n * Returns the computed message authentication code.\n */\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n\n /**\n * Saves HMAC state.\n * This function is needed for PBKDF2 optimization.\n */\n saveState(): any {\n if (!isSerializableHash(this._inner)) {\n throw new Error(\"hmac: can't saveState() because hash doesn't implement it\");\n }\n return this._inner.saveState();\n }\n\n restoreState(savedState: any): this {\n if (!isSerializableHash(this._inner) || !isSerializableHash(this._outer)) {\n throw new Error(\"hmac: can't restoreState() because hash doesn't implement it\");\n }\n this._inner.restoreState(savedState);\n this._outer.restoreState(this._outerKeyedState);\n this._finished = false;\n return this;\n }\n\n cleanSavedState(savedState: any) {\n if (!isSerializableHash(this._inner)) {\n throw new Error(\"hmac: can't cleanSavedState() because hash doesn't implement it\");\n }\n this._inner.cleanSavedState(savedState);\n }\n}\n\n/**\n * Returns HMAC using the given hash constructor for the key over data.\n */\nexport function hmac(hash: new () => Hash, key: Uint8Array, data: Uint8Array): Uint8Array {\n const h = new HMAC(hash, key);\n h.update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n\n/**\n * Returns true if two HMAC digests are equal.\n * Uses constant-time comparison to avoid leaking timing information.\n *\n * Example:\n *\n * const receivedDigest = ...\n * const realDigest = hmac(SHA256, key, data);\n * if (!equal(receivedDigest, realDigest)) {\n * throw new Error(\"Authentication error\");\n * }\n */\nexport const equal = constantTimeEqual;\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package int provides helper functions for integerss.\n */\n\n// Shim using 16-bit pieces.\nfunction imulShim(a: number, b: number): number {\n const ah = (a >>> 16) & 0xffff, al = a & 0xffff;\n const bh = (b >>> 16) & 0xffff, bl = b & 0xffff;\n return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0) | 0);\n}\n\n/** 32-bit integer multiplication. */\n// Use system Math.imul if available, otherwise use our shim.\nexport const mul = (Math as { imul?(a: number, b: number): number }).imul || imulShim;\n\n/** 32-bit integer addition. */\nexport function add(a: number, b: number): number {\n return (a + b) | 0;\n}\n\n/** 32-bit integer subtraction. */\nexport function sub(a: number, b: number): number {\n return (a - b) | 0;\n}\n\n/** 32-bit integer left rotation */\nexport function rotl(x: number, n: number): number {\n return x << n | x >>> (32 - n);\n}\n\n/** 32-bit integer left rotation */\nexport function rotr(x: number, n: number): number {\n return x << (32 - n) | x >>> n;\n}\n\nfunction isIntegerShim(n: number): boolean {\n return typeof n === \"number\" && isFinite(n) && Math.floor(n) === n;\n}\n\n/**\n * Returns true if the argument is an integer number.\n *\n * In ES2015, Number.isInteger.\n */\nexport const isInteger = (Number as { isInteger?(n: number): boolean }).isInteger || isIntegerShim;\n\n/**\n * Math.pow(2, 53) - 1\n *\n * In ES2015 Number.MAX_SAFE_INTEGER.\n */\nexport const MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Returns true if the argument is a safe integer number\n * (-MIN_SAFE_INTEGER < number <= MAX_SAFE_INTEGER)\n *\n * In ES2015, Number.isSafeInteger.\n */\nexport const isSafeInteger = (n: number): boolean =>\n isInteger(n) && (n >= -MAX_SAFE_INTEGER && n <= MAX_SAFE_INTEGER);\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package poly1305 implements Poly1305 one-time message authentication algorithm.\n */\n\nimport { equal as constantTimeEqual } from \"@stablelib/constant-time\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport const DIGEST_LENGTH = 16;\n\n// Port of Andrew Moon's Poly1305-donna-16. Public domain.\n// https://github.com/floodyberry/poly1305-donna\n\n/**\n * Poly1305 computes 16-byte authenticator of message using\n * a one-time 32-byte key.\n *\n * Important: key should be used for only one message,\n * it should never repeat.\n */\nexport class Poly1305 {\n readonly digestLength = DIGEST_LENGTH;\n\n private _buffer = new Uint8Array(16);\n private _r = new Uint16Array(10);\n private _h = new Uint16Array(10);\n private _pad = new Uint16Array(8);\n private _leftover = 0;\n private _fin = 0;\n private _finished = false;\n\n constructor(key: Uint8Array) {\n let t0 = key[0] | key[1] << 8; this._r[0] = (t0) & 0x1fff;\n let t1 = key[2] | key[3] << 8; this._r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n let t2 = key[4] | key[5] << 8; this._r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n let t3 = key[6] | key[7] << 8; this._r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n let t4 = key[8] | key[9] << 8; this._r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this._r[5] = ((t4 >>> 1)) & 0x1ffe;\n let t5 = key[10] | key[11] << 8; this._r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n let t6 = key[12] | key[13] << 8; this._r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n let t7 = key[14] | key[15] << 8; this._r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this._r[9] = ((t7 >>> 5)) & 0x007f;\n\n this._pad[0] = key[16] | key[17] << 8;\n this._pad[1] = key[18] | key[19] << 8;\n this._pad[2] = key[20] | key[21] << 8;\n this._pad[3] = key[22] | key[23] << 8;\n this._pad[4] = key[24] | key[25] << 8;\n this._pad[5] = key[26] | key[27] << 8;\n this._pad[6] = key[28] | key[29] << 8;\n this._pad[7] = key[30] | key[31] << 8;\n }\n\n private _blocks(m: Uint8Array, mpos: number, bytes: number) {\n let hibit = this._fin ? 0 : 1 << 11;\n\n let h0 = this._h[0],\n h1 = this._h[1],\n h2 = this._h[2],\n h3 = this._h[3],\n h4 = this._h[4],\n h5 = this._h[5],\n h6 = this._h[6],\n h7 = this._h[7],\n h8 = this._h[8],\n h9 = this._h[9];\n\n let r0 = this._r[0],\n r1 = this._r[1],\n r2 = this._r[2],\n r3 = this._r[3],\n r4 = this._r[4],\n r5 = this._r[5],\n r6 = this._r[6],\n r7 = this._r[7],\n r8 = this._r[8],\n r9 = this._r[9];\n\n while (bytes >= 16) {\n let t0 = m[mpos + 0] | m[mpos + 1] << 8; h0 += (t0) & 0x1fff;\n let t1 = m[mpos + 2] | m[mpos + 3] << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n let t2 = m[mpos + 4] | m[mpos + 5] << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n let t3 = m[mpos + 6] | m[mpos + 7] << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n let t4 = m[mpos + 8] | m[mpos + 9] << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n let t5 = m[mpos + 10] | m[mpos + 11] << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n let t6 = m[mpos + 12] | m[mpos + 13] << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n let t7 = m[mpos + 14] | m[mpos + 15] << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n let c = 0;\n\n let d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n let d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n let d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n let d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n let d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n let d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n let d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n let d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n let d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n let d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this._h[0] = h0;\n this._h[1] = h1;\n this._h[2] = h2;\n this._h[3] = h3;\n this._h[4] = h4;\n this._h[5] = h5;\n this._h[6] = h6;\n this._h[7] = h7;\n this._h[8] = h8;\n this._h[9] = h9;\n }\n\n finish(mac: Uint8Array, macpos = 0): this {\n const g = new Uint16Array(10);\n let c: number;\n let mask: number;\n let f: number;\n let i: number;\n\n if (this._leftover) {\n i = this._leftover;\n this._buffer[i++] = 1;\n for (; i < 16; i++) {\n this._buffer[i] = 0;\n }\n this._fin = 1;\n this._blocks(this._buffer, 0, 16);\n }\n\n c = this._h[1] >>> 13;\n this._h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this._h[i] += c;\n c = this._h[i] >>> 13;\n this._h[i] &= 0x1fff;\n }\n this._h[0] += (c * 5);\n c = this._h[0] >>> 13;\n this._h[0] &= 0x1fff;\n this._h[1] += c;\n c = this._h[1] >>> 13;\n this._h[1] &= 0x1fff;\n this._h[2] += c;\n\n g[0] = this._h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this._h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) {\n g[i] &= mask;\n }\n mask = ~mask;\n for (i = 0; i < 10; i++) {\n this._h[i] = (this._h[i] & mask) | g[i];\n }\n\n this._h[0] = ((this._h[0]) | (this._h[1] << 13)) & 0xffff;\n this._h[1] = ((this._h[1] >>> 3) | (this._h[2] << 10)) & 0xffff;\n this._h[2] = ((this._h[2] >>> 6) | (this._h[3] << 7)) & 0xffff;\n this._h[3] = ((this._h[3] >>> 9) | (this._h[4] << 4)) & 0xffff;\n this._h[4] = ((this._h[4] >>> 12) | (this._h[5] << 1) | (this._h[6] << 14)) & 0xffff;\n this._h[5] = ((this._h[6] >>> 2) | (this._h[7] << 11)) & 0xffff;\n this._h[6] = ((this._h[7] >>> 5) | (this._h[8] << 8)) & 0xffff;\n this._h[7] = ((this._h[8] >>> 8) | (this._h[9] << 5)) & 0xffff;\n\n f = this._h[0] + this._pad[0];\n this._h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this._h[i] + this._pad[i]) | 0) + (f >>> 16)) | 0;\n this._h[i] = f & 0xffff;\n }\n\n mac[macpos + 0] = this._h[0] >>> 0;\n mac[macpos + 1] = this._h[0] >>> 8;\n mac[macpos + 2] = this._h[1] >>> 0;\n mac[macpos + 3] = this._h[1] >>> 8;\n mac[macpos + 4] = this._h[2] >>> 0;\n mac[macpos + 5] = this._h[2] >>> 8;\n mac[macpos + 6] = this._h[3] >>> 0;\n mac[macpos + 7] = this._h[3] >>> 8;\n mac[macpos + 8] = this._h[4] >>> 0;\n mac[macpos + 9] = this._h[4] >>> 8;\n mac[macpos + 10] = this._h[5] >>> 0;\n mac[macpos + 11] = this._h[5] >>> 8;\n mac[macpos + 12] = this._h[6] >>> 0;\n mac[macpos + 13] = this._h[6] >>> 8;\n mac[macpos + 14] = this._h[7] >>> 0;\n mac[macpos + 15] = this._h[7] >>> 8;\n\n this._finished = true;\n return this;\n }\n\n update(m: Uint8Array): this {\n let mpos = 0;\n let bytes = m.length;\n let want: number;\n\n if (this._leftover) {\n want = (16 - this._leftover);\n if (want > bytes) {\n want = bytes;\n }\n for (let i = 0; i < want; i++) {\n this._buffer[this._leftover + i] = m[mpos + i];\n }\n bytes -= want;\n mpos += want;\n this._leftover += want;\n if (this._leftover < 16) {\n return this;\n }\n this._blocks(this._buffer, 0, 16);\n this._leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this._blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (let i = 0; i < bytes; i++) {\n this._buffer[this._leftover + i] = m[mpos + i];\n }\n this._leftover += bytes;\n }\n\n return this;\n }\n\n digest(): Uint8Array {\n // TODO(dchest): it behaves differently than other hashes/HMAC,\n // because it throws when finished — others just return saved result.\n if (this._finished) {\n throw new Error(\"Poly1305 was finished\");\n }\n let mac = new Uint8Array(16);\n this.finish(mac);\n return mac;\n }\n\n clean(): this {\n wipe(this._buffer);\n wipe(this._r);\n wipe(this._h);\n wipe(this._pad);\n this._leftover = 0;\n this._fin = 0;\n this._finished = true; // mark as finished even if not\n return this;\n }\n}\n\n/**\n * Returns 16-byte authenticator of data using a one-time 32-byte key.\n *\n * Important: key should be used for only one message, it should never repeat.\n */\nexport function oneTimeAuth(key: Uint8Array, data: Uint8Array): Uint8Array {\n const h = new Poly1305(key);\n h.update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n\n/**\n * Returns true if two authenticators are 16-byte long and equal.\n * Uses contant-time comparison to avoid leaking timing information.\n */\nexport function equal(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== DIGEST_LENGTH || b.length !== DIGEST_LENGTH) {\n return false;\n }\n return constantTimeEqual(a, b);\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package random provides functions to access system's\n * cryptographically secure random byte generator.\n */\n\nimport { RandomSource } from \"./source\";\nimport { SystemRandomSource } from \"./source/system\";\nimport { readUint32LE } from \"@stablelib/binary\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport { RandomSource } from \"./source\";\n\nexport const defaultRandomSource = new SystemRandomSource();\n\nexport function randomBytes(length: number, prng: RandomSource = defaultRandomSource): Uint8Array {\n return prng.randomBytes(length);\n}\n\n/**\n * Returns a uniformly random unsigned 32-bit integer.\n */\nexport function randomUint32(prng: RandomSource = defaultRandomSource): number {\n // Generate 4-byte random buffer.\n const buf = randomBytes(4, prng);\n\n // Convert bytes from buffer into a 32-bit integer.\n // It's not important which byte order to use, since\n // the result is random.\n const result = readUint32LE(buf);\n\n // Clean the buffer.\n wipe(buf);\n\n return result;\n}\n\n/** 62 alphanumeric characters for default charset of randomString() */\nconst ALPHANUMERIC = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n/**\n * Returns a uniform random string of the given length\n * with characters from the given charset.\n *\n * Charset must not have more than 256 characters.\n *\n * Default charset generates case-sensitive alphanumeric\n * strings (0-9, A-Z, a-z).\n */\nexport function randomString(\n length: number,\n charset = ALPHANUMERIC,\n prng: RandomSource = defaultRandomSource\n): string {\n if (charset.length < 2) {\n throw new Error(\"randomString charset is too short\");\n }\n if (charset.length > 256) {\n throw new Error(\"randomString charset is too long\");\n }\n let out = '';\n const charsLen = charset.length;\n const maxByte = 256 - (256 % charsLen);\n while (length > 0) {\n const buf = randomBytes(Math.ceil(length * 256 / maxByte), prng);\n for (let i = 0; i < buf.length && length > 0; i++) {\n const randomByte = buf[i];\n if (randomByte < maxByte) {\n out += charset.charAt(randomByte % charsLen);\n length--;\n }\n }\n wipe(buf);\n }\n return out;\n}\n\n/**\n * Returns uniform random string containing at least the given\n * number of bits of entropy.\n *\n * For example, randomStringForEntropy(128) will return a 22-character\n * alphanumeric string, while randomStringForEntropy(128, \"0123456789\")\n * will return a 39-character numeric string, both will contain at\n * least 128 bits of entropy.\n *\n * Default charset generates case-sensitive alphanumeric\n * strings (0-9, A-Z, a-z).\n */\nexport function randomStringForEntropy(\n bits: number,\n charset = ALPHANUMERIC,\n prng: RandomSource = defaultRandomSource\n): string {\n const length = Math.ceil(bits / (Math.log(charset.length) / Math.LN2));\n return randomString(length, charset, prng);\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\nimport { RandomSource } from \"./\";\n\nconst QUOTA = 65536;\n\nexport class BrowserRandomSource implements RandomSource {\n isAvailable = false;\n isInstantiated = false;\n\n private _crypto?: { getRandomValues: typeof window.crypto.getRandomValues };\n\n constructor() {\n const browserCrypto = typeof self !== 'undefined'\n ? (self.crypto || (self as { msCrypto?: any }).msCrypto) // IE11 has msCrypto\n : null;\n\n if (browserCrypto && browserCrypto.getRandomValues) {\n this._crypto = browserCrypto;\n this.isAvailable = true;\n this.isInstantiated = true;\n }\n }\n\n randomBytes(length: number): Uint8Array {\n if (!this.isAvailable || !this._crypto) {\n throw new Error(\"Browser random byte generator is not available.\");\n }\n const out = new Uint8Array(length);\n for (let i = 0; i < out.length; i += QUOTA) {\n this._crypto.getRandomValues(out.subarray(i, i + Math.min(out.length - i, QUOTA)));\n }\n return out;\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\nimport { RandomSource } from \"./\";\nimport { wipe } from \"@stablelib/wipe\";\n\ndeclare function require(name: string): any;\n\nexport class NodeRandomSource implements RandomSource {\n isAvailable = false;\n isInstantiated = false;\n\n private _crypto: { randomBytes(n: number): Uint8Array } | undefined;\n\n constructor() {\n if (typeof require !== \"undefined\") {\n const nodeCrypto = require(\"crypto\");\n if (nodeCrypto && nodeCrypto.randomBytes) {\n this._crypto = nodeCrypto;\n this.isAvailable = true;\n this.isInstantiated = true;\n }\n }\n }\n\n randomBytes(length: number): Uint8Array {\n if (!this.isAvailable || !this._crypto) {\n throw new Error(\"Node.js random byte generator is not available.\");\n }\n\n // Get random bytes (result is Buffer).\n let buffer = this._crypto.randomBytes(length);\n\n // Make sure we got the length that we requested.\n if (buffer.length !== length) {\n throw new Error(\"NodeRandomSource: got fewer bytes than requested\");\n }\n\n // Allocate output array.\n const out = new Uint8Array(length);\n\n // Copy bytes from buffer to output.\n for (let i = 0; i < out.length; i++) {\n out[i] = buffer[i];\n }\n\n // Cleanup.\n wipe(buffer);\n\n return out;\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\nimport { RandomSource } from \"./\";\nimport { BrowserRandomSource } from \"./browser\";\nimport { NodeRandomSource } from \"./node\";\n\nexport class SystemRandomSource implements RandomSource {\n isAvailable = false;\n name = \"\";\n private _source: RandomSource;\n\n constructor() {\n // Try browser.\n this._source = new BrowserRandomSource();\n if (this._source.isAvailable) {\n this.isAvailable = true;\n this.name = \"Browser\";\n return;\n }\n\n // If no browser source, try Node.\n this._source = new NodeRandomSource();\n if (this._source.isAvailable) {\n this.isAvailable = true;\n this.name = \"Node\";\n return;\n }\n\n // No sources, we're out of options.\n }\n\n randomBytes(length: number): Uint8Array {\n if (!this.isAvailable) {\n throw new Error(\"System random byte generator is not available.\");\n }\n return this._source.randomBytes(length);\n }\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package sha256 implements SHA-2-256 cryptographic hash function.\n */\n\nimport { SerializableHash } from \"@stablelib/hash\";\nimport { readUint32BE, writeUint32BE } from \"@stablelib/binary\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport const DIGEST_LENGTH = 32;\nexport const BLOCK_SIZE = 64;\n\n/**\n * SHA2-256 cryptographic hash algorithm.\n */\nexport class SHA256 implements SerializableHash {\n /** Length of hash output */\n readonly digestLength: number = DIGEST_LENGTH;\n\n /** Block size */\n readonly blockSize: number = BLOCK_SIZE;\n\n // Note: Int32Array is used instead of Uint32Array for performance reasons.\n protected _state = new Int32Array(8); // hash state\n private _temp = new Int32Array(64); // temporary state\n private _buffer = new Uint8Array(128); // buffer for data to hash\n private _bufferLength = 0; // number of bytes in buffer\n private _bytesHashed = 0; // number of total bytes hashed\n private _finished = false; // indicates whether the hash was finalized\n\n constructor() {\n this.reset();\n }\n\n protected _initState() {\n this._state[0] = 0x6a09e667;\n this._state[1] = 0xbb67ae85;\n this._state[2] = 0x3c6ef372;\n this._state[3] = 0xa54ff53a;\n this._state[4] = 0x510e527f;\n this._state[5] = 0x9b05688c;\n this._state[6] = 0x1f83d9ab;\n this._state[7] = 0x5be0cd19;\n }\n\n /**\n * Resets hash state making it possible\n * to re-use this instance to hash other data.\n */\n reset(): this {\n this._initState();\n this._bufferLength = 0;\n this._bytesHashed = 0;\n this._finished = false;\n return this;\n }\n\n /**\n * Cleans internal buffers and resets hash state.\n */\n clean() {\n wipe(this._buffer);\n wipe(this._temp);\n this.reset();\n }\n\n /**\n * Updates hash state with the given data.\n *\n * Throws error when trying to update already finalized hash:\n * instance must be reset to update it again.\n */\n update(data: Uint8Array, dataLength: number = data.length): this {\n if (this._finished) {\n throw new Error(\"SHA256: can't update because hash was finished.\");\n }\n let dataPos = 0;\n this._bytesHashed += dataLength;\n if (this._bufferLength > 0) {\n while (this._bufferLength < this.blockSize && dataLength > 0) {\n this._buffer[this._bufferLength++] = data[dataPos++];\n dataLength--;\n }\n if (this._bufferLength === this.blockSize) {\n hashBlocks(this._temp, this._state, this._buffer, 0, this.blockSize);\n this._bufferLength = 0;\n }\n }\n if (dataLength >= this.blockSize) {\n dataPos = hashBlocks(this._temp, this._state, data, dataPos, dataLength);\n dataLength %= this.blockSize;\n }\n while (dataLength > 0) {\n this._buffer[this._bufferLength++] = data[dataPos++];\n dataLength--;\n }\n return this;\n }\n\n /**\n * Finalizes hash state and puts hash into out.\n * If hash was already finalized, puts the same value.\n */\n finish(out: Uint8Array): this {\n if (!this._finished) {\n const bytesHashed = this._bytesHashed;\n const left = this._bufferLength;\n const bitLenHi = (bytesHashed / 0x20000000) | 0;\n const bitLenLo = bytesHashed << 3;\n const padLength = (bytesHashed % 64 < 56) ? 64 : 128;\n\n this._buffer[left] = 0x80;\n for (let i = left + 1; i < padLength - 8; i++) {\n this._buffer[i] = 0;\n }\n writeUint32BE(bitLenHi, this._buffer, padLength - 8);\n writeUint32BE(bitLenLo, this._buffer, padLength - 4);\n\n hashBlocks(this._temp, this._state, this._buffer, 0, padLength);\n\n this._finished = true;\n }\n\n for (let i = 0; i < this.digestLength / 4; i++) {\n writeUint32BE(this._state[i], out, i * 4);\n }\n\n return this;\n }\n\n /**\n * Returns the final hash digest.\n */\n digest(): Uint8Array {\n const out = new Uint8Array(this.digestLength);\n this.finish(out);\n return out;\n }\n\n /**\n * Function useful for HMAC/PBKDF2 optimization.\n * Returns hash state to be used with restoreState().\n * Only chain value is saved, not buffers or other\n * state variables.\n */\n saveState(): SavedState {\n if (this._finished) {\n throw new Error(\"SHA256: cannot save finished state\");\n }\n return {\n state: new Int32Array(this._state),\n buffer: this._bufferLength > 0 ? new Uint8Array(this._buffer) : undefined,\n bufferLength: this._bufferLength,\n bytesHashed: this._bytesHashed\n };\n }\n\n /**\n * Function useful for HMAC/PBKDF2 optimization.\n * Restores state saved by saveState() and sets bytesHashed\n * to the given value.\n */\n restoreState(savedState: SavedState): this {\n this._state.set(savedState.state);\n this._bufferLength = savedState.bufferLength;\n if (savedState.buffer) {\n this._buffer.set(savedState.buffer);\n }\n this._bytesHashed = savedState.bytesHashed;\n this._finished = false;\n return this;\n }\n\n /**\n * Cleans state returned by saveState().\n */\n cleanSavedState(savedState: SavedState) {\n wipe(savedState.state);\n if (savedState.buffer) {\n wipe(savedState.buffer);\n }\n savedState.bufferLength = 0;\n savedState.bytesHashed = 0;\n }\n}\n\nexport type SavedState = {\n state: Int32Array;\n buffer: Uint8Array | undefined;\n bufferLength: number;\n bytesHashed: number;\n};\n\n// Constants\nconst K = new Int32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\nfunction hashBlocks(w: Int32Array, v: Int32Array, p: Uint8Array, pos: number, len: number): number {\n while (len >= 64) {\n let a = v[0];\n let b = v[1];\n let c = v[2];\n let d = v[3];\n let e = v[4];\n let f = v[5];\n let g = v[6];\n let h = v[7];\n\n for (let i = 0; i < 16; i++) {\n let j = pos + i * 4;\n w[i] = readUint32BE(p, j);\n }\n\n for (let i = 16; i < 64; i++) {\n let u = w[i - 2];\n let t1 = (u >>> 17 | u << (32 - 17)) ^ (u >>> 19 | u << (32 - 19)) ^ (u >>> 10);\n\n u = w[i - 15];\n let t2 = (u >>> 7 | u << (32 - 7)) ^ (u >>> 18 | u << (32 - 18)) ^ (u >>> 3);\n\n w[i] = (t1 + w[i - 7] | 0) + (t2 + w[i - 16] | 0);\n }\n\n for (let i = 0; i < 64; i++) {\n let t1 = (((((e >>> 6 | e << (32 - 6)) ^ (e >>> 11 | e << (32 - 11)) ^\n (e >>> 25 | e << (32 - 25))) + ((e & f) ^ (~e & g))) | 0) +\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\n\n let t2 = (((a >>> 2 | a << (32 - 2)) ^ (a >>> 13 | a << (32 - 13)) ^\n (a >>> 22 | a << (32 - 22))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\n\n h = g;\n g = f;\n f = e;\n e = (d + t1) | 0;\n d = c;\n c = b;\n b = a;\n a = (t1 + t2) | 0;\n }\n\n v[0] += a;\n v[1] += b;\n v[2] += c;\n v[3] += d;\n v[4] += e;\n v[5] += f;\n v[6] += g;\n v[7] += h;\n\n pos += 64;\n len -= 64;\n }\n return pos;\n}\n\nexport function hash(data: Uint8Array): Uint8Array {\n const h = new SHA256();\n h.update(data);\n const digest = h.digest();\n h.clean();\n return digest;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package wipe implements functions for zeroing arrays.\n */\n\nexport type NumericArray = number[] | Uint8Array | Int8Array | Uint16Array\n | Int16Array | Uint32Array | Int32Array | Float32Array | Float64Array;\n\n/**\n * Sets all values in the given array to zero and returns it.\n *\n * The fact that it sets bytes to zero can be relied on.\n *\n * There is no guarantee that this function makes data disappear from memory,\n * as runtime implementation can, for example, have copying garbage collector\n * that will make copies of sensitive data before we wipe it. Or that an\n * operating system will write our data to swap or sleep image. Another thing\n * is that an optimizing compiler can remove calls to this function or make it\n * no-op. There's nothing we can do with it, so we just do our best and hope\n * that everything will be okay and good will triumph over evil.\n */\nexport function wipe(array: NumericArray): NumericArray {\n // Right now it's similar to array.fill(0). If it turns\n // out that runtimes optimize this call away, maybe\n // we can try something else.\n for (let i = 0; i < array.length; i++) {\n array[i] = 0;\n }\n return array;\n}\n","// Copyright (C) 2016 Dmitry Chestnykh\n// MIT License. See LICENSE file for details.\n\n/**\n * Package x25519 implements X25519 key agreement.\n */\n\nimport { randomBytes, RandomSource } from \"@stablelib/random\";\nimport { wipe } from \"@stablelib/wipe\";\n\nexport const PUBLIC_KEY_LENGTH = 32;\nexport const SECRET_KEY_LENGTH = 32;\nexport const SHARED_KEY_LENGTH = 32;\n\n// TODO(dchest): some functions are copies of ../sign/ed25519.\n// Find a way to combine them without opening up to public.\n\n// Ported from TweetNaCl.js, which is ported from TweetNaCl\n// by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n// https://tweetnacl.js.org\n\n// TweetNaCl contributors:\n// Daniel J. Bernstein, Bernard van Gastel, Wesley Janssen,\n// Tanja Lange, Peter Schwabe, Sjaak Smetsers.\n// Public domain.\n// https://tweetnacl.cr.yp.to/\n\ntype GF = Float64Array;\n\n// Returns new zero-filled 16-element GF (Float64Array).\n// If passed an array of numbers, prefills the returned\n// array with them.\n//\n// We use Float64Array, because we need 48-bit numbers\n// for this implementation.\nfunction gf(init?: number[]): GF {\n const r = new Float64Array(16);\n if (init) {\n for (let i = 0; i < init.length; i++) {\n r[i] = init[i];\n }\n }\n return r;\n}\n\n// Base point.\nconst _9 = new Uint8Array(32); _9[0] = 9;\n\nconst _121665 = gf([0xdb41, 1]);\n\nfunction car25519(o: GF) {\n let c = 1;\n for (let i = 0; i < 16; i++) {\n let v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c - 1 + 37 * (c - 1);\n}\n\nfunction sel25519(p: GF, q: GF, b: number) {\n const c = ~(b - 1);\n for (let i = 0; i < 16; i++) {\n const t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o: Uint8Array, n: GF) {\n const m = gf();\n const t = gf();\n for (let i = 0; i < 16; i++) {\n t[i] = n[i];\n }\n car25519(t);\n car25519(t);\n car25519(t);\n for (let j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (let i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1);\n m[i - 1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1);\n const b = (m[15] >> 16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1 - b);\n }\n for (let i = 0; i < 16; i++) {\n o[2 * i] = t[i] & 0xff;\n o[2 * i + 1] = t[i] >> 8;\n }\n}\n\nfunction unpack25519(o: GF, n: Uint8Array) {\n for (let i = 0; i < 16; i++) {\n o[i] = n[2 * i] + (n[2 * i + 1] << 8);\n }\n o[15] &= 0x7fff;\n}\n\nfunction add(o: GF, a: GF, b: GF) {\n for (let i = 0; i < 16; i++) {\n o[i] = a[i] + b[i];\n }\n}\n\nfunction sub(o: GF, a: GF, b: GF) {\n for (let i = 0; i < 16; i++) {\n o[i] = a[i] - b[i];\n }\n}\n\nfunction mul(o: GF, a: GF, b: GF) {\n let v: number, c: number,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c - 1 + 37 * (c - 1);\n\n o[0] = t0;\n o[1] = t1;\n o[2] = t2;\n o[3] = t3;\n o[4] = t4;\n o[5] = t5;\n o[6] = t6;\n o[7] = t7;\n o[8] = t8;\n o[9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction square(o: GF, a: GF) {\n mul(o, a, a);\n}\n\nfunction inv25519(o: GF, inp: GF) {\n const c = gf();\n for (let i = 0; i < 16; i++) {\n c[i] = inp[i];\n }\n for (let i = 253; i >= 0; i--) {\n square(c, c);\n if (i !== 2 && i !== 4) {\n mul(c, c, inp);\n }\n }\n for (let i = 0; i < 16; i++) {\n o[i] = c[i];\n }\n}\n\nexport function scalarMult(n: Uint8Array, p: Uint8Array): Uint8Array {\n const z = new Uint8Array(32);\n const x = new Float64Array(80);\n const a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n\n for (let i = 0; i < 31; i++) {\n z[i] = n[i];\n }\n z[31] = (n[31] & 127) | 64;\n z[0] &= 248;\n\n unpack25519(x, p);\n\n for (let i = 0; i < 16; i++) {\n b[i] = x[i];\n }\n\n a[0] = d[0] = 1;\n\n for (let i = 254; i >= 0; --i) {\n const r = (z[i >>> 3] >>> (i & 7)) & 1;\n sel25519(a, b, r);\n sel25519(c, d, r);\n add(e, a, c);\n sub(a, a, c);\n add(c, b, d);\n sub(b, b, d);\n square(d, e);\n square(f, a);\n mul(a, c, a);\n mul(c, b, e);\n add(e, a, c);\n sub(a, a, c);\n square(b, a);\n sub(c, d, f);\n mul(a, c, _121665);\n add(a, a, d);\n mul(c, c, a);\n mul(a, d, f);\n mul(d, b, x);\n square(b, e);\n sel25519(a, b, r);\n sel25519(c, d, r);\n }\n for (let i = 0; i < 16; i++) {\n x[i + 16] = a[i];\n x[i + 32] = c[i];\n x[i + 48] = b[i];\n x[i + 64] = d[i];\n }\n const x32 = x.subarray(32);\n const x16 = x.subarray(16);\n inv25519(x32, x32);\n mul(x16, x16, x32);\n const q = new Uint8Array(32);\n pack25519(q, x16);\n return q;\n}\n\nexport function scalarMultBase(n: Uint8Array): Uint8Array {\n return scalarMult(n, _9);\n}\n\nexport interface KeyPair {\n publicKey: Uint8Array;\n secretKey: Uint8Array;\n}\n\nexport function generateKeyPairFromSeed(seed: Uint8Array): KeyPair {\n if (seed.length !== SECRET_KEY_LENGTH) {\n throw new Error(`x25519: seed must be ${SECRET_KEY_LENGTH} bytes`);\n }\n const secretKey = new Uint8Array(seed);\n const publicKey = scalarMultBase(secretKey);\n return {\n publicKey,\n secretKey\n };\n}\n\nexport function generateKeyPair(prng?: RandomSource): KeyPair {\n const seed = randomBytes(32, prng);\n const result = generateKeyPairFromSeed(seed);\n wipe(seed);\n return result;\n}\n\n/**\n * Returns a shared key between our secret key and a peer's public key.\n *\n * Throws an error if the given keys are of wrong length.\n *\n * If rejectZero is true throws if the calculated shared key is all-zero.\n * From RFC 7748:\n *\n * > Protocol designers using Diffie-Hellman over the curves defined in\n * > this document must not assume \"contributory behavior\". Specially,\n * > contributory behavior means that both parties' private keys\n * > contribute to the resulting shared key. Since curve25519 and\n * > curve448 have cofactors of 8 and 4 (respectively), an input point of\n * > small order will eliminate any contribution from the other party's\n * > private key. This situation can be detected by checking for the all-\n * > zero output, which implementations MAY do, as specified in Section 6.\n * > However, a large number of existing implementations do not do this.\n *\n * IMPORTANT: the returned key is a raw result of scalar multiplication.\n * To use it as a key material, hash it with a cryptographic hash function.\n */\nexport function sharedKey(mySecretKey: Uint8Array, theirPublicKey: Uint8Array, rejectZero = false): Uint8Array {\n if (mySecretKey.length !== PUBLIC_KEY_LENGTH) {\n throw new Error(\"X25519: incorrect secret key length\");\n }\n if (theirPublicKey.length !== PUBLIC_KEY_LENGTH) {\n throw new Error(\"X25519: incorrect public key length\");\n }\n\n const result = scalarMult(mySecretKey, theirPublicKey);\n\n if (rejectZero) {\n let zeros = 0;\n for (let i = 0; i < result.length; i++) {\n zeros |= result[i];\n }\n if (zeros === 0) {\n throw new Error(\"X25519: invalid shared key\");\n }\n }\n\n return result;\n}\n","'use strict'\n\nconst exp = Math.exp\n\nexports =\nmodule.exports =\nfunction MovingAverage (timespan) {\n if (typeof timespan !== 'number') { throw new Error('must provide a timespan to the moving average constructor') }\n\n if (timespan <= 0) { throw new Error('must provide a timespan > 0 to the moving average constructor') }\n\n let ma // moving average\n let v = 0 // variance\n let d = 0 // deviation\n let f = 0 // forecast\n\n let previousTime\n\n let ret = {}\n\n function alpha (t, pt) {\n return 1 - (exp(-(t - pt) / timespan))\n }\n\n ret.push =\n function push (time, value) {\n if (previousTime) {\n // calculate moving average\n const a = alpha(time, previousTime)\n const diff = value - ma\n const incr = a * diff\n ma = a * value + (1 - a) * ma\n // calculate variance & deviation\n v = (1 - a) * (v + diff * incr)\n d = Math.sqrt(v)\n // calculate forecast\n f = ma + a * diff\n } else {\n ma = value\n }\n previousTime = time\n }\n\n // Exponential Moving Average\n\n ret.movingAverage =\n function movingAverage () {\n return ma\n }\n\n // Variance\n ret.variance =\n function variance () {\n return v\n }\n\n ret.deviation =\n function deviation () {\n return d\n }\n\n ret.forecast =\n function forecast () {\n return f\n }\n\n return ret\n}\n","/*globals self, window */\n\"use strict\"\n\n/*eslint-disable @mysticatea/prettier */\nconst { AbortController, AbortSignal } =\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window :\n /* otherwise */ undefined\n/*eslint-enable @mysticatea/prettier */\n\nmodule.exports = AbortController\nmodule.exports.AbortSignal = AbortSignal\nmodule.exports.default = AbortController\n","module.exports = class AbortError extends Error {\n constructor (message, code) {\n super(message || 'The operation was aborted')\n this.type = 'aborted'\n this.code = code || 'ABORT_ERR'\n }\n}\n","const getIterator = require('get-iterator')\nconst AbortError = require('./AbortError')\n\n// Wrap an iterator to make it abortable, allow cleanup when aborted via onAbort\nconst toAbortableSource = (source, signal, options) => (\n toMultiAbortableSource(source, Array.isArray(signal) ? signal : [{ signal, options }])\n)\n\nconst toMultiAbortableSource = (source, signals) => {\n source = getIterator(source)\n signals = signals.map(({ signal, options }) => ({ signal, options: options || {} }))\n\n async function * abortable () {\n let nextAbortHandler\n const abortHandler = () => {\n if (nextAbortHandler) nextAbortHandler()\n }\n\n for (const { signal } of signals) {\n signal.addEventListener('abort', abortHandler)\n }\n\n while (true) {\n let result\n try {\n for (const { signal, options } of signals) {\n if (signal.aborted) {\n const { abortMessage, abortCode } = options\n throw new AbortError(abortMessage, abortCode)\n }\n }\n\n const abort = new Promise((resolve, reject) => {\n nextAbortHandler = () => {\n const { options } = signals.find(({ signal }) => signal.aborted)\n const { abortMessage, abortCode } = options\n reject(new AbortError(abortMessage, abortCode))\n }\n })\n\n // Race the iterator and the abort signals\n result = await Promise.race([abort, source.next()])\n nextAbortHandler = null\n } catch (err) {\n for (const { signal } of signals) {\n signal.removeEventListener('abort', abortHandler)\n }\n\n // Might not have been aborted by a known signal\n const aborter = signals.find(({ signal }) => signal.aborted)\n const isKnownAborter = err.type === 'aborted' && aborter\n\n if (isKnownAborter && aborter.options.onAbort) {\n // Do any custom abort handling for the iterator\n await aborter.options.onAbort(source)\n }\n\n // End the iterator if it is a generator\n if (typeof source.return === 'function') {\n await source.return()\n }\n\n if (isKnownAborter && aborter.options.returnOnAbort) {\n return\n }\n\n throw err\n }\n\n if (result.done) break\n yield result.value\n }\n\n for (const { signal } of signals) {\n signal.removeEventListener('abort', abortHandler)\n }\n }\n\n return abortable()\n}\n\nconst toAbortableSink = (sink, signal, options) => (\n toMultiAbortableSink(sink, Array.isArray(signal) ? signal : [{ signal, options }])\n)\n\nconst toMultiAbortableSink = (sink, signals) => source => (\n sink(toMultiAbortableSource(source, signals))\n)\n\nconst toAbortableDuplex = (duplex, signal, options) => (\n toMultiAbortableDuplex(duplex, Array.isArray(signal) ? signal : [{ signal, options }])\n)\n\nconst toMultiAbortableDuplex = (duplex, signals) => ({\n sink: toMultiAbortableSink(duplex.sink, signals),\n source: toMultiAbortableSource(duplex.source, signals)\n})\n\nmodule.exports = toAbortableSource\nmodule.exports.AbortError = AbortError\nmodule.exports.source = toAbortableSource\nmodule.exports.sink = toAbortableSink\nmodule.exports.transform = toAbortableSink\nmodule.exports.duplex = toAbortableDuplex\n","'use strict';\nconst indentString = require('indent-string');\nconst cleanStack = require('clean-stack');\n\nconst cleanInternalStack = stack => stack.replace(/\\s+at .*aggregate-error\\/index.js:\\d+:\\d+\\)?/g, '');\n\nclass AggregateError extends Error {\n\tconstructor(errors) {\n\t\tif (!Array.isArray(errors)) {\n\t\t\tthrow new TypeError(`Expected input to be an Array, got ${typeof errors}`);\n\t\t}\n\n\t\terrors = [...errors].map(error => {\n\t\t\tif (error instanceof Error) {\n\t\t\t\treturn error;\n\t\t\t}\n\n\t\t\tif (error !== null && typeof error === 'object') {\n\t\t\t\t// Handle plain error objects with message property and/or possibly other metadata\n\t\t\t\treturn Object.assign(new Error(error.message), error);\n\t\t\t}\n\n\t\t\treturn new Error(error);\n\t\t});\n\n\t\tlet message = errors\n\t\t\t.map(error => {\n\t\t\t\t// The `stack` property is not standardized, so we can't assume it exists\n\t\t\t\treturn typeof error.stack === 'string' ? cleanInternalStack(cleanStack(error.stack)) : String(error);\n\t\t\t})\n\t\t\t.join('\\n');\n\t\tmessage = '\\n' + indentString(message, 4);\n\t\tsuper(message);\n\n\t\tthis.name = 'AggregateError';\n\n\t\tObject.defineProperty(this, '_errors', {value: errors});\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const error of this._errors) {\n\t\t\tyield error;\n\t\t}\n\t}\n}\n\nmodule.exports = AggregateError;\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\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\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell 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 BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\n\nvar AssertionError = require('./internal/assert/assertion_error');\n\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\n\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\n\nvar objectAssign = Object.assign ? Object.assign : require('es6-object-assign').assign;\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\n\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n} // Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\n\n\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\n\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\n\nvar warned = false; // The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {}; // All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\n\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n\n if (argsLen === 2) operator = '!=';\n }\n\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n\n if (message !== undefined) {\n errArgs.message = message;\n }\n\n var err = new AssertionError(errArgs);\n\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n\n throw err;\n}\n\nassert.fail = fail; // The AssertionError is defined in internal/error.\n\nassert.AssertionError = AssertionError;\n\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n} // Pure assertion tests whether a value is truthy, as determined\n// by !!value.\n\n\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\n\nassert.ok = ok; // The equality assertion tests shallow, coercive equality with ==.\n\n/* eslint-disable no-restricted-properties */\n\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n}; // The non-equality assertion tests for whether two objects are not\n// equal with !=.\n\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n } // eslint-disable-next-line eqeqeq\n\n\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n}; // The equivalence assertion tests a deep equality relation.\n\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n}; // The non-equivalence assertion tests for any deep inequality.\n\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\n\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\n\nvar Comparison = function Comparison(obj, keys, actual) {\n var _this = this;\n\n _classCallCheck(this, Comparison);\n\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && obj[key].test(actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n};\n\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\n\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return expected.test(actual); // assert.doesNotThrow does not accept objects.\n\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n } // Handle primitives properly.\n\n\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n\n var keys = Object.keys(expected); // Special handle errors to make sure the name and the message are compared\n // as well.\n\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && expected[key].test(actual[key])) {\n return;\n }\n\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n } // Guard instanceof against arrow functions as they don't have a prototype.\n\n\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n\n try {\n fn();\n } catch (e) {\n return e;\n }\n\n return NO_EXCEPTION_SENTINEL;\n}\n\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\n\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn(); // Fail in case no promise is returned.\n\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\n\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\n\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n\n throw actual;\n}\n\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\n\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\n\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\n\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\n\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n }); // Make sure we actually have a stack trace!\n\n var origStack = err.stack;\n\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift(); // Filter all frames existing in err.stack.\n\n var tmp1 = newErr.stack.split('\\n');\n\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n\n throw newErr;\n }\n}; // Expose a strict only variant of assert\n\n\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\n\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n'use strict';\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\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, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar _require = require('util/'),\n inspect = _require.inspect;\n\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE; // 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/repeat\n\n\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n\n while (count) {\n str += str;\n count--;\n }\n\n str += str.substring(0, maxCount - str.length);\n return str;\n}\n\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n}; // Comparing short primitives should just show === / !== instead of using the\n// diff.\n\nvar kMaxShortLength = 10;\n\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\n\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\n\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = ''; // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n } // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n\n\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length; // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n } // Ignore the first characters.\n\n\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n } // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n\n\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n\n var maxLines = Math.max(actualLines.length, expectedLines.length); // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n'); // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the expected line to the cache.\n\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++; // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++; // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i]; // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine); // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n } // Mark the current line as the last diverging one.\n\n\n lastPos = i; // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2; // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = ''; // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n } // Inspected object to big (Show ~20 rows max)\n\n\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\n\nvar AssertionError =\n/*#__PURE__*/\nfunction (_Error) {\n _inherits(AssertionError, _Error);\n\n function AssertionError(options) {\n var _this;\n\n _classCallCheck(this, AssertionError);\n\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n\n if (message != null) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, String(message)));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n } // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n\n\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, createErrDiff(actual, expected, operator)));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n'); // In case \"actual\" is an object, it should not be reference equal.\n\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n } // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n\n\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n\n while (res.length > 27) {\n res.pop();\n }\n } // Only print a single input.\n\n\n if (res.length === 1) {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \" \").concat(res[0])));\n } else {\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\")));\n }\n } else {\n var _res = inspectValue(actual);\n\n var other = '';\n var knownOperators = kReadableOperator[operator];\n\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(AssertionError).call(this, \"\".concat(_res).concat(other)));\n }\n }\n\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n } // Create error message including the error code in the name.\n\n\n _this.stack; // Reset the name.\n\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: inspect.custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread({}, ctx, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n\n return AssertionError;\n}(_wrapNativeSuper(Error));\n\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n\n/* eslint node-core/alphabetize-errors: \"error\" */\n\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n'use strict'; // The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nvar codes = {}; // Lazy loaded\n\nvar assert;\nvar util;\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 _inherits(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n var _this;\n\n _classCallCheck(this, NodeError);\n\n _this = _possibleConstructorReturn(this, _getPrototypeOf(NodeError).call(this, getMessage(arg1, arg2, arg3)));\n _this.code = code;\n return _this;\n }\n\n return NodeError;\n }(Base);\n\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_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\"); // determiner: 'must be' or 'must not be'\n\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 } // TODO(BridgeAR): Improve the output by showing `null` and similar.\n\n\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(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\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar regexFlagsSupported = /a/g.flags !== undefined;\n\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\n\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\n\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\n\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\n\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n } // The maximum size for an array is 2 ** 32 -1.\n\n\n return key.length === 10 && key >= Math.pow(2, 32);\n}\n\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n} // Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n\n\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var 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) {\n return -1;\n }\n\n if (y < x) {\n return 1;\n }\n\n return 0;\n}\n\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3; // Check if they have the same source and flags\n\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\n\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\n\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\n\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n} // Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n } // Check more closely if val1 and val2 are equal.\n\n\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n\n return false;\n }\n\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n\n if (val1Tag !== val2Tag) {\n return false;\n }\n\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (keys1.length !== keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n } // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n\n\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n } // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n\n\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n\n if (_keys.length !== _keys2.length) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\n\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\n\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2); // The pair must have the same number of owned properties.\n\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n } // Cheap key test\n\n\n var i = 0;\n\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n\n if (symbolKeysA.length !== 0) {\n var count = 0;\n\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n } // Use memos to handle cycles.\n\n\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n\n memos.position++;\n }\n\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\n\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n\n return false;\n} // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\n\n\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n\n case 'object':\n // Only pass in null as object!\n return undefined;\n\n case 'symbol':\n return false;\n\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n\n }\n\n return true;\n}\n\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\n\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n\n if (altValue != null) {\n return altValue;\n }\n\n var curB = b.get(altValue);\n\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\n\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i]; // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n } // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n\n\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null values.\n\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(val);\n }\n }\n\n if (set !== null) {\n var bValues = arrayFromSet(b);\n\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i]; // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n\n return false;\n}\n\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false; // Fast path to detect missing string, symbol, undefined and null\n // keys.\n\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n\n if (set === null) {\n set = new Set();\n }\n\n set.add(key);\n }\n }\n }\n\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n\n if (_typeof(key) === 'object' && key !== null) {\n if (!mapHasEqualEntry(set, a, key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(key) || !innerDeepEqual(a.get(key), item, false, memo)) && !mapHasEqualEntry(set, a, key, item, false, memo)) {\n return false;\n }\n }\n\n return set.size === 0;\n }\n\n return true;\n}\n\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n\n return true;\n }\n }\n } // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n\n\n for (i = 0; i < keys.length; i++) {\n var _key = keys[i];\n\n if (!innerDeepEqual(a[_key], b[_key], strict, memos)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\n\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\n\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\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",";(function (globalObject) {\r\n 'use strict';\r\n\r\n/*\r\n * bignumber.js v9.0.1\r\n * A JavaScript library for arbitrary-precision arithmetic.\r\n * https://github.com/MikeMcl/bignumber.js\r\n * Copyright (c) 2020 Michael Mclaughlin <M8ch88l@gmail.com>\r\n * MIT Licensed.\r\n *\r\n * BigNumber.prototype methods | BigNumber methods\r\n * |\r\n * absoluteValue abs | clone\r\n * comparedTo | config set\r\n * decimalPlaces dp | DECIMAL_PLACES\r\n * dividedBy div | ROUNDING_MODE\r\n * dividedToIntegerBy idiv | EXPONENTIAL_AT\r\n * exponentiatedBy pow | RANGE\r\n * integerValue | CRYPTO\r\n * isEqualTo eq | MODULO_MODE\r\n * isFinite | POW_PRECISION\r\n * isGreaterThan gt | FORMAT\r\n * isGreaterThanOrEqualTo gte | ALPHABET\r\n * isInteger | isBigNumber\r\n * isLessThan lt | maximum max\r\n * isLessThanOrEqualTo lte | minimum min\r\n * isNaN | random\r\n * isNegative | sum\r\n * isPositive |\r\n * isZero |\r\n * minus |\r\n * modulo mod |\r\n * multipliedBy times |\r\n * negated |\r\n * plus |\r\n * precision sd |\r\n * shiftedBy |\r\n * squareRoot sqrt |\r\n * toExponential |\r\n * toFixed |\r\n * toFormat |\r\n * toFraction |\r\n * toJSON |\r\n * toNumber |\r\n * toPrecision |\r\n * toString |\r\n * valueOf |\r\n *\r\n */\r\n\r\n\r\n var BigNumber,\r\n isNumeric = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?$/i,\r\n mathceil = Math.ceil,\r\n mathfloor = Math.floor,\r\n\r\n bignumberError = '[BigNumber Error] ',\r\n tooManyDigits = bignumberError + 'Number primitive has more than 15 significant digits: ',\r\n\r\n BASE = 1e14,\r\n LOG_BASE = 14,\r\n MAX_SAFE_INTEGER = 0x1fffffffffffff, // 2^53 - 1\r\n // MAX_INT32 = 0x7fffffff, // 2^31 - 1\r\n POWS_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13],\r\n SQRT_BASE = 1e7,\r\n\r\n // EDITABLE\r\n // The limit on the value of DECIMAL_PLACES, TO_EXP_NEG, TO_EXP_POS, MIN_EXP, MAX_EXP, and\r\n // the arguments to toExponential, toFixed, toFormat, and toPrecision.\r\n MAX = 1E9; // 0 to MAX_INT32\r\n\r\n\r\n /*\r\n * Create and return a BigNumber constructor.\r\n */\r\n function clone(configObject) {\r\n var div, convertBase, parseNumeric,\r\n P = BigNumber.prototype = { constructor: BigNumber, toString: null, valueOf: null },\r\n ONE = new BigNumber(1),\r\n\r\n\r\n //----------------------------- EDITABLE CONFIG DEFAULTS -------------------------------\r\n\r\n\r\n // The default values below must be integers within the inclusive ranges stated.\r\n // The values can also be changed at run-time using BigNumber.set.\r\n\r\n // The maximum number of decimal places for operations involving division.\r\n DECIMAL_PLACES = 20, // 0 to MAX\r\n\r\n // The rounding mode used when rounding to the above decimal places, and when using\r\n // toExponential, toFixed, toFormat and toPrecision, and round (default value).\r\n // UP 0 Away from zero.\r\n // DOWN 1 Towards zero.\r\n // CEIL 2 Towards +Infinity.\r\n // FLOOR 3 Towards -Infinity.\r\n // HALF_UP 4 Towards nearest neighbour. If equidistant, up.\r\n // HALF_DOWN 5 Towards nearest neighbour. If equidistant, down.\r\n // HALF_EVEN 6 Towards nearest neighbour. If equidistant, towards even neighbour.\r\n // HALF_CEIL 7 Towards nearest neighbour. If equidistant, towards +Infinity.\r\n // HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\r\n ROUNDING_MODE = 4, // 0 to 8\r\n\r\n // EXPONENTIAL_AT : [TO_EXP_NEG , TO_EXP_POS]\r\n\r\n // The exponent value at and beneath which toString returns exponential notation.\r\n // Number type: -7\r\n TO_EXP_NEG = -7, // 0 to -MAX\r\n\r\n // The exponent value at and above which toString returns exponential notation.\r\n // Number type: 21\r\n TO_EXP_POS = 21, // 0 to MAX\r\n\r\n // RANGE : [MIN_EXP, MAX_EXP]\r\n\r\n // The minimum exponent value, beneath which underflow to zero occurs.\r\n // Number type: -324 (5e-324)\r\n MIN_EXP = -1e7, // -1 to -MAX\r\n\r\n // The maximum exponent value, above which overflow to Infinity occurs.\r\n // Number type: 308 (1.7976931348623157e+308)\r\n // For MAX_EXP > 1e7, e.g. new BigNumber('1e100000000').plus(1) may be slow.\r\n MAX_EXP = 1e7, // 1 to MAX\r\n\r\n // Whether to use cryptographically-secure random number generation, if available.\r\n CRYPTO = false, // true or false\r\n\r\n // The modulo mode used when calculating the modulus: a mod n.\r\n // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\r\n // The remainder (r) is calculated as: r = a - n * q.\r\n //\r\n // UP 0 The remainder is positive if the dividend is negative, else is negative.\r\n // DOWN 1 The remainder has the same sign as the dividend.\r\n // This modulo mode is commonly known as 'truncated division' and is\r\n // equivalent to (a % n) in JavaScript.\r\n // FLOOR 3 The remainder has the same sign as the divisor (Python %).\r\n // HALF_EVEN 6 This modulo mode implements the IEEE 754 remainder function.\r\n // EUCLID 9 Euclidian division. q = sign(n) * floor(a / abs(n)).\r\n // The remainder is always positive.\r\n //\r\n // The truncated division, floored division, Euclidian division and IEEE 754 remainder\r\n // modes are commonly used for the modulus operation.\r\n // Although the other rounding modes can also be used, they may not give useful results.\r\n MODULO_MODE = 1, // 0 to 9\r\n\r\n // The maximum number of significant digits of the result of the exponentiatedBy operation.\r\n // If POW_PRECISION is 0, there will be unlimited significant digits.\r\n POW_PRECISION = 0, // 0 to MAX\r\n\r\n // The format specification used by the BigNumber.prototype.toFormat method.\r\n FORMAT = {\r\n prefix: '',\r\n groupSize: 3,\r\n secondaryGroupSize: 0,\r\n groupSeparator: ',',\r\n decimalSeparator: '.',\r\n fractionGroupSize: 0,\r\n fractionGroupSeparator: '\\xA0', // non-breaking space\r\n suffix: ''\r\n },\r\n\r\n // The alphabet used for base conversion. It must be at least 2 characters long, with no '+',\r\n // '-', '.', whitespace, or repeated character.\r\n // '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_'\r\n ALPHABET = '0123456789abcdefghijklmnopqrstuvwxyz';\r\n\r\n\r\n //------------------------------------------------------------------------------------------\r\n\r\n\r\n // CONSTRUCTOR\r\n\r\n\r\n /*\r\n * The BigNumber constructor and exported function.\r\n * Create and return a new instance of a BigNumber object.\r\n *\r\n * v {number|string|BigNumber} A numeric value.\r\n * [b] {number} The base of v. Integer, 2 to ALPHABET.length inclusive.\r\n */\r\n function BigNumber(v, b) {\r\n var alphabet, c, caseChanged, e, i, isNum, len, str,\r\n x = this;\r\n\r\n // Enable constructor call without `new`.\r\n if (!(x instanceof BigNumber)) return new BigNumber(v, b);\r\n\r\n if (b == null) {\r\n\r\n if (v && v._isBigNumber === true) {\r\n x.s = v.s;\r\n\r\n if (!v.c || v.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else if (v.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = v.e;\r\n x.c = v.c.slice();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if ((isNum = typeof v == 'number') && v * 0 == 0) {\r\n\r\n // Use `1 / n` to handle minus zero also.\r\n x.s = 1 / v < 0 ? (v = -v, -1) : 1;\r\n\r\n // Fast path for integers, where n < 2147483648 (2**31).\r\n if (v === ~~v) {\r\n for (e = 0, i = v; i >= 10; i /= 10, e++);\r\n\r\n if (e > MAX_EXP) {\r\n x.c = x.e = null;\r\n } else {\r\n x.e = e;\r\n x.c = [v];\r\n }\r\n\r\n return;\r\n }\r\n\r\n str = String(v);\r\n } else {\r\n\r\n if (!isNumeric.test(str = String(v))) return parseNumeric(x, str, isNum);\r\n\r\n x.s = str.charCodeAt(0) == 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = str.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +str.slice(i + 1);\r\n str = str.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = str.length;\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n\r\n // Allow exponential notation to be used with base 10 argument, while\r\n // also rounding to DECIMAL_PLACES as with other bases.\r\n if (b == 10) {\r\n x = new BigNumber(v);\r\n return round(x, DECIMAL_PLACES + x.e + 1, ROUNDING_MODE);\r\n }\r\n\r\n str = String(v);\r\n\r\n if (isNum = typeof v == 'number') {\r\n\r\n // Avoid potential interpretation of Infinity and NaN as base 44+ values.\r\n if (v * 0 != 0) return parseNumeric(x, str, isNum, b);\r\n\r\n x.s = 1 / v < 0 ? (str = str.slice(1), -1) : 1;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (BigNumber.DEBUG && str.replace(/^0\\.0*|\\./, '').length > 15) {\r\n throw Error\r\n (tooManyDigits + v);\r\n }\r\n } else {\r\n x.s = str.charCodeAt(0) === 45 ? (str = str.slice(1), -1) : 1;\r\n }\r\n\r\n alphabet = ALPHABET.slice(0, b);\r\n e = i = 0;\r\n\r\n // Check that str is a valid base b number.\r\n // Don't use RegExp, so alphabet can contain special characters.\r\n for (len = str.length; i < len; i++) {\r\n if (alphabet.indexOf(c = str.charAt(i)) < 0) {\r\n if (c == '.') {\r\n\r\n // If '.' is not the first character and it has not be found before.\r\n if (i > e) {\r\n e = len;\r\n continue;\r\n }\r\n } else if (!caseChanged) {\r\n\r\n // Allow e.g. hexadecimal 'FF' as well as 'ff'.\r\n if (str == str.toUpperCase() && (str = str.toLowerCase()) ||\r\n str == str.toLowerCase() && (str = str.toUpperCase())) {\r\n caseChanged = true;\r\n i = -1;\r\n e = 0;\r\n continue;\r\n }\r\n }\r\n\r\n return parseNumeric(x, String(v), isNum, b);\r\n }\r\n }\r\n\r\n // Prevent later check for length on converted number.\r\n isNum = false;\r\n str = convertBase(str, b, 10, x.s);\r\n\r\n // Decimal point?\r\n if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\r\n else e = str.length;\r\n }\r\n\r\n // Determine leading zeros.\r\n for (i = 0; str.charCodeAt(i) === 48; i++);\r\n\r\n // Determine trailing zeros.\r\n for (len = str.length; str.charCodeAt(--len) === 48;);\r\n\r\n if (str = str.slice(i, ++len)) {\r\n len -= i;\r\n\r\n // '[BigNumber Error] Number primitive has more than 15 significant digits: {n}'\r\n if (isNum && BigNumber.DEBUG &&\r\n len > 15 && (v > MAX_SAFE_INTEGER || v !== mathfloor(v))) {\r\n throw Error\r\n (tooManyDigits + (x.s * v));\r\n }\r\n\r\n // Overflow?\r\n if ((e = e - i - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n x.c = x.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n x.e = e;\r\n x.c = [];\r\n\r\n // Transform base\r\n\r\n // e is the base 10 exponent.\r\n // i is where to slice str to get the first element of the coefficient array.\r\n i = (e + 1) % LOG_BASE;\r\n if (e < 0) i += LOG_BASE; // i < 1\r\n\r\n if (i < len) {\r\n if (i) x.c.push(+str.slice(0, i));\r\n\r\n for (len -= LOG_BASE; i < len;) {\r\n x.c.push(+str.slice(i, i += LOG_BASE));\r\n }\r\n\r\n i = LOG_BASE - (str = str.slice(i)).length;\r\n } else {\r\n i -= len;\r\n }\r\n\r\n for (; i--; str += '0');\r\n x.c.push(+str);\r\n }\r\n } else {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n\r\n // CONSTRUCTOR PROPERTIES\r\n\r\n\r\n BigNumber.clone = clone;\r\n\r\n BigNumber.ROUND_UP = 0;\r\n BigNumber.ROUND_DOWN = 1;\r\n BigNumber.ROUND_CEIL = 2;\r\n BigNumber.ROUND_FLOOR = 3;\r\n BigNumber.ROUND_HALF_UP = 4;\r\n BigNumber.ROUND_HALF_DOWN = 5;\r\n BigNumber.ROUND_HALF_EVEN = 6;\r\n BigNumber.ROUND_HALF_CEIL = 7;\r\n BigNumber.ROUND_HALF_FLOOR = 8;\r\n BigNumber.EUCLID = 9;\r\n\r\n\r\n /*\r\n * Configure infrequently-changing library-wide settings.\r\n *\r\n * Accept an object with the following optional properties (if the value of a property is\r\n * a number, it must be an integer within the inclusive range stated):\r\n *\r\n * DECIMAL_PLACES {number} 0 to MAX\r\n * ROUNDING_MODE {number} 0 to 8\r\n * EXPONENTIAL_AT {number|number[]} -MAX to MAX or [-MAX to 0, 0 to MAX]\r\n * RANGE {number|number[]} -MAX to MAX (not zero) or [-MAX to -1, 1 to MAX]\r\n * CRYPTO {boolean} true or false\r\n * MODULO_MODE {number} 0 to 9\r\n * POW_PRECISION {number} 0 to MAX\r\n * ALPHABET {string} A string of two or more unique characters which does\r\n * not contain '.'.\r\n * FORMAT {object} An object with some of the following properties:\r\n * prefix {string}\r\n * groupSize {number}\r\n * secondaryGroupSize {number}\r\n * groupSeparator {string}\r\n * decimalSeparator {string}\r\n * fractionGroupSize {number}\r\n * fractionGroupSeparator {string}\r\n * suffix {string}\r\n *\r\n * (The values assigned to the above FORMAT object properties are not checked for validity.)\r\n *\r\n * E.g.\r\n * BigNumber.config({ DECIMAL_PLACES : 20, ROUNDING_MODE : 4 })\r\n *\r\n * Ignore properties/parameters set to null or undefined, except for ALPHABET.\r\n *\r\n * Return an object with the properties current values.\r\n */\r\n BigNumber.config = BigNumber.set = function (obj) {\r\n var p, v;\r\n\r\n if (obj != null) {\r\n\r\n if (typeof obj == 'object') {\r\n\r\n // DECIMAL_PLACES {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] DECIMAL_PLACES {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'DECIMAL_PLACES')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n DECIMAL_PLACES = v;\r\n }\r\n\r\n // ROUNDING_MODE {number} Integer, 0 to 8 inclusive.\r\n // '[BigNumber Error] ROUNDING_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'ROUNDING_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 8, p);\r\n ROUNDING_MODE = v;\r\n }\r\n\r\n // EXPONENTIAL_AT {number|number[]}\r\n // Integer, -MAX to MAX inclusive or\r\n // [integer -MAX to 0 inclusive, 0 to MAX inclusive].\r\n // '[BigNumber Error] EXPONENTIAL_AT {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'EXPONENTIAL_AT')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, 0, p);\r\n intCheck(v[1], 0, MAX, p);\r\n TO_EXP_NEG = v[0];\r\n TO_EXP_POS = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n TO_EXP_NEG = -(TO_EXP_POS = v < 0 ? -v : v);\r\n }\r\n }\r\n\r\n // RANGE {number|number[]} Non-zero integer, -MAX to MAX inclusive or\r\n // [integer -MAX to -1 inclusive, integer 1 to MAX inclusive].\r\n // '[BigNumber Error] RANGE {not a primitive number|not an integer|out of range|cannot be zero}: {v}'\r\n if (obj.hasOwnProperty(p = 'RANGE')) {\r\n v = obj[p];\r\n if (v && v.pop) {\r\n intCheck(v[0], -MAX, -1, p);\r\n intCheck(v[1], 1, MAX, p);\r\n MIN_EXP = v[0];\r\n MAX_EXP = v[1];\r\n } else {\r\n intCheck(v, -MAX, MAX, p);\r\n if (v) {\r\n MIN_EXP = -(MAX_EXP = v < 0 ? -v : v);\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' cannot be zero: ' + v);\r\n }\r\n }\r\n }\r\n\r\n // CRYPTO {boolean} true or false.\r\n // '[BigNumber Error] CRYPTO not true or false: {v}'\r\n // '[BigNumber Error] crypto unavailable'\r\n if (obj.hasOwnProperty(p = 'CRYPTO')) {\r\n v = obj[p];\r\n if (v === !!v) {\r\n if (v) {\r\n if (typeof crypto != 'undefined' && crypto &&\r\n (crypto.getRandomValues || crypto.randomBytes)) {\r\n CRYPTO = v;\r\n } else {\r\n CRYPTO = !v;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n } else {\r\n CRYPTO = v;\r\n }\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' not true or false: ' + v);\r\n }\r\n }\r\n\r\n // MODULO_MODE {number} Integer, 0 to 9 inclusive.\r\n // '[BigNumber Error] MODULO_MODE {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'MODULO_MODE')) {\r\n v = obj[p];\r\n intCheck(v, 0, 9, p);\r\n MODULO_MODE = v;\r\n }\r\n\r\n // POW_PRECISION {number} Integer, 0 to MAX inclusive.\r\n // '[BigNumber Error] POW_PRECISION {not a primitive number|not an integer|out of range}: {v}'\r\n if (obj.hasOwnProperty(p = 'POW_PRECISION')) {\r\n v = obj[p];\r\n intCheck(v, 0, MAX, p);\r\n POW_PRECISION = v;\r\n }\r\n\r\n // FORMAT {object}\r\n // '[BigNumber Error] FORMAT not an object: {v}'\r\n if (obj.hasOwnProperty(p = 'FORMAT')) {\r\n v = obj[p];\r\n if (typeof v == 'object') FORMAT = v;\r\n else throw Error\r\n (bignumberError + p + ' not an object: ' + v);\r\n }\r\n\r\n // ALPHABET {string}\r\n // '[BigNumber Error] ALPHABET invalid: {v}'\r\n if (obj.hasOwnProperty(p = 'ALPHABET')) {\r\n v = obj[p];\r\n\r\n // Disallow if less than two characters,\r\n // or if it contains '+', '-', '.', whitespace, or a repeated character.\r\n if (typeof v == 'string' && !/^.?$|[+\\-.\\s]|(.).*\\1/.test(v)) {\r\n ALPHABET = v;\r\n } else {\r\n throw Error\r\n (bignumberError + p + ' invalid: ' + v);\r\n }\r\n }\r\n\r\n } else {\r\n\r\n // '[BigNumber Error] Object expected: {v}'\r\n throw Error\r\n (bignumberError + 'Object expected: ' + obj);\r\n }\r\n }\r\n\r\n return {\r\n DECIMAL_PLACES: DECIMAL_PLACES,\r\n ROUNDING_MODE: ROUNDING_MODE,\r\n EXPONENTIAL_AT: [TO_EXP_NEG, TO_EXP_POS],\r\n RANGE: [MIN_EXP, MAX_EXP],\r\n CRYPTO: CRYPTO,\r\n MODULO_MODE: MODULO_MODE,\r\n POW_PRECISION: POW_PRECISION,\r\n FORMAT: FORMAT,\r\n ALPHABET: ALPHABET\r\n };\r\n };\r\n\r\n\r\n /*\r\n * Return true if v is a BigNumber instance, otherwise return false.\r\n *\r\n * If BigNumber.DEBUG is true, throw if a BigNumber instance is not well-formed.\r\n *\r\n * v {any}\r\n *\r\n * '[BigNumber Error] Invalid BigNumber: {v}'\r\n */\r\n BigNumber.isBigNumber = function (v) {\r\n if (!v || v._isBigNumber !== true) return false;\r\n if (!BigNumber.DEBUG) return true;\r\n\r\n var i, n,\r\n c = v.c,\r\n e = v.e,\r\n s = v.s;\r\n\r\n out: if ({}.toString.call(c) == '[object Array]') {\r\n\r\n if ((s === 1 || s === -1) && e >= -MAX && e <= MAX && e === mathfloor(e)) {\r\n\r\n // If the first element is zero, the BigNumber value must be zero.\r\n if (c[0] === 0) {\r\n if (e === 0 && c.length === 1) return true;\r\n break out;\r\n }\r\n\r\n // Calculate number of digits that c[0] should have, based on the exponent.\r\n i = (e + 1) % LOG_BASE;\r\n if (i < 1) i += LOG_BASE;\r\n\r\n // Calculate number of digits of c[0].\r\n //if (Math.ceil(Math.log(c[0] + 1) / Math.LN10) == i) {\r\n if (String(c[0]).length == i) {\r\n\r\n for (i = 0; i < c.length; i++) {\r\n n = c[i];\r\n if (n < 0 || n >= BASE || n !== mathfloor(n)) break out;\r\n }\r\n\r\n // Last element cannot be zero, unless it is the only element.\r\n if (n !== 0) return true;\r\n }\r\n }\r\n\r\n // Infinity/NaN\r\n } else if (c === null && e === null && (s === null || s === 1 || s === -1)) {\r\n return true;\r\n }\r\n\r\n throw Error\r\n (bignumberError + 'Invalid BigNumber: ' + v);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the maximum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.maximum = BigNumber.max = function () {\r\n return maxOrMin(arguments, P.lt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the minimum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.minimum = BigNumber.min = function () {\r\n return maxOrMin(arguments, P.gt);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber with a random value equal to or greater than 0 and less than 1,\r\n * and with dp, or DECIMAL_PLACES if dp is omitted, decimal places (or less if trailing\r\n * zeros are produced).\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp}'\r\n * '[BigNumber Error] crypto unavailable'\r\n */\r\n BigNumber.random = (function () {\r\n var pow2_53 = 0x20000000000000;\r\n\r\n // Return a 53 bit integer n, where 0 <= n < 9007199254740992.\r\n // Check if Math.random() produces more than 32 bits of randomness.\r\n // If it does, assume at least 53 bits are produced, otherwise assume at least 30 bits.\r\n // 0x40000000 is 2^30, 0x800000 is 2^23, 0x1fffff is 2^21 - 1.\r\n var random53bitInt = (Math.random() * pow2_53) & 0x1fffff\r\n ? function () { return mathfloor(Math.random() * pow2_53); }\r\n : function () { return ((Math.random() * 0x40000000 | 0) * 0x800000) +\r\n (Math.random() * 0x800000 | 0); };\r\n\r\n return function (dp) {\r\n var a, b, e, k, v,\r\n i = 0,\r\n c = [],\r\n rand = new BigNumber(ONE);\r\n\r\n if (dp == null) dp = DECIMAL_PLACES;\r\n else intCheck(dp, 0, MAX);\r\n\r\n k = mathceil(dp / LOG_BASE);\r\n\r\n if (CRYPTO) {\r\n\r\n // Browsers supporting crypto.getRandomValues.\r\n if (crypto.getRandomValues) {\r\n\r\n a = crypto.getRandomValues(new Uint32Array(k *= 2));\r\n\r\n for (; i < k;) {\r\n\r\n // 53 bits:\r\n // ((Math.pow(2, 32) - 1) * Math.pow(2, 21)).toString(2)\r\n // 11111 11111111 11111111 11111111 11100000 00000000 00000000\r\n // ((Math.pow(2, 32) - 1) >>> 11).toString(2)\r\n // 11111 11111111 11111111\r\n // 0x20000 is 2^21.\r\n v = a[i] * 0x20000 + (a[i + 1] >>> 11);\r\n\r\n // Rejection sampling:\r\n // 0 <= v < 9007199254740992\r\n // Probability that v >= 9e15, is\r\n // 7199254740992 / 9007199254740992 ~= 0.0008, i.e. 1 in 1251\r\n if (v >= 9e15) {\r\n b = crypto.getRandomValues(new Uint32Array(2));\r\n a[i] = b[0];\r\n a[i + 1] = b[1];\r\n } else {\r\n\r\n // 0 <= v <= 8999999999999999\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 2;\r\n }\r\n }\r\n i = k / 2;\r\n\r\n // Node.js supporting crypto.randomBytes.\r\n } else if (crypto.randomBytes) {\r\n\r\n // buffer\r\n a = crypto.randomBytes(k *= 7);\r\n\r\n for (; i < k;) {\r\n\r\n // 0x1000000000000 is 2^48, 0x10000000000 is 2^40\r\n // 0x100000000 is 2^32, 0x1000000 is 2^24\r\n // 11111 11111111 11111111 11111111 11111111 11111111 11111111\r\n // 0 <= v < 9007199254740992\r\n v = ((a[i] & 31) * 0x1000000000000) + (a[i + 1] * 0x10000000000) +\r\n (a[i + 2] * 0x100000000) + (a[i + 3] * 0x1000000) +\r\n (a[i + 4] << 16) + (a[i + 5] << 8) + a[i + 6];\r\n\r\n if (v >= 9e15) {\r\n crypto.randomBytes(7).copy(a, i);\r\n } else {\r\n\r\n // 0 <= (v % 1e14) <= 99999999999999\r\n c.push(v % 1e14);\r\n i += 7;\r\n }\r\n }\r\n i = k / 7;\r\n } else {\r\n CRYPTO = false;\r\n throw Error\r\n (bignumberError + 'crypto unavailable');\r\n }\r\n }\r\n\r\n // Use Math.random.\r\n if (!CRYPTO) {\r\n\r\n for (; i < k;) {\r\n v = random53bitInt();\r\n if (v < 9e15) c[i++] = v % 1e14;\r\n }\r\n }\r\n\r\n k = c[--i];\r\n dp %= LOG_BASE;\r\n\r\n // Convert trailing digits to zeros according to dp.\r\n if (k && dp) {\r\n v = POWS_TEN[LOG_BASE - dp];\r\n c[i] = mathfloor(k / v) * v;\r\n }\r\n\r\n // Remove trailing elements which are zero.\r\n for (; c[i] === 0; c.pop(), i--);\r\n\r\n // Zero?\r\n if (i < 0) {\r\n c = [e = 0];\r\n } else {\r\n\r\n // Remove leading elements which are zero and adjust exponent accordingly.\r\n for (e = -1 ; c[0] === 0; c.splice(0, 1), e -= LOG_BASE);\r\n\r\n // Count the digits of the first element of c to determine leading zeros, and...\r\n for (i = 1, v = c[0]; v >= 10; v /= 10, i++);\r\n\r\n // adjust the exponent accordingly.\r\n if (i < LOG_BASE) e -= LOG_BASE - i;\r\n }\r\n\r\n rand.e = e;\r\n rand.c = c;\r\n return rand;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the sum of the arguments.\r\n *\r\n * arguments {number|string|BigNumber}\r\n */\r\n BigNumber.sum = function () {\r\n var i = 1,\r\n args = arguments,\r\n sum = new BigNumber(args[0]);\r\n for (; i < args.length;) sum = sum.plus(args[i++]);\r\n return sum;\r\n };\r\n\r\n\r\n // PRIVATE FUNCTIONS\r\n\r\n\r\n // Called by BigNumber and BigNumber.prototype.toString.\r\n convertBase = (function () {\r\n var decimal = '0123456789';\r\n\r\n /*\r\n * Convert string of baseIn to an array of numbers of baseOut.\r\n * Eg. toBaseOut('255', 10, 16) returns [15, 15].\r\n * Eg. toBaseOut('ff', 16, 10) returns [2, 5, 5].\r\n */\r\n function toBaseOut(str, baseIn, baseOut, alphabet) {\r\n var j,\r\n arr = [0],\r\n arrL,\r\n i = 0,\r\n len = str.length;\r\n\r\n for (; i < len;) {\r\n for (arrL = arr.length; arrL--; arr[arrL] *= baseIn);\r\n\r\n arr[0] += alphabet.indexOf(str.charAt(i++));\r\n\r\n for (j = 0; j < arr.length; j++) {\r\n\r\n if (arr[j] > baseOut - 1) {\r\n if (arr[j + 1] == null) arr[j + 1] = 0;\r\n arr[j + 1] += arr[j] / baseOut | 0;\r\n arr[j] %= baseOut;\r\n }\r\n }\r\n }\r\n\r\n return arr.reverse();\r\n }\r\n\r\n // Convert a numeric string of baseIn to a numeric string of baseOut.\r\n // If the caller is toString, we are converting from base 10 to baseOut.\r\n // If the caller is BigNumber, we are converting from baseIn to base 10.\r\n return function (str, baseIn, baseOut, sign, callerIsToString) {\r\n var alphabet, d, e, k, r, x, xc, y,\r\n i = str.indexOf('.'),\r\n dp = DECIMAL_PLACES,\r\n rm = ROUNDING_MODE;\r\n\r\n // Non-integer.\r\n if (i >= 0) {\r\n k = POW_PRECISION;\r\n\r\n // Unlimited precision.\r\n POW_PRECISION = 0;\r\n str = str.replace('.', '');\r\n y = new BigNumber(baseIn);\r\n x = y.pow(str.length - i);\r\n POW_PRECISION = k;\r\n\r\n // Convert str as if an integer, then restore the fraction part by dividing the\r\n // result by its base raised to a power.\r\n\r\n y.c = toBaseOut(toFixedPoint(coeffToString(x.c), x.e, '0'),\r\n 10, baseOut, decimal);\r\n y.e = y.c.length;\r\n }\r\n\r\n // Convert the number as integer.\r\n\r\n xc = toBaseOut(str, baseIn, baseOut, callerIsToString\r\n ? (alphabet = ALPHABET, decimal)\r\n : (alphabet = decimal, ALPHABET));\r\n\r\n // xc now represents str as an integer and converted to baseOut. e is the exponent.\r\n e = k = xc.length;\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--k] == 0; xc.pop());\r\n\r\n // Zero?\r\n if (!xc[0]) return alphabet.charAt(0);\r\n\r\n // Does str represent an integer? If so, no need for the division.\r\n if (i < 0) {\r\n --e;\r\n } else {\r\n x.c = xc;\r\n x.e = e;\r\n\r\n // The sign is needed for correct rounding.\r\n x.s = sign;\r\n x = div(x, y, dp, rm, baseOut);\r\n xc = x.c;\r\n r = x.r;\r\n e = x.e;\r\n }\r\n\r\n // xc now represents str converted to baseOut.\r\n\r\n // THe index of the rounding digit.\r\n d = e + dp + 1;\r\n\r\n // The rounding digit: the digit to the right of the digit that may be rounded up.\r\n i = xc[d];\r\n\r\n // Look at the rounding digits and mode to determine whether to round up.\r\n\r\n k = baseOut / 2;\r\n r = r || d < 0 || xc[d + 1] != null;\r\n\r\n r = rm < 4 ? (i != null || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : i > k || i == k &&(rm == 4 || r || rm == 6 && xc[d - 1] & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n // If the index of the rounding digit is not greater than zero, or xc represents\r\n // zero, then the result of the base conversion is zero or, if rounding up, a value\r\n // such as 0.00001.\r\n if (d < 1 || !xc[0]) {\r\n\r\n // 1^-dp or 0\r\n str = r ? toFixedPoint(alphabet.charAt(1), -dp, alphabet.charAt(0)) : alphabet.charAt(0);\r\n } else {\r\n\r\n // Truncate xc to the required number of decimal places.\r\n xc.length = d;\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up and so on.\r\n for (--baseOut; ++xc[--d] > baseOut;) {\r\n xc[d] = 0;\r\n\r\n if (!d) {\r\n ++e;\r\n xc = [1].concat(xc);\r\n }\r\n }\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (k = xc.length; !xc[--k];);\r\n\r\n // E.g. [4, 11, 15] becomes 4bf.\r\n for (i = 0, str = ''; i <= k; str += alphabet.charAt(xc[i++]));\r\n\r\n // Add leading zeros, decimal point and trailing zeros as required.\r\n str = toFixedPoint(str, e, alphabet.charAt(0));\r\n }\r\n\r\n // The caller will add the sign.\r\n return str;\r\n };\r\n })();\r\n\r\n\r\n // Perform division in the specified base. Called by div and convertBase.\r\n div = (function () {\r\n\r\n // Assume non-zero x and k.\r\n function multiply(x, k, base) {\r\n var m, temp, xlo, xhi,\r\n carry = 0,\r\n i = x.length,\r\n klo = k % SQRT_BASE,\r\n khi = k / SQRT_BASE | 0;\r\n\r\n for (x = x.slice(); i--;) {\r\n xlo = x[i] % SQRT_BASE;\r\n xhi = x[i] / SQRT_BASE | 0;\r\n m = khi * xlo + xhi * klo;\r\n temp = klo * xlo + ((m % SQRT_BASE) * SQRT_BASE) + carry;\r\n carry = (temp / base | 0) + (m / SQRT_BASE | 0) + khi * xhi;\r\n x[i] = temp % base;\r\n }\r\n\r\n if (carry) x = [carry].concat(x);\r\n\r\n return x;\r\n }\r\n\r\n function compare(a, b, aL, bL) {\r\n var i, cmp;\r\n\r\n if (aL != bL) {\r\n cmp = aL > bL ? 1 : -1;\r\n } else {\r\n\r\n for (i = cmp = 0; i < aL; i++) {\r\n\r\n if (a[i] != b[i]) {\r\n cmp = a[i] > b[i] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n function subtract(a, b, aL, base) {\r\n var i = 0;\r\n\r\n // Subtract b from a.\r\n for (; aL--;) {\r\n a[aL] -= i;\r\n i = a[aL] < b[aL] ? 1 : 0;\r\n a[aL] = i * base + a[aL] - b[aL];\r\n }\r\n\r\n // Remove leading zeros.\r\n for (; !a[0] && a.length > 1; a.splice(0, 1));\r\n }\r\n\r\n // x: dividend, y: divisor.\r\n return function (x, y, dp, rm, base) {\r\n var cmp, e, i, more, n, prod, prodL, q, qc, rem, remL, rem0, xi, xL, yc0,\r\n yL, yz,\r\n s = x.s == y.s ? 1 : -1,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n // Either NaN, Infinity or 0?\r\n if (!xc || !xc[0] || !yc || !yc[0]) {\r\n\r\n return new BigNumber(\r\n\r\n // Return NaN if either NaN, or both Infinity or 0.\r\n !x.s || !y.s || (xc ? yc && xc[0] == yc[0] : !yc) ? NaN :\r\n\r\n // Return ±0 if x is ±0 or y is ±Infinity, or return ±Infinity as y is ±0.\r\n xc && xc[0] == 0 || !yc ? s * 0 : s / 0\r\n );\r\n }\r\n\r\n q = new BigNumber(s);\r\n qc = q.c = [];\r\n e = x.e - y.e;\r\n s = dp + e + 1;\r\n\r\n if (!base) {\r\n base = BASE;\r\n e = bitFloor(x.e / LOG_BASE) - bitFloor(y.e / LOG_BASE);\r\n s = s / LOG_BASE | 0;\r\n }\r\n\r\n // Result exponent may be one less then the current value of e.\r\n // The coefficients of the BigNumbers from convertBase may have trailing zeros.\r\n for (i = 0; yc[i] == (xc[i] || 0); i++);\r\n\r\n if (yc[i] > (xc[i] || 0)) e--;\r\n\r\n if (s < 0) {\r\n qc.push(1);\r\n more = true;\r\n } else {\r\n xL = xc.length;\r\n yL = yc.length;\r\n i = 0;\r\n s += 2;\r\n\r\n // Normalise xc and yc so highest order digit of yc is >= base / 2.\r\n\r\n n = mathfloor(base / (yc[0] + 1));\r\n\r\n // Not necessary, but to handle odd bases where yc[0] == (base / 2) - 1.\r\n // if (n > 1 || n++ == 1 && yc[0] < base / 2) {\r\n if (n > 1) {\r\n yc = multiply(yc, n, base);\r\n xc = multiply(xc, n, base);\r\n yL = yc.length;\r\n xL = xc.length;\r\n }\r\n\r\n xi = yL;\r\n rem = xc.slice(0, yL);\r\n remL = rem.length;\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; remL < yL; rem[remL++] = 0);\r\n yz = yc.slice();\r\n yz = [0].concat(yz);\r\n yc0 = yc[0];\r\n if (yc[1] >= base / 2) yc0++;\r\n // Not necessary, but to prevent trial digit n > base, when using base 3.\r\n // else if (base == 3 && yc0 == 1) yc0 = 1 + 1e-15;\r\n\r\n do {\r\n n = 0;\r\n\r\n // Compare divisor and remainder.\r\n cmp = compare(yc, rem, yL, remL);\r\n\r\n // If divisor < remainder.\r\n if (cmp < 0) {\r\n\r\n // Calculate trial digit, n.\r\n\r\n rem0 = rem[0];\r\n if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\r\n\r\n // n is how many times the divisor goes into the current remainder.\r\n n = mathfloor(rem0 / yc0);\r\n\r\n // Algorithm:\r\n // product = divisor multiplied by trial digit (n).\r\n // Compare product and remainder.\r\n // If product is greater than remainder:\r\n // Subtract divisor from product, decrement trial digit.\r\n // Subtract product from remainder.\r\n // If product was less than remainder at the last compare:\r\n // Compare new remainder and divisor.\r\n // If remainder is greater than divisor:\r\n // Subtract divisor from remainder, increment trial digit.\r\n\r\n if (n > 1) {\r\n\r\n // n may be > base only when base is 3.\r\n if (n >= base) n = base - 1;\r\n\r\n // product = divisor * trial digit.\r\n prod = multiply(yc, n, base);\r\n prodL = prod.length;\r\n remL = rem.length;\r\n\r\n // Compare product and remainder.\r\n // If product > remainder then trial digit n too high.\r\n // n is 1 too high about 5% of the time, and is not known to have\r\n // ever been more than 1 too high.\r\n while (compare(prod, rem, prodL, remL) == 1) {\r\n n--;\r\n\r\n // Subtract divisor from product.\r\n subtract(prod, yL < prodL ? yz : yc, prodL, base);\r\n prodL = prod.length;\r\n cmp = 1;\r\n }\r\n } else {\r\n\r\n // n is 0 or 1, cmp is -1.\r\n // If n is 0, there is no need to compare yc and rem again below,\r\n // so change cmp to 1 to avoid it.\r\n // If n is 1, leave cmp as -1, so yc and rem are compared again.\r\n if (n == 0) {\r\n\r\n // divisor < remainder, so n must be at least 1.\r\n cmp = n = 1;\r\n }\r\n\r\n // product = divisor\r\n prod = yc.slice();\r\n prodL = prod.length;\r\n }\r\n\r\n if (prodL < remL) prod = [0].concat(prod);\r\n\r\n // Subtract product from remainder.\r\n subtract(rem, prod, remL, base);\r\n remL = rem.length;\r\n\r\n // If product was < remainder.\r\n if (cmp == -1) {\r\n\r\n // Compare divisor and new remainder.\r\n // If divisor < new remainder, subtract divisor from remainder.\r\n // Trial digit n too low.\r\n // n is 1 too low about 5% of the time, and very rarely 2 too low.\r\n while (compare(yc, rem, yL, remL) < 1) {\r\n n++;\r\n\r\n // Subtract divisor from remainder.\r\n subtract(rem, yL < remL ? yz : yc, remL, base);\r\n remL = rem.length;\r\n }\r\n }\r\n } else if (cmp === 0) {\r\n n++;\r\n rem = [0];\r\n } // else cmp === 1 and n will be 0\r\n\r\n // Add the next digit, n, to the result array.\r\n qc[i++] = n;\r\n\r\n // Update the remainder.\r\n if (rem[0]) {\r\n rem[remL++] = xc[xi] || 0;\r\n } else {\r\n rem = [xc[xi]];\r\n remL = 1;\r\n }\r\n } while ((xi++ < xL || rem[0] != null) && s--);\r\n\r\n more = rem[0] != null;\r\n\r\n // Leading zero?\r\n if (!qc[0]) qc.splice(0, 1);\r\n }\r\n\r\n if (base == BASE) {\r\n\r\n // To calculate q.e, first get the number of digits of qc[0].\r\n for (i = 1, s = qc[0]; s >= 10; s /= 10, i++);\r\n\r\n round(q, dp + (q.e = i + e * LOG_BASE - 1) + 1, rm, more);\r\n\r\n // Caller is convertBase.\r\n } else {\r\n q.e = e;\r\n q.r = +more;\r\n }\r\n\r\n return q;\r\n };\r\n })();\r\n\r\n\r\n /*\r\n * Return a string representing the value of BigNumber n in fixed-point or exponential\r\n * notation rounded to the specified decimal places or significant digits.\r\n *\r\n * n: a BigNumber.\r\n * i: the index of the last digit required (i.e. the digit that may be rounded up).\r\n * rm: the rounding mode.\r\n * id: 1 (toExponential) or 2 (toPrecision).\r\n */\r\n function format(n, i, rm, id) {\r\n var c0, e, ne, len, str;\r\n\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n if (!n.c) return n.toString();\r\n\r\n c0 = n.c[0];\r\n ne = n.e;\r\n\r\n if (i == null) {\r\n str = coeffToString(n.c);\r\n str = id == 1 || id == 2 && (ne <= TO_EXP_NEG || ne >= TO_EXP_POS)\r\n ? toExponential(str, ne)\r\n : toFixedPoint(str, ne, '0');\r\n } else {\r\n n = round(new BigNumber(n), i, rm);\r\n\r\n // n.e may have changed if the value was rounded up.\r\n e = n.e;\r\n\r\n str = coeffToString(n.c);\r\n len = str.length;\r\n\r\n // toPrecision returns exponential notation if the number of significant digits\r\n // specified is less than the number of digits necessary to represent the integer\r\n // part of the value in fixed-point notation.\r\n\r\n // Exponential notation.\r\n if (id == 1 || id == 2 && (i <= e || e <= TO_EXP_NEG)) {\r\n\r\n // Append zeros?\r\n for (; len < i; str += '0', len++);\r\n str = toExponential(str, e);\r\n\r\n // Fixed-point notation.\r\n } else {\r\n i -= ne;\r\n str = toFixedPoint(str, e, '0');\r\n\r\n // Append zeros?\r\n if (e + 1 > len) {\r\n if (--i > 0) for (str += '.'; i--; str += '0');\r\n } else {\r\n i += e - len;\r\n if (i > 0) {\r\n if (e + 1 == len) str += '.';\r\n for (; i--; str += '0');\r\n }\r\n }\r\n }\r\n }\r\n\r\n return n.s < 0 && c0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // Handle BigNumber.max and BigNumber.min.\r\n function maxOrMin(args, method) {\r\n var n,\r\n i = 1,\r\n m = new BigNumber(args[0]);\r\n\r\n for (; i < args.length; i++) {\r\n n = new BigNumber(args[i]);\r\n\r\n // If any number is NaN, return NaN.\r\n if (!n.s) {\r\n m = n;\r\n break;\r\n } else if (method.call(m, n)) {\r\n m = n;\r\n }\r\n }\r\n\r\n return m;\r\n }\r\n\r\n\r\n /*\r\n * Strip trailing zeros, calculate base 10 exponent and check against MIN_EXP and MAX_EXP.\r\n * Called by minus, plus and times.\r\n */\r\n function normalise(n, c, e) {\r\n var i = 1,\r\n j = c.length;\r\n\r\n // Remove trailing zeros.\r\n for (; !c[--j]; c.pop());\r\n\r\n // Calculate the base 10 exponent. First get the number of digits of c[0].\r\n for (j = c[0]; j >= 10; j /= 10, i++);\r\n\r\n // Overflow?\r\n if ((e = i + e * LOG_BASE - 1) > MAX_EXP) {\r\n\r\n // Infinity.\r\n n.c = n.e = null;\r\n\r\n // Underflow?\r\n } else if (e < MIN_EXP) {\r\n\r\n // Zero.\r\n n.c = [n.e = 0];\r\n } else {\r\n n.e = e;\r\n n.c = c;\r\n }\r\n\r\n return n;\r\n }\r\n\r\n\r\n // Handle values that fail the validity test in BigNumber.\r\n parseNumeric = (function () {\r\n var basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i,\r\n dotAfter = /^([^.]+)\\.$/,\r\n dotBefore = /^\\.([^.]+)$/,\r\n isInfinityOrNaN = /^-?(Infinity|NaN)$/,\r\n whitespaceOrPlus = /^\\s*\\+(?=[\\w.])|^\\s+|\\s+$/g;\r\n\r\n return function (x, str, isNum, b) {\r\n var base,\r\n s = isNum ? str : str.replace(whitespaceOrPlus, '');\r\n\r\n // No exception on ±Infinity or NaN.\r\n if (isInfinityOrNaN.test(s)) {\r\n x.s = isNaN(s) ? null : s < 0 ? -1 : 1;\r\n } else {\r\n if (!isNum) {\r\n\r\n // basePrefix = /^(-?)0([xbo])(?=\\w[\\w.]*$)/i\r\n s = s.replace(basePrefix, function (m, p1, p2) {\r\n base = (p2 = p2.toLowerCase()) == 'x' ? 16 : p2 == 'b' ? 2 : 8;\r\n return !b || b == base ? p1 : m;\r\n });\r\n\r\n if (b) {\r\n base = b;\r\n\r\n // E.g. '1.' to '1', '.1' to '0.1'\r\n s = s.replace(dotAfter, '$1').replace(dotBefore, '0.$1');\r\n }\r\n\r\n if (str != s) return new BigNumber(s, base);\r\n }\r\n\r\n // '[BigNumber Error] Not a number: {n}'\r\n // '[BigNumber Error] Not a base {b} number: {n}'\r\n if (BigNumber.DEBUG) {\r\n throw Error\r\n (bignumberError + 'Not a' + (b ? ' base ' + b : '') + ' number: ' + str);\r\n }\r\n\r\n // NaN\r\n x.s = null;\r\n }\r\n\r\n x.c = x.e = null;\r\n }\r\n })();\r\n\r\n\r\n /*\r\n * Round x to sd significant digits using rounding mode rm. Check for over/under-flow.\r\n * If r is truthy, it is known that there are more digits after the rounding digit.\r\n */\r\n function round(x, sd, rm, r) {\r\n var d, i, j, k, n, ni, rd,\r\n xc = x.c,\r\n pows10 = POWS_TEN;\r\n\r\n // if x is not Infinity or NaN...\r\n if (xc) {\r\n\r\n // rd is the rounding digit, i.e. the digit after the digit that may be rounded up.\r\n // n is a base 1e14 number, the value of the element of array x.c containing rd.\r\n // ni is the index of n within x.c.\r\n // d is the number of digits of n.\r\n // i is the index of rd within n including leading zeros.\r\n // j is the actual index of rd within n (if < 0, rd is a leading zero).\r\n out: {\r\n\r\n // Get the number of digits of the first element of xc.\r\n for (d = 1, k = xc[0]; k >= 10; k /= 10, d++);\r\n i = sd - d;\r\n\r\n // If the rounding digit is in the first element of xc...\r\n if (i < 0) {\r\n i += LOG_BASE;\r\n j = sd;\r\n n = xc[ni = 0];\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = n / pows10[d - j - 1] % 10 | 0;\r\n } else {\r\n ni = mathceil((i + 1) / LOG_BASE);\r\n\r\n if (ni >= xc.length) {\r\n\r\n if (r) {\r\n\r\n // Needed by sqrt.\r\n for (; xc.length <= ni; xc.push(0));\r\n n = rd = 0;\r\n d = 1;\r\n i %= LOG_BASE;\r\n j = i - LOG_BASE + 1;\r\n } else {\r\n break out;\r\n }\r\n } else {\r\n n = k = xc[ni];\r\n\r\n // Get the number of digits of n.\r\n for (d = 1; k >= 10; k /= 10, d++);\r\n\r\n // Get the index of rd within n.\r\n i %= LOG_BASE;\r\n\r\n // Get the index of rd within n, adjusted for leading zeros.\r\n // The number of leading zeros of n is given by LOG_BASE - d.\r\n j = i - LOG_BASE + d;\r\n\r\n // Get the rounding digit at index j of n.\r\n rd = j < 0 ? 0 : n / pows10[d - j - 1] % 10 | 0;\r\n }\r\n }\r\n\r\n r = r || sd < 0 ||\r\n\r\n // Are there any non-zero digits after the rounding digit?\r\n // The expression n % pows10[d - j - 1] returns all digits of n to the right\r\n // of the digit at j, e.g. if n is 908714 and j is 2, the expression gives 714.\r\n xc[ni + 1] != null || (j < 0 ? n : n % pows10[d - j - 1]);\r\n\r\n r = rm < 4\r\n ? (rd || r) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\r\n : rd > 5 || rd == 5 && (rm == 4 || r || rm == 6 &&\r\n\r\n // Check whether the digit to the left of the rounding digit is odd.\r\n ((i > 0 ? j > 0 ? n / pows10[d - j] : 0 : xc[ni - 1]) % 10) & 1 ||\r\n rm == (x.s < 0 ? 8 : 7));\r\n\r\n if (sd < 1 || !xc[0]) {\r\n xc.length = 0;\r\n\r\n if (r) {\r\n\r\n // Convert sd to decimal places.\r\n sd -= x.e + 1;\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n xc[0] = pows10[(LOG_BASE - sd % LOG_BASE) % LOG_BASE];\r\n x.e = -sd || 0;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n\r\n return x;\r\n }\r\n\r\n // Remove excess digits.\r\n if (i == 0) {\r\n xc.length = ni;\r\n k = 1;\r\n ni--;\r\n } else {\r\n xc.length = ni + 1;\r\n k = pows10[LOG_BASE - i];\r\n\r\n // E.g. 56700 becomes 56000 if 7 is the rounding digit.\r\n // j > 0 means i > number of leading zeros of n.\r\n xc[ni] = j > 0 ? mathfloor(n / pows10[d - j] % pows10[j]) * k : 0;\r\n }\r\n\r\n // Round up?\r\n if (r) {\r\n\r\n for (; ;) {\r\n\r\n // If the digit to be rounded up is in the first element of xc...\r\n if (ni == 0) {\r\n\r\n // i will be the length of xc[0] before k is added.\r\n for (i = 1, j = xc[0]; j >= 10; j /= 10, i++);\r\n j = xc[0] += k;\r\n for (k = 1; j >= 10; j /= 10, k++);\r\n\r\n // if i != k the length has increased.\r\n if (i != k) {\r\n x.e++;\r\n if (xc[0] == BASE) xc[0] = 1;\r\n }\r\n\r\n break;\r\n } else {\r\n xc[ni] += k;\r\n if (xc[ni] != BASE) break;\r\n xc[ni--] = 0;\r\n k = 1;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (i = xc.length; xc[--i] === 0; xc.pop());\r\n }\r\n\r\n // Overflow? Infinity.\r\n if (x.e > MAX_EXP) {\r\n x.c = x.e = null;\r\n\r\n // Underflow? Zero.\r\n } else if (x.e < MIN_EXP) {\r\n x.c = [x.e = 0];\r\n }\r\n }\r\n\r\n return x;\r\n }\r\n\r\n\r\n function valueOf(n) {\r\n var str,\r\n e = n.e;\r\n\r\n if (e === null) return n.toString();\r\n\r\n str = coeffToString(n.c);\r\n\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(str, e)\r\n : toFixedPoint(str, e, '0');\r\n\r\n return n.s < 0 ? '-' + str : str;\r\n }\r\n\r\n\r\n // PROTOTYPE/INSTANCE METHODS\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the absolute value of this BigNumber.\r\n */\r\n P.absoluteValue = P.abs = function () {\r\n var x = new BigNumber(this);\r\n if (x.s < 0) x.s = 1;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * Return\r\n * 1 if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * -1 if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * 0 if they have the same value,\r\n * or null if the value of either is NaN.\r\n */\r\n P.comparedTo = function (y, b) {\r\n return compare(this, new BigNumber(y, b));\r\n };\r\n\r\n\r\n /*\r\n * If dp is undefined or null or true or false, return the number of decimal places of the\r\n * value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n *\r\n * Otherwise, if dp is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of dp decimal places using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * [dp] {number} Decimal places: integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.decimalPlaces = P.dp = function (dp, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), dp + x.e + 1, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n n = ((v = c.length - 1) - bitFloor(this.e / LOG_BASE)) * LOG_BASE;\r\n\r\n // Subtract the number of trailing zeros of the last number.\r\n if (v = c[v]) for (; v % 10 == 0; v /= 10, n--);\r\n if (n < 0) n = 0;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * n / 0 = I\r\n * n / N = N\r\n * n / I = 0\r\n * 0 / n = 0\r\n * 0 / 0 = N\r\n * 0 / N = N\r\n * 0 / I = 0\r\n * N / n = N\r\n * N / 0 = N\r\n * N / N = N\r\n * N / I = N\r\n * I / n = I\r\n * I / 0 = I\r\n * I / N = N\r\n * I / I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber divided by the value of\r\n * BigNumber(y, b), rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.dividedBy = P.div = function (y, b) {\r\n return div(this, new BigNumber(y, b), DECIMAL_PLACES, ROUNDING_MODE);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the integer part of dividing the value of this\r\n * BigNumber by the value of BigNumber(y, b).\r\n */\r\n P.dividedToIntegerBy = P.idiv = function (y, b) {\r\n return div(this, new BigNumber(y, b), 0, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a BigNumber whose value is the value of this BigNumber exponentiated by n.\r\n *\r\n * If m is present, return the result modulo m.\r\n * If n is negative round according to DECIMAL_PLACES and ROUNDING_MODE.\r\n * If POW_PRECISION is non-zero and m is not present, round to POW_PRECISION using ROUNDING_MODE.\r\n *\r\n * The modular power operation works efficiently when x, n, and m are integers, otherwise it\r\n * is equivalent to calculating x.exponentiatedBy(n).modulo(m) with a POW_PRECISION of 0.\r\n *\r\n * n {number|string|BigNumber} The exponent. An integer.\r\n * [m] {number|string|BigNumber} The modulus.\r\n *\r\n * '[BigNumber Error] Exponent not an integer: {n}'\r\n */\r\n P.exponentiatedBy = P.pow = function (n, m) {\r\n var half, isModExp, i, k, more, nIsBig, nIsNeg, nIsOdd, y,\r\n x = this;\r\n\r\n n = new BigNumber(n);\r\n\r\n // Allow NaN and ±Infinity, but not other non-integers.\r\n if (n.c && !n.isInteger()) {\r\n throw Error\r\n (bignumberError + 'Exponent not an integer: ' + valueOf(n));\r\n }\r\n\r\n if (m != null) m = new BigNumber(m);\r\n\r\n // Exponent of MAX_SAFE_INTEGER is 15.\r\n nIsBig = n.e > 14;\r\n\r\n // If x is NaN, ±Infinity, ±0 or ±1, or n is ±Infinity, NaN or ±0.\r\n if (!x.c || !x.c[0] || x.c[0] == 1 && !x.e && x.c.length == 1 || !n.c || !n.c[0]) {\r\n\r\n // The sign of the result of pow when x is negative depends on the evenness of n.\r\n // If +n overflows to ±Infinity, the evenness of n would be not be known.\r\n y = new BigNumber(Math.pow(+valueOf(x), nIsBig ? 2 - isOdd(n) : +valueOf(n)));\r\n return m ? y.mod(m) : y;\r\n }\r\n\r\n nIsNeg = n.s < 0;\r\n\r\n if (m) {\r\n\r\n // x % m returns NaN if abs(m) is zero, or m is NaN.\r\n if (m.c ? !m.c[0] : !m.s) return new BigNumber(NaN);\r\n\r\n isModExp = !nIsNeg && x.isInteger() && m.isInteger();\r\n\r\n if (isModExp) x = x.mod(m);\r\n\r\n // Overflow to ±Infinity: >=2**1e10 or >=1.0000024**1e15.\r\n // Underflow to ±0: <=0.79**1e10 or <=0.9999975**1e15.\r\n } else if (n.e > 9 && (x.e > 0 || x.e < -1 || (x.e == 0\r\n // [1, 240000000]\r\n ? x.c[0] > 1 || nIsBig && x.c[1] >= 24e7\r\n // [80000000000000] [99999750000000]\r\n : x.c[0] < 8e13 || nIsBig && x.c[0] <= 9999975e7))) {\r\n\r\n // If x is negative and n is odd, k = -0, else k = 0.\r\n k = x.s < 0 && isOdd(n) ? -0 : 0;\r\n\r\n // If x >= 1, k = ±Infinity.\r\n if (x.e > -1) k = 1 / k;\r\n\r\n // If n is negative return ±0, else return ±Infinity.\r\n return new BigNumber(nIsNeg ? 1 / k : k);\r\n\r\n } else if (POW_PRECISION) {\r\n\r\n // Truncating each coefficient array to a length of k after each multiplication\r\n // equates to truncating significant digits to POW_PRECISION + [28, 41],\r\n // i.e. there will be a minimum of 28 guard digits retained.\r\n k = mathceil(POW_PRECISION / LOG_BASE + 2);\r\n }\r\n\r\n if (nIsBig) {\r\n half = new BigNumber(0.5);\r\n if (nIsNeg) n.s = 1;\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = Math.abs(+valueOf(n));\r\n nIsOdd = i % 2;\r\n }\r\n\r\n y = new BigNumber(ONE);\r\n\r\n // Performs 54 loop iterations for n of 9007199254740991.\r\n for (; ;) {\r\n\r\n if (nIsOdd) {\r\n y = y.times(x);\r\n if (!y.c) break;\r\n\r\n if (k) {\r\n if (y.c.length > k) y.c.length = k;\r\n } else if (isModExp) {\r\n y = y.mod(m); //y = y.minus(div(y, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (i) {\r\n i = mathfloor(i / 2);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n } else {\r\n n = n.times(half);\r\n round(n, n.e + 1, 1);\r\n\r\n if (n.e > 14) {\r\n nIsOdd = isOdd(n);\r\n } else {\r\n i = +valueOf(n);\r\n if (i === 0) break;\r\n nIsOdd = i % 2;\r\n }\r\n }\r\n\r\n x = x.times(x);\r\n\r\n if (k) {\r\n if (x.c && x.c.length > k) x.c.length = k;\r\n } else if (isModExp) {\r\n x = x.mod(m); //x = x.minus(div(x, m, 0, MODULO_MODE).times(m));\r\n }\r\n }\r\n\r\n if (isModExp) return y;\r\n if (nIsNeg) y = ONE.div(y);\r\n\r\n return m ? y.mod(m) : k ? round(y, POW_PRECISION, ROUNDING_MODE, more) : y;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber rounded to an integer\r\n * using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {rm}'\r\n */\r\n P.integerValue = function (rm) {\r\n var n = new BigNumber(this);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n return round(n, n.e + 1, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is equal to the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isEqualTo = P.eq = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is a finite number, otherwise return false.\r\n */\r\n P.isFinite = function () {\r\n return !!this.c;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isGreaterThan = P.gt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is greater than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isGreaterThanOrEqualTo = P.gte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === 1 || b === 0;\r\n\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is an integer, otherwise return false.\r\n */\r\n P.isInteger = function () {\r\n return !!this.c && bitFloor(this.e / LOG_BASE) > this.c.length - 2;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than the value of BigNumber(y, b),\r\n * otherwise return false.\r\n */\r\n P.isLessThan = P.lt = function (y, b) {\r\n return compare(this, new BigNumber(y, b)) < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is less than or equal to the value of\r\n * BigNumber(y, b), otherwise return false.\r\n */\r\n P.isLessThanOrEqualTo = P.lte = function (y, b) {\r\n return (b = compare(this, new BigNumber(y, b))) === -1 || b === 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is NaN, otherwise return false.\r\n */\r\n P.isNaN = function () {\r\n return !this.s;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is negative, otherwise return false.\r\n */\r\n P.isNegative = function () {\r\n return this.s < 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is positive, otherwise return false.\r\n */\r\n P.isPositive = function () {\r\n return this.s > 0;\r\n };\r\n\r\n\r\n /*\r\n * Return true if the value of this BigNumber is 0 or -0, otherwise return false.\r\n */\r\n P.isZero = function () {\r\n return !!this.c && this.c[0] == 0;\r\n };\r\n\r\n\r\n /*\r\n * n - 0 = n\r\n * n - N = N\r\n * n - I = -I\r\n * 0 - n = -n\r\n * 0 - 0 = 0\r\n * 0 - N = N\r\n * 0 - I = -I\r\n * N - n = N\r\n * N - 0 = N\r\n * N - N = N\r\n * N - I = N\r\n * I - n = I\r\n * I - 0 = I\r\n * I - N = N\r\n * I - I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber minus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.minus = function (y, b) {\r\n var i, j, t, xLTy,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return xc ? (y.s = -b, y) : new BigNumber(yc ? x : NaN);\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n return yc[0] ? (y.s = -b, y) : new BigNumber(xc[0] ? x :\r\n\r\n // IEEE 754 (2008) 6.3: n - n = -0 when rounding to -Infinity\r\n ROUNDING_MODE == 3 ? -0 : 0);\r\n }\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Determine which is the bigger number.\r\n if (a = xe - ye) {\r\n\r\n if (xLTy = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n\r\n // Prepend zeros to equalise exponents.\r\n for (b = a; b--; t.push(0));\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = (xLTy = (a = xc.length) < (b = yc.length)) ? a : b;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n\r\n if (xc[b] != yc[b]) {\r\n xLTy = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xLTy) t = xc, xc = yc, yc = t, y.s = -y.s;\r\n\r\n b = (j = yc.length) - (i = xc.length);\r\n\r\n // Append zeros to xc if shorter.\r\n // No need to add zeros to yc if shorter as subtract only needs to start at yc.length.\r\n if (b > 0) for (; b--; xc[i++] = 0);\r\n b = BASE - 1;\r\n\r\n // Subtract yc from xc.\r\n for (; j > a;) {\r\n\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i]; xc[i] = b);\r\n --xc[i];\r\n xc[j] += BASE;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] == 0; xc.splice(0, 1), --ye);\r\n\r\n // Zero?\r\n if (!xc[0]) {\r\n\r\n // Following IEEE 754 (2008) 6.3,\r\n // n - n = +0 but n - n = -0 when rounding towards -Infinity.\r\n y.s = ROUNDING_MODE == 3 ? -1 : 1;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // No need to check for Infinity as +x - +y != Infinity && -x - -y != Infinity\r\n // for finite x and y.\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * n % 0 = N\r\n * n % N = N\r\n * n % I = n\r\n * 0 % n = 0\r\n * -0 % n = -0\r\n * 0 % 0 = N\r\n * 0 % N = N\r\n * 0 % I = 0\r\n * N % n = N\r\n * N % 0 = N\r\n * N % N = N\r\n * N % I = N\r\n * I % n = N\r\n * I % 0 = N\r\n * I % N = N\r\n * I % I = N\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber modulo the value of\r\n * BigNumber(y, b). The result depends on the value of MODULO_MODE.\r\n */\r\n P.modulo = P.mod = function (y, b) {\r\n var q, s,\r\n x = this;\r\n\r\n y = new BigNumber(y, b);\r\n\r\n // Return NaN if x is Infinity or NaN, or y is NaN or zero.\r\n if (!x.c || !y.s || y.c && !y.c[0]) {\r\n return new BigNumber(NaN);\r\n\r\n // Return x if y is Infinity or x is zero.\r\n } else if (!y.c || x.c && !x.c[0]) {\r\n return new BigNumber(x);\r\n }\r\n\r\n if (MODULO_MODE == 9) {\r\n\r\n // Euclidian division: q = sign(y) * floor(x / abs(y))\r\n // r = x - qy where 0 <= r < abs(y)\r\n s = y.s;\r\n y.s = 1;\r\n q = div(x, y, 0, 3);\r\n y.s = s;\r\n q.s *= s;\r\n } else {\r\n q = div(x, y, 0, MODULO_MODE);\r\n }\r\n\r\n y = x.minus(q.times(y));\r\n\r\n // To match JavaScript %, ensure sign of zero is sign of dividend.\r\n if (!y.c[0] && MODULO_MODE == 1) y.s = x.s;\r\n\r\n return y;\r\n };\r\n\r\n\r\n /*\r\n * n * 0 = 0\r\n * n * N = N\r\n * n * I = I\r\n * 0 * n = 0\r\n * 0 * 0 = 0\r\n * 0 * N = N\r\n * 0 * I = N\r\n * N * n = N\r\n * N * 0 = N\r\n * N * N = N\r\n * N * I = N\r\n * I * n = I\r\n * I * 0 = N\r\n * I * N = N\r\n * I * I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber multiplied by the value\r\n * of BigNumber(y, b).\r\n */\r\n P.multipliedBy = P.times = function (y, b) {\r\n var c, e, i, j, k, m, xcL, xlo, xhi, ycL, ylo, yhi, zc,\r\n base, sqrtBase,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new BigNumber(y, b)).c;\r\n\r\n // Either NaN, ±Infinity or ±0?\r\n if (!xc || !yc || !xc[0] || !yc[0]) {\r\n\r\n // Return NaN if either is NaN, or one is 0 and the other is Infinity.\r\n if (!x.s || !y.s || xc && !xc[0] && !yc || yc && !yc[0] && !xc) {\r\n y.c = y.e = y.s = null;\r\n } else {\r\n y.s *= x.s;\r\n\r\n // Return ±Infinity if either is ±Infinity.\r\n if (!xc || !yc) {\r\n y.c = y.e = null;\r\n\r\n // Return ±0 if either is ±0.\r\n } else {\r\n y.c = [0];\r\n y.e = 0;\r\n }\r\n }\r\n\r\n return y;\r\n }\r\n\r\n e = bitFloor(x.e / LOG_BASE) + bitFloor(y.e / LOG_BASE);\r\n y.s *= x.s;\r\n xcL = xc.length;\r\n ycL = yc.length;\r\n\r\n // Ensure xc points to longer array and xcL to its length.\r\n if (xcL < ycL) zc = xc, xc = yc, yc = zc, i = xcL, xcL = ycL, ycL = i;\r\n\r\n // Initialise the result array with zeros.\r\n for (i = xcL + ycL, zc = []; i--; zc.push(0));\r\n\r\n base = BASE;\r\n sqrtBase = SQRT_BASE;\r\n\r\n for (i = ycL; --i >= 0;) {\r\n c = 0;\r\n ylo = yc[i] % sqrtBase;\r\n yhi = yc[i] / sqrtBase | 0;\r\n\r\n for (k = xcL, j = i + k; j > i;) {\r\n xlo = xc[--k] % sqrtBase;\r\n xhi = xc[k] / sqrtBase | 0;\r\n m = yhi * xlo + xhi * ylo;\r\n xlo = ylo * xlo + ((m % sqrtBase) * sqrtBase) + zc[j] + c;\r\n c = (xlo / base | 0) + (m / sqrtBase | 0) + yhi * xhi;\r\n zc[j--] = xlo % base;\r\n }\r\n\r\n zc[j] = c;\r\n }\r\n\r\n if (c) {\r\n ++e;\r\n } else {\r\n zc.splice(0, 1);\r\n }\r\n\r\n return normalise(y, zc, e);\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber negated,\r\n * i.e. multiplied by -1.\r\n */\r\n P.negated = function () {\r\n var x = new BigNumber(this);\r\n x.s = -x.s || null;\r\n return x;\r\n };\r\n\r\n\r\n /*\r\n * n + 0 = n\r\n * n + N = N\r\n * n + I = I\r\n * 0 + n = n\r\n * 0 + 0 = 0\r\n * 0 + N = N\r\n * 0 + I = I\r\n * N + n = N\r\n * N + 0 = N\r\n * N + N = N\r\n * N + I = N\r\n * I + n = I\r\n * I + 0 = I\r\n * I + N = N\r\n * I + I = I\r\n *\r\n * Return a new BigNumber whose value is the value of this BigNumber plus the value of\r\n * BigNumber(y, b).\r\n */\r\n P.plus = function (y, b) {\r\n var t,\r\n x = this,\r\n a = x.s;\r\n\r\n y = new BigNumber(y, b);\r\n b = y.s;\r\n\r\n // Either NaN?\r\n if (!a || !b) return new BigNumber(NaN);\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e / LOG_BASE,\r\n ye = y.e / LOG_BASE,\r\n xc = x.c,\r\n yc = y.c;\r\n\r\n if (!xe || !ye) {\r\n\r\n // Return ±Infinity if either ±Infinity.\r\n if (!xc || !yc) return new BigNumber(a / 0);\r\n\r\n // Either zero?\r\n // Return y if y is non-zero, x if x is non-zero, or zero if both are zero.\r\n if (!xc[0] || !yc[0]) return yc[0] ? y : new BigNumber(xc[0] ? x : a * 0);\r\n }\r\n\r\n xe = bitFloor(xe);\r\n ye = bitFloor(ye);\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents. Faster to use reverse then do unshifts.\r\n if (a = xe - ye) {\r\n if (a > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n a = -a;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; a--; t.push(0));\r\n t.reverse();\r\n }\r\n\r\n a = xc.length;\r\n b = yc.length;\r\n\r\n // Point xc to the longer array, and b to the shorter length.\r\n if (a - b < 0) t = yc, yc = xc, xc = t, b = a;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be ignored.\r\n for (a = 0; b;) {\r\n a = (xc[--b] = xc[b] + yc[b] + a) / BASE | 0;\r\n xc[b] = BASE === xc[b] ? 0 : xc[b] % BASE;\r\n }\r\n\r\n if (a) {\r\n xc = [a].concat(xc);\r\n ++ye;\r\n }\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n // ye = MAX_EXP + 1 possible\r\n return normalise(y, xc, ye);\r\n };\r\n\r\n\r\n /*\r\n * If sd is undefined or null or true or false, return the number of significant digits of\r\n * the value of this BigNumber, or null if the value of this BigNumber is ±Infinity or NaN.\r\n * If sd is true include integer-part trailing zeros in the count.\r\n *\r\n * Otherwise, if sd is a number, return a new BigNumber whose value is the value of this\r\n * BigNumber rounded to a maximum of sd significant digits using rounding mode rm, or\r\n * ROUNDING_MODE if rm is omitted.\r\n *\r\n * sd {number|boolean} number: significant digits: integer, 1 to MAX inclusive.\r\n * boolean: whether to count integer-part trailing zeros: true or false.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.precision = P.sd = function (sd, rm) {\r\n var c, n, v,\r\n x = this;\r\n\r\n if (sd != null && sd !== !!sd) {\r\n intCheck(sd, 1, MAX);\r\n if (rm == null) rm = ROUNDING_MODE;\r\n else intCheck(rm, 0, 8);\r\n\r\n return round(new BigNumber(x), sd, rm);\r\n }\r\n\r\n if (!(c = x.c)) return null;\r\n v = c.length - 1;\r\n n = v * LOG_BASE + 1;\r\n\r\n if (v = c[v]) {\r\n\r\n // Subtract the number of trailing zeros of the last element.\r\n for (; v % 10 == 0; v /= 10, n--);\r\n\r\n // Add the number of digits of the first element.\r\n for (v = c[0]; v >= 10; v /= 10, n++);\r\n }\r\n\r\n if (sd && x.e + 1 > n) n = x.e + 1;\r\n\r\n return n;\r\n };\r\n\r\n\r\n /*\r\n * Return a new BigNumber whose value is the value of this BigNumber shifted by k places\r\n * (powers of 10). Shift to the right if n > 0, and to the left if n < 0.\r\n *\r\n * k {number} Integer, -MAX_SAFE_INTEGER to MAX_SAFE_INTEGER inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {k}'\r\n */\r\n P.shiftedBy = function (k) {\r\n intCheck(k, -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);\r\n return this.times('1e' + k);\r\n };\r\n\r\n\r\n /*\r\n * sqrt(-n) = N\r\n * sqrt(N) = N\r\n * sqrt(-I) = N\r\n * sqrt(I) = I\r\n * sqrt(0) = 0\r\n * sqrt(-0) = -0\r\n *\r\n * Return a new BigNumber whose value is the square root of the value of this BigNumber,\r\n * rounded according to DECIMAL_PLACES and ROUNDING_MODE.\r\n */\r\n P.squareRoot = P.sqrt = function () {\r\n var m, n, r, rep, t,\r\n x = this,\r\n c = x.c,\r\n s = x.s,\r\n e = x.e,\r\n dp = DECIMAL_PLACES + 4,\r\n half = new BigNumber('0.5');\r\n\r\n // Negative/NaN/Infinity/zero?\r\n if (s !== 1 || !c || !c[0]) {\r\n return new BigNumber(!s || s < 0 && (!c || c[0]) ? NaN : c ? x : 1 / 0);\r\n }\r\n\r\n // Initial estimate.\r\n s = Math.sqrt(+valueOf(x));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\r\n if (s == 0 || s == 1 / 0) {\r\n n = coeffToString(c);\r\n if ((n.length + e) % 2 == 0) n += '0';\r\n s = Math.sqrt(+n);\r\n e = bitFloor((e + 1) / 2) - (e < 0 || e % 2);\r\n\r\n if (s == 1 / 0) {\r\n n = '5e' + e;\r\n } else {\r\n n = s.toExponential();\r\n n = n.slice(0, n.indexOf('e') + 1) + e;\r\n }\r\n\r\n r = new BigNumber(n);\r\n } else {\r\n r = new BigNumber(s + '');\r\n }\r\n\r\n // Check for zero.\r\n // r could be zero if MIN_EXP is changed after the this value was created.\r\n // This would cause a division by zero (x/t) and hence Infinity below, which would cause\r\n // coeffToString to throw.\r\n if (r.c[0]) {\r\n e = r.e;\r\n s = e + dp;\r\n if (s < 3) s = 0;\r\n\r\n // Newton-Raphson iteration.\r\n for (; ;) {\r\n t = r;\r\n r = half.times(t.plus(div(x, t, dp, 1)));\r\n\r\n if (coeffToString(t.c).slice(0, s) === (n = coeffToString(r.c)).slice(0, s)) {\r\n\r\n // The exponent of r may here be one less than the final result exponent,\r\n // e.g 0.0009999 (e-4) --> 0.001 (e-3), so adjust s so the rounding digits\r\n // are indexed correctly.\r\n if (r.e < e) --s;\r\n n = n.slice(s - 3, s + 1);\r\n\r\n // The 4th rounding digit may be in error by -1 so if the 4 rounding digits\r\n // are 9999 or 4999 (i.e. approaching a rounding boundary) continue the\r\n // iteration.\r\n if (n == '9999' || !rep && n == '4999') {\r\n\r\n // On the first iteration only, check to see if rounding up gives the\r\n // exact result as the nines may infinitely repeat.\r\n if (!rep) {\r\n round(t, t.e + DECIMAL_PLACES + 2, 0);\r\n\r\n if (t.times(t).eq(x)) {\r\n r = t;\r\n break;\r\n }\r\n }\r\n\r\n dp += 4;\r\n s += 4;\r\n rep = 1;\r\n } else {\r\n\r\n // If rounding digits are null, 0{0,4} or 50{0,3}, check for exact\r\n // result. If not, then there are further digits and m will be truthy.\r\n if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\r\n\r\n // Truncate to the first rounding digit.\r\n round(r, r.e + DECIMAL_PLACES + 2, 1);\r\n m = !r.times(r).eq(x);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return round(r, r.e + DECIMAL_PLACES + 1, ROUNDING_MODE, m);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in exponential notation and\r\n * rounded using ROUNDING_MODE to dp fixed decimal places.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toExponential = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp++;\r\n }\r\n return format(this, dp, rm, 1);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounding\r\n * to dp fixed decimal places using rounding mode rm, or ROUNDING_MODE if rm is omitted.\r\n *\r\n * Note: as with JavaScript's number type, (-0).toFixed(0) is '0',\r\n * but e.g. (-0.00001).toFixed(0) is '-0'.\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n */\r\n P.toFixed = function (dp, rm) {\r\n if (dp != null) {\r\n intCheck(dp, 0, MAX);\r\n dp = dp + this.e + 1;\r\n }\r\n return format(this, dp, rm);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in fixed-point notation rounded\r\n * using rm or ROUNDING_MODE to dp decimal places, and formatted according to the properties\r\n * of the format or FORMAT object (see BigNumber.set).\r\n *\r\n * The formatting object may contain some or all of the properties shown below.\r\n *\r\n * FORMAT = {\r\n * prefix: '',\r\n * groupSize: 3,\r\n * secondaryGroupSize: 0,\r\n * groupSeparator: ',',\r\n * decimalSeparator: '.',\r\n * fractionGroupSize: 0,\r\n * fractionGroupSeparator: '\\xA0', // non-breaking space\r\n * suffix: ''\r\n * };\r\n *\r\n * [dp] {number} Decimal places. Integer, 0 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n * [format] {object} Formatting options. See FORMAT pbject above.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {dp|rm}'\r\n * '[BigNumber Error] Argument not an object: {format}'\r\n */\r\n P.toFormat = function (dp, rm, format) {\r\n var str,\r\n x = this;\r\n\r\n if (format == null) {\r\n if (dp != null && rm && typeof rm == 'object') {\r\n format = rm;\r\n rm = null;\r\n } else if (dp && typeof dp == 'object') {\r\n format = dp;\r\n dp = rm = null;\r\n } else {\r\n format = FORMAT;\r\n }\r\n } else if (typeof format != 'object') {\r\n throw Error\r\n (bignumberError + 'Argument not an object: ' + format);\r\n }\r\n\r\n str = x.toFixed(dp, rm);\r\n\r\n if (x.c) {\r\n var i,\r\n arr = str.split('.'),\r\n g1 = +format.groupSize,\r\n g2 = +format.secondaryGroupSize,\r\n groupSeparator = format.groupSeparator || '',\r\n intPart = arr[0],\r\n fractionPart = arr[1],\r\n isNeg = x.s < 0,\r\n intDigits = isNeg ? intPart.slice(1) : intPart,\r\n len = intDigits.length;\r\n\r\n if (g2) i = g1, g1 = g2, g2 = i, len -= i;\r\n\r\n if (g1 > 0 && len > 0) {\r\n i = len % g1 || g1;\r\n intPart = intDigits.substr(0, i);\r\n for (; i < len; i += g1) intPart += groupSeparator + intDigits.substr(i, g1);\r\n if (g2 > 0) intPart += groupSeparator + intDigits.slice(i);\r\n if (isNeg) intPart = '-' + intPart;\r\n }\r\n\r\n str = fractionPart\r\n ? intPart + (format.decimalSeparator || '') + ((g2 = +format.fractionGroupSize)\r\n ? fractionPart.replace(new RegExp('\\\\d{' + g2 + '}\\\\B', 'g'),\r\n '$&' + (format.fractionGroupSeparator || ''))\r\n : fractionPart)\r\n : intPart;\r\n }\r\n\r\n return (format.prefix || '') + str + (format.suffix || '');\r\n };\r\n\r\n\r\n /*\r\n * Return an array of two BigNumbers representing the value of this BigNumber as a simple\r\n * fraction with an integer numerator and an integer denominator.\r\n * The denominator will be a positive non-zero value less than or equal to the specified\r\n * maximum denominator. If a maximum denominator is not specified, the denominator will be\r\n * the lowest value necessary to represent the number exactly.\r\n *\r\n * [md] {number|string|BigNumber} Integer >= 1, or Infinity. The maximum denominator.\r\n *\r\n * '[BigNumber Error] Argument {not an integer|out of range} : {md}'\r\n */\r\n P.toFraction = function (md) {\r\n var d, d0, d1, d2, e, exp, n, n0, n1, q, r, s,\r\n x = this,\r\n xc = x.c;\r\n\r\n if (md != null) {\r\n n = new BigNumber(md);\r\n\r\n // Throw if md is less than one or is not an integer, unless it is Infinity.\r\n if (!n.isInteger() && (n.c || n.s !== 1) || n.lt(ONE)) {\r\n throw Error\r\n (bignumberError + 'Argument ' +\r\n (n.isInteger() ? 'out of range: ' : 'not an integer: ') + valueOf(n));\r\n }\r\n }\r\n\r\n if (!xc) return new BigNumber(x);\r\n\r\n d = new BigNumber(ONE);\r\n n1 = d0 = new BigNumber(ONE);\r\n d1 = n0 = new BigNumber(ONE);\r\n s = coeffToString(xc);\r\n\r\n // Determine initial denominator.\r\n // d is a power of 10 and the minimum max denominator that specifies the value exactly.\r\n e = d.e = s.length - x.e - 1;\r\n d.c[0] = POWS_TEN[(exp = e % LOG_BASE) < 0 ? LOG_BASE + exp : exp];\r\n md = !md || n.comparedTo(d) > 0 ? (e > 0 ? d : n1) : n;\r\n\r\n exp = MAX_EXP;\r\n MAX_EXP = 1 / 0;\r\n n = new BigNumber(s);\r\n\r\n // n0 = d1 = 0\r\n n0.c[0] = 0;\r\n\r\n for (; ;) {\r\n q = div(n, d, 0, 1);\r\n d2 = d0.plus(q.times(d1));\r\n if (d2.comparedTo(md) == 1) break;\r\n d0 = d1;\r\n d1 = d2;\r\n n1 = n0.plus(q.times(d2 = n1));\r\n n0 = d2;\r\n d = n.minus(q.times(d2 = d));\r\n n = d2;\r\n }\r\n\r\n d2 = div(md.minus(d0), d1, 0, 1);\r\n n0 = n0.plus(d2.times(n1));\r\n d0 = d0.plus(d2.times(d1));\r\n n0.s = n1.s = x.s;\r\n e = e * 2;\r\n\r\n // Determine which fraction is closer to x, n0/d0 or n1/d1\r\n r = div(n1, d1, e, ROUNDING_MODE).minus(x).abs().comparedTo(\r\n div(n0, d0, e, ROUNDING_MODE).minus(x).abs()) < 1 ? [n1, d1] : [n0, d0];\r\n\r\n MAX_EXP = exp;\r\n\r\n return r;\r\n };\r\n\r\n\r\n /*\r\n * Return the value of this BigNumber converted to a number primitive.\r\n */\r\n P.toNumber = function () {\r\n return +valueOf(this);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber rounded to sd significant digits\r\n * using rounding mode rm or ROUNDING_MODE. If sd is less than the number of digits\r\n * necessary to represent the integer part of the value in fixed-point notation, then use\r\n * exponential notation.\r\n *\r\n * [sd] {number} Significant digits. Integer, 1 to MAX inclusive.\r\n * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\r\n *\r\n * '[BigNumber Error] Argument {not a primitive number|not an integer|out of range}: {sd|rm}'\r\n */\r\n P.toPrecision = function (sd, rm) {\r\n if (sd != null) intCheck(sd, 1, MAX);\r\n return format(this, sd, rm, 2);\r\n };\r\n\r\n\r\n /*\r\n * Return a string representing the value of this BigNumber in base b, or base 10 if b is\r\n * omitted. If a base is specified, including base 10, round according to DECIMAL_PLACES and\r\n * ROUNDING_MODE. If a base is not specified, and this BigNumber has a positive exponent\r\n * that is equal to or greater than TO_EXP_POS, or a negative exponent equal to or less than\r\n * TO_EXP_NEG, return exponential notation.\r\n *\r\n * [b] {number} Integer, 2 to ALPHABET.length inclusive.\r\n *\r\n * '[BigNumber Error] Base {not a primitive number|not an integer|out of range}: {b}'\r\n */\r\n P.toString = function (b) {\r\n var str,\r\n n = this,\r\n s = n.s,\r\n e = n.e;\r\n\r\n // Infinity or NaN?\r\n if (e === null) {\r\n if (s) {\r\n str = 'Infinity';\r\n if (s < 0) str = '-' + str;\r\n } else {\r\n str = 'NaN';\r\n }\r\n } else {\r\n if (b == null) {\r\n str = e <= TO_EXP_NEG || e >= TO_EXP_POS\r\n ? toExponential(coeffToString(n.c), e)\r\n : toFixedPoint(coeffToString(n.c), e, '0');\r\n } else if (b === 10) {\r\n n = round(new BigNumber(n), DECIMAL_PLACES + e + 1, ROUNDING_MODE);\r\n str = toFixedPoint(coeffToString(n.c), n.e, '0');\r\n } else {\r\n intCheck(b, 2, ALPHABET.length, 'Base');\r\n str = convertBase(toFixedPoint(coeffToString(n.c), e, '0'), 10, b, s, true);\r\n }\r\n\r\n if (s < 0 && n.c[0]) str = '-' + str;\r\n }\r\n\r\n return str;\r\n };\r\n\r\n\r\n /*\r\n * Return as toString, but do not accept a base argument, and include the minus sign for\r\n * negative zero.\r\n */\r\n P.valueOf = P.toJSON = function () {\r\n return valueOf(this);\r\n };\r\n\r\n\r\n P._isBigNumber = true;\r\n\r\n if (configObject != null) BigNumber.set(configObject);\r\n\r\n return BigNumber;\r\n }\r\n\r\n\r\n // PRIVATE HELPER FUNCTIONS\r\n\r\n // These functions don't need access to variables,\r\n // e.g. DECIMAL_PLACES, in the scope of the `clone` function above.\r\n\r\n\r\n function bitFloor(n) {\r\n var i = n | 0;\r\n return n > 0 || n === i ? i : i - 1;\r\n }\r\n\r\n\r\n // Return a coefficient array as a string of base 10 digits.\r\n function coeffToString(a) {\r\n var s, z,\r\n i = 1,\r\n j = a.length,\r\n r = a[0] + '';\r\n\r\n for (; i < j;) {\r\n s = a[i++] + '';\r\n z = LOG_BASE - s.length;\r\n for (; z--; s = '0' + s);\r\n r += s;\r\n }\r\n\r\n // Determine trailing zeros.\r\n for (j = r.length; r.charCodeAt(--j) === 48;);\r\n\r\n return r.slice(0, j + 1 || 1);\r\n }\r\n\r\n\r\n // Compare the value of BigNumbers x and y.\r\n function compare(x, y) {\r\n var a, b,\r\n xc = x.c,\r\n yc = y.c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either NaN?\r\n if (!i || !j) return null;\r\n\r\n a = xc && !xc[0];\r\n b = yc && !yc[0];\r\n\r\n // Either zero?\r\n if (a || b) return a ? b ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n a = i < 0;\r\n b = k == l;\r\n\r\n // Either Infinity?\r\n if (!xc || !yc) return b ? 0 : !xc ^ a ? 1 : -1;\r\n\r\n // Compare exponents.\r\n if (!b) return k > l ^ a ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = 0; i < j; i++) if (xc[i] != yc[i]) return xc[i] > yc[i] ^ a ? 1 : -1;\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ a ? 1 : -1;\r\n }\r\n\r\n\r\n /*\r\n * Check that n is a primitive number, an integer, and in range, otherwise throw.\r\n */\r\n function intCheck(n, min, max, name) {\r\n if (n < min || n > max || n !== mathfloor(n)) {\r\n throw Error\r\n (bignumberError + (name || 'Argument') + (typeof n == 'number'\r\n ? n < min || n > max ? ' out of range: ' : ' not an integer: '\r\n : ' not a primitive number: ') + String(n));\r\n }\r\n }\r\n\r\n\r\n // Assumes finite n.\r\n function isOdd(n) {\r\n var k = n.c.length - 1;\r\n return bitFloor(n.e / LOG_BASE) == k && n.c[k] % 2 != 0;\r\n }\r\n\r\n\r\n function toExponential(str, e) {\r\n return (str.length > 1 ? str.charAt(0) + '.' + str.slice(1) : str) +\r\n (e < 0 ? 'e' : 'e+') + e;\r\n }\r\n\r\n\r\n function toFixedPoint(str, e, z) {\r\n var len, zs;\r\n\r\n // Negative exponent?\r\n if (e < 0) {\r\n\r\n // Prepend zeros.\r\n for (zs = z + '.'; ++e; zs += z);\r\n str = zs + str;\r\n\r\n // Positive exponent\r\n } else {\r\n len = str.length;\r\n\r\n // Append zeros.\r\n if (++e > len) {\r\n for (zs = z, e -= len; --e; zs += z);\r\n str += zs;\r\n } else if (e < len) {\r\n str = str.slice(0, e) + '.' + str.slice(e);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n\r\n // EXPORT\r\n\r\n\r\n BigNumber = clone();\r\n BigNumber['default'] = BigNumber.BigNumber = BigNumber;\r\n\r\n // AMD.\r\n if (typeof define == 'function' && define.amd) {\r\n define(function () { return BigNumber; });\r\n\r\n // Node.js and other environments that support module.exports.\r\n } else if (typeof module != 'undefined' && module.exports) {\r\n module.exports = BigNumber;\r\n\r\n // Browser.\r\n } else {\r\n if (!globalObject) {\r\n globalObject = typeof self != 'undefined' && self ? self : window;\r\n }\r\n\r\n globalObject.BigNumber = BigNumber;\r\n }\r\n})(this);\r\n","'use strict'\n\nconst { Buffer } = require('buffer')\nconst symbol = Symbol.for('BufferList')\n\nfunction BufferList (buf) {\n if (!(this instanceof BufferList)) {\n return new BufferList(buf)\n }\n\n BufferList._init.call(this, buf)\n}\n\nBufferList._init = function _init (buf) {\n Object.defineProperty(this, symbol, { value: true })\n\n this._bufs = []\n this.length = 0\n\n if (buf) {\n this.append(buf)\n }\n}\n\nBufferList.prototype._new = function _new (buf) {\n return new BufferList(buf)\n}\n\nBufferList.prototype._offset = function _offset (offset) {\n if (offset === 0) {\n return [0, 0]\n }\n\n let tot = 0\n\n for (let i = 0; i < this._bufs.length; i++) {\n const _t = tot + this._bufs[i].length\n if (offset < _t || i === this._bufs.length - 1) {\n return [i, offset - tot]\n }\n tot = _t\n }\n}\n\nBufferList.prototype._reverseOffset = function (blOffset) {\n const bufferId = blOffset[0]\n let offset = blOffset[1]\n\n for (let i = 0; i < bufferId; i++) {\n offset += this._bufs[i].length\n }\n\n return offset\n}\n\nBufferList.prototype.get = function get (index) {\n if (index > this.length || index < 0) {\n return undefined\n }\n\n const offset = this._offset(index)\n\n return this._bufs[offset[0]][offset[1]]\n}\n\nBufferList.prototype.slice = function slice (start, end) {\n if (typeof start === 'number' && start < 0) {\n start += this.length\n }\n\n if (typeof end === 'number' && end < 0) {\n end += this.length\n }\n\n return this.copy(null, 0, start, end)\n}\n\nBufferList.prototype.copy = function copy (dst, dstStart, srcStart, srcEnd) {\n if (typeof srcStart !== 'number' || srcStart < 0) {\n srcStart = 0\n }\n\n if (typeof srcEnd !== 'number' || srcEnd > this.length) {\n srcEnd = this.length\n }\n\n if (srcStart >= this.length) {\n return dst || Buffer.alloc(0)\n }\n\n if (srcEnd <= 0) {\n return dst || Buffer.alloc(0)\n }\n\n const copy = !!dst\n const off = this._offset(srcStart)\n const len = srcEnd - srcStart\n let bytes = len\n let bufoff = (copy && dstStart) || 0\n let start = off[1]\n\n // copy/slice everything\n if (srcStart === 0 && srcEnd === this.length) {\n if (!copy) {\n // slice, but full concat if multiple buffers\n return this._bufs.length === 1\n ? this._bufs[0]\n : Buffer.concat(this._bufs, this.length)\n }\n\n // copy, need to copy individual buffers\n for (let i = 0; i < this._bufs.length; i++) {\n this._bufs[i].copy(dst, bufoff)\n bufoff += this._bufs[i].length\n }\n\n return dst\n }\n\n // easy, cheap case where it's a subset of one of the buffers\n if (bytes <= this._bufs[off[0]].length - start) {\n return copy\n ? this._bufs[off[0]].copy(dst, dstStart, start, start + bytes)\n : this._bufs[off[0]].slice(start, start + bytes)\n }\n\n if (!copy) {\n // a slice, we need something to copy in to\n dst = Buffer.allocUnsafe(len)\n }\n\n for (let i = off[0]; i < this._bufs.length; i++) {\n const l = this._bufs[i].length - start\n\n if (bytes > l) {\n this._bufs[i].copy(dst, bufoff, start)\n bufoff += l\n } else {\n this._bufs[i].copy(dst, bufoff, start, start + bytes)\n bufoff += l\n break\n }\n\n bytes -= l\n\n if (start) {\n start = 0\n }\n }\n\n // safeguard so that we don't return uninitialized memory\n if (dst.length > bufoff) return dst.slice(0, bufoff)\n\n return dst\n}\n\nBufferList.prototype.shallowSlice = function shallowSlice (start, end) {\n start = start || 0\n end = typeof end !== 'number' ? this.length : end\n\n if (start < 0) {\n start += this.length\n }\n\n if (end < 0) {\n end += this.length\n }\n\n if (start === end) {\n return this._new()\n }\n\n const startOffset = this._offset(start)\n const endOffset = this._offset(end)\n const buffers = this._bufs.slice(startOffset[0], endOffset[0] + 1)\n\n if (endOffset[1] === 0) {\n buffers.pop()\n } else {\n buffers[buffers.length - 1] = buffers[buffers.length - 1].slice(0, endOffset[1])\n }\n\n if (startOffset[1] !== 0) {\n buffers[0] = buffers[0].slice(startOffset[1])\n }\n\n return this._new(buffers)\n}\n\nBufferList.prototype.toString = function toString (encoding, start, end) {\n return this.slice(start, end).toString(encoding)\n}\n\nBufferList.prototype.consume = function consume (bytes) {\n // first, normalize the argument, in accordance with how Buffer does it\n bytes = Math.trunc(bytes)\n // do nothing if not a positive number\n if (Number.isNaN(bytes) || bytes <= 0) return this\n\n while (this._bufs.length) {\n if (bytes >= this._bufs[0].length) {\n bytes -= this._bufs[0].length\n this.length -= this._bufs[0].length\n this._bufs.shift()\n } else {\n this._bufs[0] = this._bufs[0].slice(bytes)\n this.length -= bytes\n break\n }\n }\n\n return this\n}\n\nBufferList.prototype.duplicate = function duplicate () {\n const copy = this._new()\n\n for (let i = 0; i < this._bufs.length; i++) {\n copy.append(this._bufs[i])\n }\n\n return copy\n}\n\nBufferList.prototype.append = function append (buf) {\n if (buf == null) {\n return this\n }\n\n if (buf.buffer) {\n // append a view of the underlying ArrayBuffer\n this._appendBuffer(Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength))\n } else if (Array.isArray(buf)) {\n for (let i = 0; i < buf.length; i++) {\n this.append(buf[i])\n }\n } else if (this._isBufferList(buf)) {\n // unwrap argument into individual BufferLists\n for (let i = 0; i < buf._bufs.length; i++) {\n this.append(buf._bufs[i])\n }\n } else {\n // coerce number arguments to strings, since Buffer(number) does\n // uninitialized memory allocation\n if (typeof buf === 'number') {\n buf = buf.toString()\n }\n\n this._appendBuffer(Buffer.from(buf))\n }\n\n return this\n}\n\nBufferList.prototype._appendBuffer = function appendBuffer (buf) {\n this._bufs.push(buf)\n this.length += buf.length\n}\n\nBufferList.prototype.indexOf = function (search, offset, encoding) {\n if (encoding === undefined && typeof offset === 'string') {\n encoding = offset\n offset = undefined\n }\n\n if (typeof search === 'function' || Array.isArray(search)) {\n throw new TypeError('The \"value\" argument must be one of type string, Buffer, BufferList, or Uint8Array.')\n } else if (typeof search === 'number') {\n search = Buffer.from([search])\n } else if (typeof search === 'string') {\n search = Buffer.from(search, encoding)\n } else if (this._isBufferList(search)) {\n search = search.slice()\n } else if (Array.isArray(search.buffer)) {\n search = Buffer.from(search.buffer, search.byteOffset, search.byteLength)\n } else if (!Buffer.isBuffer(search)) {\n search = Buffer.from(search)\n }\n\n offset = Number(offset || 0)\n\n if (isNaN(offset)) {\n offset = 0\n }\n\n if (offset < 0) {\n offset = this.length + offset\n }\n\n if (offset < 0) {\n offset = 0\n }\n\n if (search.length === 0) {\n return offset > this.length ? this.length : offset\n }\n\n const blOffset = this._offset(offset)\n let blIndex = blOffset[0] // index of which internal buffer we're working on\n let buffOffset = blOffset[1] // offset of the internal buffer we're working on\n\n // scan over each buffer\n for (; blIndex < this._bufs.length; blIndex++) {\n const buff = this._bufs[blIndex]\n\n while (buffOffset < buff.length) {\n const availableWindow = buff.length - buffOffset\n\n if (availableWindow >= search.length) {\n const nativeSearchResult = buff.indexOf(search, buffOffset)\n\n if (nativeSearchResult !== -1) {\n return this._reverseOffset([blIndex, nativeSearchResult])\n }\n\n buffOffset = buff.length - search.length + 1 // end of native search window\n } else {\n const revOffset = this._reverseOffset([blIndex, buffOffset])\n\n if (this._match(revOffset, search)) {\n return revOffset\n }\n\n buffOffset++\n }\n }\n\n buffOffset = 0\n }\n\n return -1\n}\n\nBufferList.prototype._match = function (offset, search) {\n if (this.length - offset < search.length) {\n return false\n }\n\n for (let searchOffset = 0; searchOffset < search.length; searchOffset++) {\n if (this.get(offset + searchOffset) !== search[searchOffset]) {\n return false\n }\n }\n return true\n}\n\n;(function () {\n const methods = {\n readDoubleBE: 8,\n readDoubleLE: 8,\n readFloatBE: 4,\n readFloatLE: 4,\n readInt32BE: 4,\n readInt32LE: 4,\n readUInt32BE: 4,\n readUInt32LE: 4,\n readInt16BE: 2,\n readInt16LE: 2,\n readUInt16BE: 2,\n readUInt16LE: 2,\n readInt8: 1,\n readUInt8: 1,\n readIntBE: null,\n readIntLE: null,\n readUIntBE: null,\n readUIntLE: null\n }\n\n for (const m in methods) {\n (function (m) {\n if (methods[m] === null) {\n BufferList.prototype[m] = function (offset, byteLength) {\n return this.slice(offset, offset + byteLength)[m](0, byteLength)\n }\n } else {\n BufferList.prototype[m] = function (offset = 0) {\n return this.slice(offset, offset + methods[m])[m](0)\n }\n }\n }(m))\n }\n}())\n\n// Used internally by the class and also as an indicator of this object being\n// a `BufferList`. It's not possible to use `instanceof BufferList` in a browser\n// environment because there could be multiple different copies of the\n// BufferList class and some `BufferList`s might be `BufferList`s.\nBufferList.prototype._isBufferList = function _isBufferList (b) {\n return b instanceof BufferList || BufferList.isBufferList(b)\n}\n\nBufferList.isBufferList = function isBufferList (b) {\n return b != null && b[symbol]\n}\n\nmodule.exports = BufferList\n","(function (module, exports) {\n 'use strict';\n\n // Utils\n function assert (val, msg) {\n if (!val) throw new Error(msg || 'Assertion failed');\n }\n\n // Could use `inherits` module, but don't want to move from single file\n // architecture yet.\n function inherits (ctor, 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 // BN\n\n function BN (number, base, endian) {\n if (BN.isBN(number)) {\n return number;\n }\n\n this.negative = 0;\n this.words = null;\n this.length = 0;\n\n // Reduction context\n this.red = null;\n\n if (number !== null) {\n if (base === 'le' || base === 'be') {\n endian = base;\n base = 10;\n }\n\n this._init(number || 0, base || 10, endian || 'be');\n }\n }\n if (typeof module === 'object') {\n module.exports = BN;\n } else {\n exports.BN = BN;\n }\n\n BN.BN = BN;\n BN.wordSize = 26;\n\n var Buffer;\n try {\n if (typeof window !== 'undefined' && typeof window.Buffer !== 'undefined') {\n Buffer = window.Buffer;\n } else {\n Buffer = require('buffer').Buffer;\n }\n } catch (e) {\n }\n\n BN.isBN = function isBN (num) {\n if (num instanceof BN) {\n return true;\n }\n\n return num !== null && typeof num === 'object' &&\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n };\n\n BN.max = function max (left, right) {\n if (left.cmp(right) > 0) return left;\n return right;\n };\n\n BN.min = function min (left, right) {\n if (left.cmp(right) < 0) return left;\n return right;\n };\n\n BN.prototype._init = function init (number, base, endian) {\n if (typeof number === 'number') {\n return this._initNumber(number, base, endian);\n }\n\n if (typeof number === 'object') {\n return this._initArray(number, base, endian);\n }\n\n if (base === 'hex') {\n base = 16;\n }\n assert(base === (base | 0) && base >= 2 && base <= 36);\n\n number = number.toString().replace(/\\s+/g, '');\n var start = 0;\n if (number[0] === '-') {\n start++;\n this.negative = 1;\n }\n\n if (start < number.length) {\n if (base === 16) {\n this._parseHex(number, start, endian);\n } else {\n this._parseBase(number, base, start);\n if (endian === 'le') {\n this._initArray(this.toArray(), base, endian);\n }\n }\n }\n };\n\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\n if (number < 0) {\n this.negative = 1;\n number = -number;\n }\n if (number < 0x4000000) {\n this.words = [ number & 0x3ffffff ];\n this.length = 1;\n } else if (number < 0x10000000000000) {\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff\n ];\n this.length = 2;\n } else {\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n this.words = [\n number & 0x3ffffff,\n (number / 0x4000000) & 0x3ffffff,\n 1\n ];\n this.length = 3;\n }\n\n if (endian !== 'le') return;\n\n // Reverse the bytes\n this._initArray(this.toArray(), base, endian);\n };\n\n BN.prototype._initArray = function _initArray (number, base, endian) {\n // Perhaps a Uint8Array\n assert(typeof number.length === 'number');\n if (number.length <= 0) {\n this.words = [ 0 ];\n this.length = 1;\n return this;\n }\n\n this.length = Math.ceil(number.length / 3);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n var j, w;\n var off = 0;\n if (endian === 'be') {\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n } else if (endian === 'le') {\n for (i = 0, j = 0; i < number.length; i += 3) {\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\n this.words[j] |= (w << off) & 0x3ffffff;\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\n off += 24;\n if (off >= 26) {\n off -= 26;\n j++;\n }\n }\n }\n return this.strip();\n };\n\n function parseHex4Bits (string, index) {\n var c = string.charCodeAt(index);\n // 'A' - 'F'\n if (c >= 65 && c <= 70) {\n return c - 55;\n // 'a' - 'f'\n } else if (c >= 97 && c <= 102) {\n return c - 87;\n // '0' - '9'\n } else {\n return (c - 48) & 0xf;\n }\n }\n\n function parseHexByte (string, lowerBound, index) {\n var r = parseHex4Bits(string, index);\n if (index - 1 >= lowerBound) {\n r |= parseHex4Bits(string, index - 1) << 4;\n }\n return r;\n }\n\n BN.prototype._parseHex = function _parseHex (number, start, endian) {\n // Create possibly bigger array to ensure that it fits the number\n this.length = Math.ceil((number.length - start) / 6);\n this.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n this.words[i] = 0;\n }\n\n // 24-bits chunks\n var off = 0;\n var j = 0;\n\n var w;\n if (endian === 'be') {\n for (i = number.length - 1; i >= start; i -= 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n } else {\n var parseLength = number.length - start;\n for (i = parseLength % 2 === 0 ? start + 1 : start; i < number.length; i += 2) {\n w = parseHexByte(number, start, i) << off;\n this.words[j] |= w & 0x3ffffff;\n if (off >= 18) {\n off -= 18;\n j += 1;\n this.words[j] |= w >>> 26;\n } else {\n off += 8;\n }\n }\n }\n\n this.strip();\n };\n\n function parseBase (str, start, end, mul) {\n var r = 0;\n var len = Math.min(str.length, end);\n for (var i = start; i < len; i++) {\n var c = str.charCodeAt(i) - 48;\n\n r *= mul;\n\n // 'a'\n if (c >= 49) {\n r += c - 49 + 0xa;\n\n // 'A'\n } else if (c >= 17) {\n r += c - 17 + 0xa;\n\n // '0' - '9'\n } else {\n r += c;\n }\n }\n return r;\n }\n\n BN.prototype._parseBase = function _parseBase (number, base, start) {\n // Initialize as zero\n this.words = [ 0 ];\n this.length = 1;\n\n // Find length of limb in base\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n limbLen++;\n }\n limbLen--;\n limbPow = (limbPow / base) | 0;\n\n var total = number.length - start;\n var mod = total % limbLen;\n var end = Math.min(total, total - mod) + start;\n\n var word = 0;\n for (var i = start; i < end; i += limbLen) {\n word = parseBase(number, i, i + limbLen, base);\n\n this.imuln(limbPow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n if (mod !== 0) {\n var pow = 1;\n word = parseBase(number, i, number.length, base);\n\n for (i = 0; i < mod; i++) {\n pow *= base;\n }\n\n this.imuln(pow);\n if (this.words[0] + word < 0x4000000) {\n this.words[0] += word;\n } else {\n this._iaddn(word);\n }\n }\n\n this.strip();\n };\n\n BN.prototype.copy = function copy (dest) {\n dest.words = new Array(this.length);\n for (var i = 0; i < this.length; i++) {\n dest.words[i] = this.words[i];\n }\n dest.length = this.length;\n dest.negative = this.negative;\n dest.red = this.red;\n };\n\n BN.prototype.clone = function clone () {\n var r = new BN(null);\n this.copy(r);\n return r;\n };\n\n BN.prototype._expand = function _expand (size) {\n while (this.length < size) {\n this.words[this.length++] = 0;\n }\n return this;\n };\n\n // Remove leading `0` from `this`\n BN.prototype.strip = function strip () {\n while (this.length > 1 && this.words[this.length - 1] === 0) {\n this.length--;\n }\n return this._normSign();\n };\n\n BN.prototype._normSign = function _normSign () {\n // -0 = 0\n if (this.length === 1 && this.words[0] === 0) {\n this.negative = 0;\n }\n return this;\n };\n\n BN.prototype.inspect = function inspect () {\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n };\n\n /*\n\n var zeros = [];\n var groupSizes = [];\n var groupBases = [];\n\n var s = '';\n var i = -1;\n while (++i < BN.wordSize) {\n zeros[i] = s;\n s += '0';\n }\n groupSizes[0] = 0;\n groupSizes[1] = 0;\n groupBases[0] = 0;\n groupBases[1] = 0;\n var base = 2 - 1;\n while (++base < 36 + 1) {\n var groupSize = 0;\n var groupBase = 1;\n while (groupBase < (1 << BN.wordSize) / base) {\n groupBase *= base;\n groupSize += 1;\n }\n groupSizes[base] = groupSize;\n groupBases[base] = groupBase;\n }\n\n */\n\n var zeros = [\n '',\n '0',\n '00',\n '000',\n '0000',\n '00000',\n '000000',\n '0000000',\n '00000000',\n '000000000',\n '0000000000',\n '00000000000',\n '000000000000',\n '0000000000000',\n '00000000000000',\n '000000000000000',\n '0000000000000000',\n '00000000000000000',\n '000000000000000000',\n '0000000000000000000',\n '00000000000000000000',\n '000000000000000000000',\n '0000000000000000000000',\n '00000000000000000000000',\n '000000000000000000000000',\n '0000000000000000000000000'\n ];\n\n var groupSizes = [\n 0, 0,\n 25, 16, 12, 11, 10, 9, 8,\n 8, 7, 7, 7, 7, 6, 6,\n 6, 6, 6, 6, 6, 5, 5,\n 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5\n ];\n\n var groupBases = [\n 0, 0,\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\n ];\n\n BN.prototype.toString = function toString (base, padding) {\n base = base || 10;\n padding = padding | 0 || 1;\n\n var out;\n if (base === 16 || base === 'hex') {\n out = '';\n var off = 0;\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = this.words[i];\n var word = (((w << off) | carry) & 0xffffff).toString(16);\n carry = (w >>> (24 - off)) & 0xffffff;\n if (carry !== 0 || i !== this.length - 1) {\n out = zeros[6 - word.length] + word + out;\n } else {\n out = word + out;\n }\n off += 2;\n if (off >= 26) {\n off -= 26;\n i--;\n }\n }\n if (carry !== 0) {\n out = carry.toString(16) + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n if (base === (base | 0) && base >= 2 && base <= 36) {\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n var groupSize = groupSizes[base];\n // var groupBase = Math.pow(base, groupSize);\n var groupBase = groupBases[base];\n out = '';\n var c = this.clone();\n c.negative = 0;\n while (!c.isZero()) {\n var r = c.modn(groupBase).toString(base);\n c = c.idivn(groupBase);\n\n if (!c.isZero()) {\n out = zeros[groupSize - r.length] + r + out;\n } else {\n out = r + out;\n }\n }\n if (this.isZero()) {\n out = '0' + out;\n }\n while (out.length % padding !== 0) {\n out = '0' + out;\n }\n if (this.negative !== 0) {\n out = '-' + out;\n }\n return out;\n }\n\n assert(false, 'Base should be between 2 and 36');\n };\n\n BN.prototype.toNumber = function toNumber () {\n var ret = this.words[0];\n if (this.length === 2) {\n ret += this.words[1] * 0x4000000;\n } else if (this.length === 3 && this.words[2] === 0x01) {\n // NOTE: at this stage it is known that the top bit is set\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\n } else if (this.length > 2) {\n assert(false, 'Number can only safely store up to 53 bits');\n }\n return (this.negative !== 0) ? -ret : ret;\n };\n\n BN.prototype.toJSON = function toJSON () {\n return this.toString(16);\n };\n\n BN.prototype.toBuffer = function toBuffer (endian, length) {\n assert(typeof Buffer !== 'undefined');\n return this.toArrayLike(Buffer, endian, length);\n };\n\n BN.prototype.toArray = function toArray (endian, length) {\n return this.toArrayLike(Array, endian, length);\n };\n\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\n var byteLength = this.byteLength();\n var reqLength = length || Math.max(1, byteLength);\n assert(byteLength <= reqLength, 'byte array longer than desired length');\n assert(reqLength > 0, 'Requested array length <= 0');\n\n this.strip();\n var littleEndian = endian === 'le';\n var res = new ArrayType(reqLength);\n\n var b, i;\n var q = this.clone();\n if (!littleEndian) {\n // Assume big-endian\n for (i = 0; i < reqLength - byteLength; i++) {\n res[i] = 0;\n }\n\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[reqLength - i - 1] = b;\n }\n } else {\n for (i = 0; !q.isZero(); i++) {\n b = q.andln(0xff);\n q.iushrn(8);\n\n res[i] = b;\n }\n\n for (; i < reqLength; i++) {\n res[i] = 0;\n }\n }\n\n return res;\n };\n\n if (Math.clz32) {\n BN.prototype._countBits = function _countBits (w) {\n return 32 - Math.clz32(w);\n };\n } else {\n BN.prototype._countBits = function _countBits (w) {\n var t = w;\n var r = 0;\n if (t >= 0x1000) {\n r += 13;\n t >>>= 13;\n }\n if (t >= 0x40) {\n r += 7;\n t >>>= 7;\n }\n if (t >= 0x8) {\n r += 4;\n t >>>= 4;\n }\n if (t >= 0x02) {\n r += 2;\n t >>>= 2;\n }\n return r + t;\n };\n }\n\n BN.prototype._zeroBits = function _zeroBits (w) {\n // Short-cut\n if (w === 0) return 26;\n\n var t = w;\n var r = 0;\n if ((t & 0x1fff) === 0) {\n r += 13;\n t >>>= 13;\n }\n if ((t & 0x7f) === 0) {\n r += 7;\n t >>>= 7;\n }\n if ((t & 0xf) === 0) {\n r += 4;\n t >>>= 4;\n }\n if ((t & 0x3) === 0) {\n r += 2;\n t >>>= 2;\n }\n if ((t & 0x1) === 0) {\n r++;\n }\n return r;\n };\n\n // Return number of used bits in a BN\n BN.prototype.bitLength = function bitLength () {\n var w = this.words[this.length - 1];\n var hi = this._countBits(w);\n return (this.length - 1) * 26 + hi;\n };\n\n function toBitArray (num) {\n var w = new Array(num.bitLength());\n\n for (var bit = 0; bit < w.length; bit++) {\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\n }\n\n return w;\n }\n\n // Number of trailing zero bits\n BN.prototype.zeroBits = function zeroBits () {\n if (this.isZero()) return 0;\n\n var r = 0;\n for (var i = 0; i < this.length; i++) {\n var b = this._zeroBits(this.words[i]);\n r += b;\n if (b !== 26) break;\n }\n return r;\n };\n\n BN.prototype.byteLength = function byteLength () {\n return Math.ceil(this.bitLength() / 8);\n };\n\n BN.prototype.toTwos = function toTwos (width) {\n if (this.negative !== 0) {\n return this.abs().inotn(width).iaddn(1);\n }\n return this.clone();\n };\n\n BN.prototype.fromTwos = function fromTwos (width) {\n if (this.testn(width - 1)) {\n return this.notn(width).iaddn(1).ineg();\n }\n return this.clone();\n };\n\n BN.prototype.isNeg = function isNeg () {\n return this.negative !== 0;\n };\n\n // Return negative clone of `this`\n BN.prototype.neg = function neg () {\n return this.clone().ineg();\n };\n\n BN.prototype.ineg = function ineg () {\n if (!this.isZero()) {\n this.negative ^= 1;\n }\n\n return this;\n };\n\n // Or `num` with `this` in-place\n BN.prototype.iuor = function iuor (num) {\n while (this.length < num.length) {\n this.words[this.length++] = 0;\n }\n\n for (var i = 0; i < num.length; i++) {\n this.words[i] = this.words[i] | num.words[i];\n }\n\n return this.strip();\n };\n\n BN.prototype.ior = function ior (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuor(num);\n };\n\n // Or `num` with `this`\n BN.prototype.or = function or (num) {\n if (this.length > num.length) return this.clone().ior(num);\n return num.clone().ior(this);\n };\n\n BN.prototype.uor = function uor (num) {\n if (this.length > num.length) return this.clone().iuor(num);\n return num.clone().iuor(this);\n };\n\n // And `num` with `this` in-place\n BN.prototype.iuand = function iuand (num) {\n // b = min-length(num, this)\n var b;\n if (this.length > num.length) {\n b = num;\n } else {\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = this.words[i] & num.words[i];\n }\n\n this.length = b.length;\n\n return this.strip();\n };\n\n BN.prototype.iand = function iand (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuand(num);\n };\n\n // And `num` with `this`\n BN.prototype.and = function and (num) {\n if (this.length > num.length) return this.clone().iand(num);\n return num.clone().iand(this);\n };\n\n BN.prototype.uand = function uand (num) {\n if (this.length > num.length) return this.clone().iuand(num);\n return num.clone().iuand(this);\n };\n\n // Xor `num` with `this` in-place\n BN.prototype.iuxor = function iuxor (num) {\n // a.length > b.length\n var a;\n var b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n for (var i = 0; i < b.length; i++) {\n this.words[i] = a.words[i] ^ b.words[i];\n }\n\n if (this !== a) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = a.length;\n\n return this.strip();\n };\n\n BN.prototype.ixor = function ixor (num) {\n assert((this.negative | num.negative) === 0);\n return this.iuxor(num);\n };\n\n // Xor `num` with `this`\n BN.prototype.xor = function xor (num) {\n if (this.length > num.length) return this.clone().ixor(num);\n return num.clone().ixor(this);\n };\n\n BN.prototype.uxor = function uxor (num) {\n if (this.length > num.length) return this.clone().iuxor(num);\n return num.clone().iuxor(this);\n };\n\n // Not ``this`` with ``width`` bitwidth\n BN.prototype.inotn = function inotn (width) {\n assert(typeof width === 'number' && width >= 0);\n\n var bytesNeeded = Math.ceil(width / 26) | 0;\n var bitsLeft = width % 26;\n\n // Extend the buffer with leading zeroes\n this._expand(bytesNeeded);\n\n if (bitsLeft > 0) {\n bytesNeeded--;\n }\n\n // Handle complete words\n for (var i = 0; i < bytesNeeded; i++) {\n this.words[i] = ~this.words[i] & 0x3ffffff;\n }\n\n // Handle the residue\n if (bitsLeft > 0) {\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\n }\n\n // And remove leading zeroes\n return this.strip();\n };\n\n BN.prototype.notn = function notn (width) {\n return this.clone().inotn(width);\n };\n\n // Set `bit` of `this`\n BN.prototype.setn = function setn (bit, val) {\n assert(typeof bit === 'number' && bit >= 0);\n\n var off = (bit / 26) | 0;\n var wbit = bit % 26;\n\n this._expand(off + 1);\n\n if (val) {\n this.words[off] = this.words[off] | (1 << wbit);\n } else {\n this.words[off] = this.words[off] & ~(1 << wbit);\n }\n\n return this.strip();\n };\n\n // Add `num` to `this` in-place\n BN.prototype.iadd = function iadd (num) {\n var r;\n\n // negative + positive\n if (this.negative !== 0 && num.negative === 0) {\n this.negative = 0;\n r = this.isub(num);\n this.negative ^= 1;\n return this._normSign();\n\n // positive + negative\n } else if (this.negative === 0 && num.negative !== 0) {\n num.negative = 0;\n r = this.isub(num);\n num.negative = 1;\n return r._normSign();\n }\n\n // a.length > b.length\n var a, b;\n if (this.length > num.length) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n this.words[i] = r & 0x3ffffff;\n carry = r >>> 26;\n }\n\n this.length = a.length;\n if (carry !== 0) {\n this.words[this.length] = carry;\n this.length++;\n // Copy the rest of the words\n } else if (a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n return this;\n };\n\n // Add `num` to `this`\n BN.prototype.add = function add (num) {\n var res;\n if (num.negative !== 0 && this.negative === 0) {\n num.negative = 0;\n res = this.sub(num);\n num.negative ^= 1;\n return res;\n } else if (num.negative === 0 && this.negative !== 0) {\n this.negative = 0;\n res = num.sub(this);\n this.negative = 1;\n return res;\n }\n\n if (this.length > num.length) return this.clone().iadd(num);\n\n return num.clone().iadd(this);\n };\n\n // Subtract `num` from `this` in-place\n BN.prototype.isub = function isub (num) {\n // this - (-num) = this + num\n if (num.negative !== 0) {\n num.negative = 0;\n var r = this.iadd(num);\n num.negative = 1;\n return r._normSign();\n\n // -this - num = -(this + num)\n } else if (this.negative !== 0) {\n this.negative = 0;\n this.iadd(num);\n this.negative = 1;\n return this._normSign();\n }\n\n // At this point both numbers are positive\n var cmp = this.cmp(num);\n\n // Optimization - zeroify\n if (cmp === 0) {\n this.negative = 0;\n this.length = 1;\n this.words[0] = 0;\n return this;\n }\n\n // a > b\n var a, b;\n if (cmp > 0) {\n a = this;\n b = num;\n } else {\n a = num;\n b = this;\n }\n\n var carry = 0;\n for (var i = 0; i < b.length; i++) {\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n for (; carry !== 0 && i < a.length; i++) {\n r = (a.words[i] | 0) + carry;\n carry = r >> 26;\n this.words[i] = r & 0x3ffffff;\n }\n\n // Copy rest of the words\n if (carry === 0 && i < a.length && a !== this) {\n for (; i < a.length; i++) {\n this.words[i] = a.words[i];\n }\n }\n\n this.length = Math.max(this.length, i);\n\n if (a !== this) {\n this.negative = 1;\n }\n\n return this.strip();\n };\n\n // Subtract `num` from `this`\n BN.prototype.sub = function sub (num) {\n return this.clone().isub(num);\n };\n\n function smallMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n var len = (self.length + num.length) | 0;\n out.length = len;\n len = (len - 1) | 0;\n\n // Peel one iteration (compiler can't do it, because of code complexity)\n var a = self.words[0] | 0;\n var b = num.words[0] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n var carry = (r / 0x4000000) | 0;\n out.words[0] = lo;\n\n for (var k = 1; k < len; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = carry >>> 26;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = (k - j) | 0;\n a = self.words[i] | 0;\n b = num.words[j] | 0;\n r = a * b + rword;\n ncarry += (r / 0x4000000) | 0;\n rword = r & 0x3ffffff;\n }\n out.words[k] = rword | 0;\n carry = ncarry | 0;\n }\n if (carry !== 0) {\n out.words[k] = carry | 0;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n // TODO(indutny): it may be reasonable to omit it for users who don't need\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n // multiplication (like elliptic secp256k1).\n var comb10MulTo = function comb10MulTo (self, num, out) {\n var a = self.words;\n var b = num.words;\n var o = out.words;\n var c = 0;\n var lo;\n var mid;\n var hi;\n var a0 = a[0] | 0;\n var al0 = a0 & 0x1fff;\n var ah0 = a0 >>> 13;\n var a1 = a[1] | 0;\n var al1 = a1 & 0x1fff;\n var ah1 = a1 >>> 13;\n var a2 = a[2] | 0;\n var al2 = a2 & 0x1fff;\n var ah2 = a2 >>> 13;\n var a3 = a[3] | 0;\n var al3 = a3 & 0x1fff;\n var ah3 = a3 >>> 13;\n var a4 = a[4] | 0;\n var al4 = a4 & 0x1fff;\n var ah4 = a4 >>> 13;\n var a5 = a[5] | 0;\n var al5 = a5 & 0x1fff;\n var ah5 = a5 >>> 13;\n var a6 = a[6] | 0;\n var al6 = a6 & 0x1fff;\n var ah6 = a6 >>> 13;\n var a7 = a[7] | 0;\n var al7 = a7 & 0x1fff;\n var ah7 = a7 >>> 13;\n var a8 = a[8] | 0;\n var al8 = a8 & 0x1fff;\n var ah8 = a8 >>> 13;\n var a9 = a[9] | 0;\n var al9 = a9 & 0x1fff;\n var ah9 = a9 >>> 13;\n var b0 = b[0] | 0;\n var bl0 = b0 & 0x1fff;\n var bh0 = b0 >>> 13;\n var b1 = b[1] | 0;\n var bl1 = b1 & 0x1fff;\n var bh1 = b1 >>> 13;\n var b2 = b[2] | 0;\n var bl2 = b2 & 0x1fff;\n var bh2 = b2 >>> 13;\n var b3 = b[3] | 0;\n var bl3 = b3 & 0x1fff;\n var bh3 = b3 >>> 13;\n var b4 = b[4] | 0;\n var bl4 = b4 & 0x1fff;\n var bh4 = b4 >>> 13;\n var b5 = b[5] | 0;\n var bl5 = b5 & 0x1fff;\n var bh5 = b5 >>> 13;\n var b6 = b[6] | 0;\n var bl6 = b6 & 0x1fff;\n var bh6 = b6 >>> 13;\n var b7 = b[7] | 0;\n var bl7 = b7 & 0x1fff;\n var bh7 = b7 >>> 13;\n var b8 = b[8] | 0;\n var bl8 = b8 & 0x1fff;\n var bh8 = b8 >>> 13;\n var b9 = b[9] | 0;\n var bl9 = b9 & 0x1fff;\n var bh9 = b9 >>> 13;\n\n out.negative = self.negative ^ num.negative;\n out.length = 19;\n /* k = 0 */\n lo = Math.imul(al0, bl0);\n mid = Math.imul(al0, bh0);\n mid = (mid + Math.imul(ah0, bl0)) | 0;\n hi = Math.imul(ah0, bh0);\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\n w0 &= 0x3ffffff;\n /* k = 1 */\n lo = Math.imul(al1, bl0);\n mid = Math.imul(al1, bh0);\n mid = (mid + Math.imul(ah1, bl0)) | 0;\n hi = Math.imul(ah1, bh0);\n lo = (lo + Math.imul(al0, bl1)) | 0;\n mid = (mid + Math.imul(al0, bh1)) | 0;\n mid = (mid + Math.imul(ah0, bl1)) | 0;\n hi = (hi + Math.imul(ah0, bh1)) | 0;\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\n w1 &= 0x3ffffff;\n /* k = 2 */\n lo = Math.imul(al2, bl0);\n mid = Math.imul(al2, bh0);\n mid = (mid + Math.imul(ah2, bl0)) | 0;\n hi = Math.imul(ah2, bh0);\n lo = (lo + Math.imul(al1, bl1)) | 0;\n mid = (mid + Math.imul(al1, bh1)) | 0;\n mid = (mid + Math.imul(ah1, bl1)) | 0;\n hi = (hi + Math.imul(ah1, bh1)) | 0;\n lo = (lo + Math.imul(al0, bl2)) | 0;\n mid = (mid + Math.imul(al0, bh2)) | 0;\n mid = (mid + Math.imul(ah0, bl2)) | 0;\n hi = (hi + Math.imul(ah0, bh2)) | 0;\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\n w2 &= 0x3ffffff;\n /* k = 3 */\n lo = Math.imul(al3, bl0);\n mid = Math.imul(al3, bh0);\n mid = (mid + Math.imul(ah3, bl0)) | 0;\n hi = Math.imul(ah3, bh0);\n lo = (lo + Math.imul(al2, bl1)) | 0;\n mid = (mid + Math.imul(al2, bh1)) | 0;\n mid = (mid + Math.imul(ah2, bl1)) | 0;\n hi = (hi + Math.imul(ah2, bh1)) | 0;\n lo = (lo + Math.imul(al1, bl2)) | 0;\n mid = (mid + Math.imul(al1, bh2)) | 0;\n mid = (mid + Math.imul(ah1, bl2)) | 0;\n hi = (hi + Math.imul(ah1, bh2)) | 0;\n lo = (lo + Math.imul(al0, bl3)) | 0;\n mid = (mid + Math.imul(al0, bh3)) | 0;\n mid = (mid + Math.imul(ah0, bl3)) | 0;\n hi = (hi + Math.imul(ah0, bh3)) | 0;\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\n w3 &= 0x3ffffff;\n /* k = 4 */\n lo = Math.imul(al4, bl0);\n mid = Math.imul(al4, bh0);\n mid = (mid + Math.imul(ah4, bl0)) | 0;\n hi = Math.imul(ah4, bh0);\n lo = (lo + Math.imul(al3, bl1)) | 0;\n mid = (mid + Math.imul(al3, bh1)) | 0;\n mid = (mid + Math.imul(ah3, bl1)) | 0;\n hi = (hi + Math.imul(ah3, bh1)) | 0;\n lo = (lo + Math.imul(al2, bl2)) | 0;\n mid = (mid + Math.imul(al2, bh2)) | 0;\n mid = (mid + Math.imul(ah2, bl2)) | 0;\n hi = (hi + Math.imul(ah2, bh2)) | 0;\n lo = (lo + Math.imul(al1, bl3)) | 0;\n mid = (mid + Math.imul(al1, bh3)) | 0;\n mid = (mid + Math.imul(ah1, bl3)) | 0;\n hi = (hi + Math.imul(ah1, bh3)) | 0;\n lo = (lo + Math.imul(al0, bl4)) | 0;\n mid = (mid + Math.imul(al0, bh4)) | 0;\n mid = (mid + Math.imul(ah0, bl4)) | 0;\n hi = (hi + Math.imul(ah0, bh4)) | 0;\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\n w4 &= 0x3ffffff;\n /* k = 5 */\n lo = Math.imul(al5, bl0);\n mid = Math.imul(al5, bh0);\n mid = (mid + Math.imul(ah5, bl0)) | 0;\n hi = Math.imul(ah5, bh0);\n lo = (lo + Math.imul(al4, bl1)) | 0;\n mid = (mid + Math.imul(al4, bh1)) | 0;\n mid = (mid + Math.imul(ah4, bl1)) | 0;\n hi = (hi + Math.imul(ah4, bh1)) | 0;\n lo = (lo + Math.imul(al3, bl2)) | 0;\n mid = (mid + Math.imul(al3, bh2)) | 0;\n mid = (mid + Math.imul(ah3, bl2)) | 0;\n hi = (hi + Math.imul(ah3, bh2)) | 0;\n lo = (lo + Math.imul(al2, bl3)) | 0;\n mid = (mid + Math.imul(al2, bh3)) | 0;\n mid = (mid + Math.imul(ah2, bl3)) | 0;\n hi = (hi + Math.imul(ah2, bh3)) | 0;\n lo = (lo + Math.imul(al1, bl4)) | 0;\n mid = (mid + Math.imul(al1, bh4)) | 0;\n mid = (mid + Math.imul(ah1, bl4)) | 0;\n hi = (hi + Math.imul(ah1, bh4)) | 0;\n lo = (lo + Math.imul(al0, bl5)) | 0;\n mid = (mid + Math.imul(al0, bh5)) | 0;\n mid = (mid + Math.imul(ah0, bl5)) | 0;\n hi = (hi + Math.imul(ah0, bh5)) | 0;\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\n w5 &= 0x3ffffff;\n /* k = 6 */\n lo = Math.imul(al6, bl0);\n mid = Math.imul(al6, bh0);\n mid = (mid + Math.imul(ah6, bl0)) | 0;\n hi = Math.imul(ah6, bh0);\n lo = (lo + Math.imul(al5, bl1)) | 0;\n mid = (mid + Math.imul(al5, bh1)) | 0;\n mid = (mid + Math.imul(ah5, bl1)) | 0;\n hi = (hi + Math.imul(ah5, bh1)) | 0;\n lo = (lo + Math.imul(al4, bl2)) | 0;\n mid = (mid + Math.imul(al4, bh2)) | 0;\n mid = (mid + Math.imul(ah4, bl2)) | 0;\n hi = (hi + Math.imul(ah4, bh2)) | 0;\n lo = (lo + Math.imul(al3, bl3)) | 0;\n mid = (mid + Math.imul(al3, bh3)) | 0;\n mid = (mid + Math.imul(ah3, bl3)) | 0;\n hi = (hi + Math.imul(ah3, bh3)) | 0;\n lo = (lo + Math.imul(al2, bl4)) | 0;\n mid = (mid + Math.imul(al2, bh4)) | 0;\n mid = (mid + Math.imul(ah2, bl4)) | 0;\n hi = (hi + Math.imul(ah2, bh4)) | 0;\n lo = (lo + Math.imul(al1, bl5)) | 0;\n mid = (mid + Math.imul(al1, bh5)) | 0;\n mid = (mid + Math.imul(ah1, bl5)) | 0;\n hi = (hi + Math.imul(ah1, bh5)) | 0;\n lo = (lo + Math.imul(al0, bl6)) | 0;\n mid = (mid + Math.imul(al0, bh6)) | 0;\n mid = (mid + Math.imul(ah0, bl6)) | 0;\n hi = (hi + Math.imul(ah0, bh6)) | 0;\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\n w6 &= 0x3ffffff;\n /* k = 7 */\n lo = Math.imul(al7, bl0);\n mid = Math.imul(al7, bh0);\n mid = (mid + Math.imul(ah7, bl0)) | 0;\n hi = Math.imul(ah7, bh0);\n lo = (lo + Math.imul(al6, bl1)) | 0;\n mid = (mid + Math.imul(al6, bh1)) | 0;\n mid = (mid + Math.imul(ah6, bl1)) | 0;\n hi = (hi + Math.imul(ah6, bh1)) | 0;\n lo = (lo + Math.imul(al5, bl2)) | 0;\n mid = (mid + Math.imul(al5, bh2)) | 0;\n mid = (mid + Math.imul(ah5, bl2)) | 0;\n hi = (hi + Math.imul(ah5, bh2)) | 0;\n lo = (lo + Math.imul(al4, bl3)) | 0;\n mid = (mid + Math.imul(al4, bh3)) | 0;\n mid = (mid + Math.imul(ah4, bl3)) | 0;\n hi = (hi + Math.imul(ah4, bh3)) | 0;\n lo = (lo + Math.imul(al3, bl4)) | 0;\n mid = (mid + Math.imul(al3, bh4)) | 0;\n mid = (mid + Math.imul(ah3, bl4)) | 0;\n hi = (hi + Math.imul(ah3, bh4)) | 0;\n lo = (lo + Math.imul(al2, bl5)) | 0;\n mid = (mid + Math.imul(al2, bh5)) | 0;\n mid = (mid + Math.imul(ah2, bl5)) | 0;\n hi = (hi + Math.imul(ah2, bh5)) | 0;\n lo = (lo + Math.imul(al1, bl6)) | 0;\n mid = (mid + Math.imul(al1, bh6)) | 0;\n mid = (mid + Math.imul(ah1, bl6)) | 0;\n hi = (hi + Math.imul(ah1, bh6)) | 0;\n lo = (lo + Math.imul(al0, bl7)) | 0;\n mid = (mid + Math.imul(al0, bh7)) | 0;\n mid = (mid + Math.imul(ah0, bl7)) | 0;\n hi = (hi + Math.imul(ah0, bh7)) | 0;\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\n w7 &= 0x3ffffff;\n /* k = 8 */\n lo = Math.imul(al8, bl0);\n mid = Math.imul(al8, bh0);\n mid = (mid + Math.imul(ah8, bl0)) | 0;\n hi = Math.imul(ah8, bh0);\n lo = (lo + Math.imul(al7, bl1)) | 0;\n mid = (mid + Math.imul(al7, bh1)) | 0;\n mid = (mid + Math.imul(ah7, bl1)) | 0;\n hi = (hi + Math.imul(ah7, bh1)) | 0;\n lo = (lo + Math.imul(al6, bl2)) | 0;\n mid = (mid + Math.imul(al6, bh2)) | 0;\n mid = (mid + Math.imul(ah6, bl2)) | 0;\n hi = (hi + Math.imul(ah6, bh2)) | 0;\n lo = (lo + Math.imul(al5, bl3)) | 0;\n mid = (mid + Math.imul(al5, bh3)) | 0;\n mid = (mid + Math.imul(ah5, bl3)) | 0;\n hi = (hi + Math.imul(ah5, bh3)) | 0;\n lo = (lo + Math.imul(al4, bl4)) | 0;\n mid = (mid + Math.imul(al4, bh4)) | 0;\n mid = (mid + Math.imul(ah4, bl4)) | 0;\n hi = (hi + Math.imul(ah4, bh4)) | 0;\n lo = (lo + Math.imul(al3, bl5)) | 0;\n mid = (mid + Math.imul(al3, bh5)) | 0;\n mid = (mid + Math.imul(ah3, bl5)) | 0;\n hi = (hi + Math.imul(ah3, bh5)) | 0;\n lo = (lo + Math.imul(al2, bl6)) | 0;\n mid = (mid + Math.imul(al2, bh6)) | 0;\n mid = (mid + Math.imul(ah2, bl6)) | 0;\n hi = (hi + Math.imul(ah2, bh6)) | 0;\n lo = (lo + Math.imul(al1, bl7)) | 0;\n mid = (mid + Math.imul(al1, bh7)) | 0;\n mid = (mid + Math.imul(ah1, bl7)) | 0;\n hi = (hi + Math.imul(ah1, bh7)) | 0;\n lo = (lo + Math.imul(al0, bl8)) | 0;\n mid = (mid + Math.imul(al0, bh8)) | 0;\n mid = (mid + Math.imul(ah0, bl8)) | 0;\n hi = (hi + Math.imul(ah0, bh8)) | 0;\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\n w8 &= 0x3ffffff;\n /* k = 9 */\n lo = Math.imul(al9, bl0);\n mid = Math.imul(al9, bh0);\n mid = (mid + Math.imul(ah9, bl0)) | 0;\n hi = Math.imul(ah9, bh0);\n lo = (lo + Math.imul(al8, bl1)) | 0;\n mid = (mid + Math.imul(al8, bh1)) | 0;\n mid = (mid + Math.imul(ah8, bl1)) | 0;\n hi = (hi + Math.imul(ah8, bh1)) | 0;\n lo = (lo + Math.imul(al7, bl2)) | 0;\n mid = (mid + Math.imul(al7, bh2)) | 0;\n mid = (mid + Math.imul(ah7, bl2)) | 0;\n hi = (hi + Math.imul(ah7, bh2)) | 0;\n lo = (lo + Math.imul(al6, bl3)) | 0;\n mid = (mid + Math.imul(al6, bh3)) | 0;\n mid = (mid + Math.imul(ah6, bl3)) | 0;\n hi = (hi + Math.imul(ah6, bh3)) | 0;\n lo = (lo + Math.imul(al5, bl4)) | 0;\n mid = (mid + Math.imul(al5, bh4)) | 0;\n mid = (mid + Math.imul(ah5, bl4)) | 0;\n hi = (hi + Math.imul(ah5, bh4)) | 0;\n lo = (lo + Math.imul(al4, bl5)) | 0;\n mid = (mid + Math.imul(al4, bh5)) | 0;\n mid = (mid + Math.imul(ah4, bl5)) | 0;\n hi = (hi + Math.imul(ah4, bh5)) | 0;\n lo = (lo + Math.imul(al3, bl6)) | 0;\n mid = (mid + Math.imul(al3, bh6)) | 0;\n mid = (mid + Math.imul(ah3, bl6)) | 0;\n hi = (hi + Math.imul(ah3, bh6)) | 0;\n lo = (lo + Math.imul(al2, bl7)) | 0;\n mid = (mid + Math.imul(al2, bh7)) | 0;\n mid = (mid + Math.imul(ah2, bl7)) | 0;\n hi = (hi + Math.imul(ah2, bh7)) | 0;\n lo = (lo + Math.imul(al1, bl8)) | 0;\n mid = (mid + Math.imul(al1, bh8)) | 0;\n mid = (mid + Math.imul(ah1, bl8)) | 0;\n hi = (hi + Math.imul(ah1, bh8)) | 0;\n lo = (lo + Math.imul(al0, bl9)) | 0;\n mid = (mid + Math.imul(al0, bh9)) | 0;\n mid = (mid + Math.imul(ah0, bl9)) | 0;\n hi = (hi + Math.imul(ah0, bh9)) | 0;\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\n w9 &= 0x3ffffff;\n /* k = 10 */\n lo = Math.imul(al9, bl1);\n mid = Math.imul(al9, bh1);\n mid = (mid + Math.imul(ah9, bl1)) | 0;\n hi = Math.imul(ah9, bh1);\n lo = (lo + Math.imul(al8, bl2)) | 0;\n mid = (mid + Math.imul(al8, bh2)) | 0;\n mid = (mid + Math.imul(ah8, bl2)) | 0;\n hi = (hi + Math.imul(ah8, bh2)) | 0;\n lo = (lo + Math.imul(al7, bl3)) | 0;\n mid = (mid + Math.imul(al7, bh3)) | 0;\n mid = (mid + Math.imul(ah7, bl3)) | 0;\n hi = (hi + Math.imul(ah7, bh3)) | 0;\n lo = (lo + Math.imul(al6, bl4)) | 0;\n mid = (mid + Math.imul(al6, bh4)) | 0;\n mid = (mid + Math.imul(ah6, bl4)) | 0;\n hi = (hi + Math.imul(ah6, bh4)) | 0;\n lo = (lo + Math.imul(al5, bl5)) | 0;\n mid = (mid + Math.imul(al5, bh5)) | 0;\n mid = (mid + Math.imul(ah5, bl5)) | 0;\n hi = (hi + Math.imul(ah5, bh5)) | 0;\n lo = (lo + Math.imul(al4, bl6)) | 0;\n mid = (mid + Math.imul(al4, bh6)) | 0;\n mid = (mid + Math.imul(ah4, bl6)) | 0;\n hi = (hi + Math.imul(ah4, bh6)) | 0;\n lo = (lo + Math.imul(al3, bl7)) | 0;\n mid = (mid + Math.imul(al3, bh7)) | 0;\n mid = (mid + Math.imul(ah3, bl7)) | 0;\n hi = (hi + Math.imul(ah3, bh7)) | 0;\n lo = (lo + Math.imul(al2, bl8)) | 0;\n mid = (mid + Math.imul(al2, bh8)) | 0;\n mid = (mid + Math.imul(ah2, bl8)) | 0;\n hi = (hi + Math.imul(ah2, bh8)) | 0;\n lo = (lo + Math.imul(al1, bl9)) | 0;\n mid = (mid + Math.imul(al1, bh9)) | 0;\n mid = (mid + Math.imul(ah1, bl9)) | 0;\n hi = (hi + Math.imul(ah1, bh9)) | 0;\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\n w10 &= 0x3ffffff;\n /* k = 11 */\n lo = Math.imul(al9, bl2);\n mid = Math.imul(al9, bh2);\n mid = (mid + Math.imul(ah9, bl2)) | 0;\n hi = Math.imul(ah9, bh2);\n lo = (lo + Math.imul(al8, bl3)) | 0;\n mid = (mid + Math.imul(al8, bh3)) | 0;\n mid = (mid + Math.imul(ah8, bl3)) | 0;\n hi = (hi + Math.imul(ah8, bh3)) | 0;\n lo = (lo + Math.imul(al7, bl4)) | 0;\n mid = (mid + Math.imul(al7, bh4)) | 0;\n mid = (mid + Math.imul(ah7, bl4)) | 0;\n hi = (hi + Math.imul(ah7, bh4)) | 0;\n lo = (lo + Math.imul(al6, bl5)) | 0;\n mid = (mid + Math.imul(al6, bh5)) | 0;\n mid = (mid + Math.imul(ah6, bl5)) | 0;\n hi = (hi + Math.imul(ah6, bh5)) | 0;\n lo = (lo + Math.imul(al5, bl6)) | 0;\n mid = (mid + Math.imul(al5, bh6)) | 0;\n mid = (mid + Math.imul(ah5, bl6)) | 0;\n hi = (hi + Math.imul(ah5, bh6)) | 0;\n lo = (lo + Math.imul(al4, bl7)) | 0;\n mid = (mid + Math.imul(al4, bh7)) | 0;\n mid = (mid + Math.imul(ah4, bl7)) | 0;\n hi = (hi + Math.imul(ah4, bh7)) | 0;\n lo = (lo + Math.imul(al3, bl8)) | 0;\n mid = (mid + Math.imul(al3, bh8)) | 0;\n mid = (mid + Math.imul(ah3, bl8)) | 0;\n hi = (hi + Math.imul(ah3, bh8)) | 0;\n lo = (lo + Math.imul(al2, bl9)) | 0;\n mid = (mid + Math.imul(al2, bh9)) | 0;\n mid = (mid + Math.imul(ah2, bl9)) | 0;\n hi = (hi + Math.imul(ah2, bh9)) | 0;\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\n w11 &= 0x3ffffff;\n /* k = 12 */\n lo = Math.imul(al9, bl3);\n mid = Math.imul(al9, bh3);\n mid = (mid + Math.imul(ah9, bl3)) | 0;\n hi = Math.imul(ah9, bh3);\n lo = (lo + Math.imul(al8, bl4)) | 0;\n mid = (mid + Math.imul(al8, bh4)) | 0;\n mid = (mid + Math.imul(ah8, bl4)) | 0;\n hi = (hi + Math.imul(ah8, bh4)) | 0;\n lo = (lo + Math.imul(al7, bl5)) | 0;\n mid = (mid + Math.imul(al7, bh5)) | 0;\n mid = (mid + Math.imul(ah7, bl5)) | 0;\n hi = (hi + Math.imul(ah7, bh5)) | 0;\n lo = (lo + Math.imul(al6, bl6)) | 0;\n mid = (mid + Math.imul(al6, bh6)) | 0;\n mid = (mid + Math.imul(ah6, bl6)) | 0;\n hi = (hi + Math.imul(ah6, bh6)) | 0;\n lo = (lo + Math.imul(al5, bl7)) | 0;\n mid = (mid + Math.imul(al5, bh7)) | 0;\n mid = (mid + Math.imul(ah5, bl7)) | 0;\n hi = (hi + Math.imul(ah5, bh7)) | 0;\n lo = (lo + Math.imul(al4, bl8)) | 0;\n mid = (mid + Math.imul(al4, bh8)) | 0;\n mid = (mid + Math.imul(ah4, bl8)) | 0;\n hi = (hi + Math.imul(ah4, bh8)) | 0;\n lo = (lo + Math.imul(al3, bl9)) | 0;\n mid = (mid + Math.imul(al3, bh9)) | 0;\n mid = (mid + Math.imul(ah3, bl9)) | 0;\n hi = (hi + Math.imul(ah3, bh9)) | 0;\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\n w12 &= 0x3ffffff;\n /* k = 13 */\n lo = Math.imul(al9, bl4);\n mid = Math.imul(al9, bh4);\n mid = (mid + Math.imul(ah9, bl4)) | 0;\n hi = Math.imul(ah9, bh4);\n lo = (lo + Math.imul(al8, bl5)) | 0;\n mid = (mid + Math.imul(al8, bh5)) | 0;\n mid = (mid + Math.imul(ah8, bl5)) | 0;\n hi = (hi + Math.imul(ah8, bh5)) | 0;\n lo = (lo + Math.imul(al7, bl6)) | 0;\n mid = (mid + Math.imul(al7, bh6)) | 0;\n mid = (mid + Math.imul(ah7, bl6)) | 0;\n hi = (hi + Math.imul(ah7, bh6)) | 0;\n lo = (lo + Math.imul(al6, bl7)) | 0;\n mid = (mid + Math.imul(al6, bh7)) | 0;\n mid = (mid + Math.imul(ah6, bl7)) | 0;\n hi = (hi + Math.imul(ah6, bh7)) | 0;\n lo = (lo + Math.imul(al5, bl8)) | 0;\n mid = (mid + Math.imul(al5, bh8)) | 0;\n mid = (mid + Math.imul(ah5, bl8)) | 0;\n hi = (hi + Math.imul(ah5, bh8)) | 0;\n lo = (lo + Math.imul(al4, bl9)) | 0;\n mid = (mid + Math.imul(al4, bh9)) | 0;\n mid = (mid + Math.imul(ah4, bl9)) | 0;\n hi = (hi + Math.imul(ah4, bh9)) | 0;\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\n w13 &= 0x3ffffff;\n /* k = 14 */\n lo = Math.imul(al9, bl5);\n mid = Math.imul(al9, bh5);\n mid = (mid + Math.imul(ah9, bl5)) | 0;\n hi = Math.imul(ah9, bh5);\n lo = (lo + Math.imul(al8, bl6)) | 0;\n mid = (mid + Math.imul(al8, bh6)) | 0;\n mid = (mid + Math.imul(ah8, bl6)) | 0;\n hi = (hi + Math.imul(ah8, bh6)) | 0;\n lo = (lo + Math.imul(al7, bl7)) | 0;\n mid = (mid + Math.imul(al7, bh7)) | 0;\n mid = (mid + Math.imul(ah7, bl7)) | 0;\n hi = (hi + Math.imul(ah7, bh7)) | 0;\n lo = (lo + Math.imul(al6, bl8)) | 0;\n mid = (mid + Math.imul(al6, bh8)) | 0;\n mid = (mid + Math.imul(ah6, bl8)) | 0;\n hi = (hi + Math.imul(ah6, bh8)) | 0;\n lo = (lo + Math.imul(al5, bl9)) | 0;\n mid = (mid + Math.imul(al5, bh9)) | 0;\n mid = (mid + Math.imul(ah5, bl9)) | 0;\n hi = (hi + Math.imul(ah5, bh9)) | 0;\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\n w14 &= 0x3ffffff;\n /* k = 15 */\n lo = Math.imul(al9, bl6);\n mid = Math.imul(al9, bh6);\n mid = (mid + Math.imul(ah9, bl6)) | 0;\n hi = Math.imul(ah9, bh6);\n lo = (lo + Math.imul(al8, bl7)) | 0;\n mid = (mid + Math.imul(al8, bh7)) | 0;\n mid = (mid + Math.imul(ah8, bl7)) | 0;\n hi = (hi + Math.imul(ah8, bh7)) | 0;\n lo = (lo + Math.imul(al7, bl8)) | 0;\n mid = (mid + Math.imul(al7, bh8)) | 0;\n mid = (mid + Math.imul(ah7, bl8)) | 0;\n hi = (hi + Math.imul(ah7, bh8)) | 0;\n lo = (lo + Math.imul(al6, bl9)) | 0;\n mid = (mid + Math.imul(al6, bh9)) | 0;\n mid = (mid + Math.imul(ah6, bl9)) | 0;\n hi = (hi + Math.imul(ah6, bh9)) | 0;\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\n w15 &= 0x3ffffff;\n /* k = 16 */\n lo = Math.imul(al9, bl7);\n mid = Math.imul(al9, bh7);\n mid = (mid + Math.imul(ah9, bl7)) | 0;\n hi = Math.imul(ah9, bh7);\n lo = (lo + Math.imul(al8, bl8)) | 0;\n mid = (mid + Math.imul(al8, bh8)) | 0;\n mid = (mid + Math.imul(ah8, bl8)) | 0;\n hi = (hi + Math.imul(ah8, bh8)) | 0;\n lo = (lo + Math.imul(al7, bl9)) | 0;\n mid = (mid + Math.imul(al7, bh9)) | 0;\n mid = (mid + Math.imul(ah7, bl9)) | 0;\n hi = (hi + Math.imul(ah7, bh9)) | 0;\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\n w16 &= 0x3ffffff;\n /* k = 17 */\n lo = Math.imul(al9, bl8);\n mid = Math.imul(al9, bh8);\n mid = (mid + Math.imul(ah9, bl8)) | 0;\n hi = Math.imul(ah9, bh8);\n lo = (lo + Math.imul(al8, bl9)) | 0;\n mid = (mid + Math.imul(al8, bh9)) | 0;\n mid = (mid + Math.imul(ah8, bl9)) | 0;\n hi = (hi + Math.imul(ah8, bh9)) | 0;\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\n w17 &= 0x3ffffff;\n /* k = 18 */\n lo = Math.imul(al9, bl9);\n mid = Math.imul(al9, bh9);\n mid = (mid + Math.imul(ah9, bl9)) | 0;\n hi = Math.imul(ah9, bh9);\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\n w18 &= 0x3ffffff;\n o[0] = w0;\n o[1] = w1;\n o[2] = w2;\n o[3] = w3;\n o[4] = w4;\n o[5] = w5;\n o[6] = w6;\n o[7] = w7;\n o[8] = w8;\n o[9] = w9;\n o[10] = w10;\n o[11] = w11;\n o[12] = w12;\n o[13] = w13;\n o[14] = w14;\n o[15] = w15;\n o[16] = w16;\n o[17] = w17;\n o[18] = w18;\n if (c !== 0) {\n o[19] = c;\n out.length++;\n }\n return out;\n };\n\n // Polyfill comb\n if (!Math.imul) {\n comb10MulTo = smallMulTo;\n }\n\n function bigMulTo (self, num, out) {\n out.negative = num.negative ^ self.negative;\n out.length = self.length + num.length;\n\n var carry = 0;\n var hncarry = 0;\n for (var k = 0; k < out.length - 1; k++) {\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n // note that ncarry could be >= 0x3ffffff\n var ncarry = hncarry;\n hncarry = 0;\n var rword = carry & 0x3ffffff;\n var maxJ = Math.min(k, num.length - 1);\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n var i = k - j;\n var a = self.words[i] | 0;\n var b = num.words[j] | 0;\n var r = a * b;\n\n var lo = r & 0x3ffffff;\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\n lo = (lo + rword) | 0;\n rword = lo & 0x3ffffff;\n ncarry = (ncarry + (lo >>> 26)) | 0;\n\n hncarry += ncarry >>> 26;\n ncarry &= 0x3ffffff;\n }\n out.words[k] = rword;\n carry = ncarry;\n ncarry = hncarry;\n }\n if (carry !== 0) {\n out.words[k] = carry;\n } else {\n out.length--;\n }\n\n return out.strip();\n }\n\n function jumboMulTo (self, num, out) {\n var fftm = new FFTM();\n return fftm.mulp(self, num, out);\n }\n\n BN.prototype.mulTo = function mulTo (num, out) {\n var res;\n var len = this.length + num.length;\n if (this.length === 10 && num.length === 10) {\n res = comb10MulTo(this, num, out);\n } else if (len < 63) {\n res = smallMulTo(this, num, out);\n } else if (len < 1024) {\n res = bigMulTo(this, num, out);\n } else {\n res = jumboMulTo(this, num, out);\n }\n\n return res;\n };\n\n // Cooley-Tukey algorithm for FFT\n // slightly revisited to rely on looping instead of recursion\n\n function FFTM (x, y) {\n this.x = x;\n this.y = y;\n }\n\n FFTM.prototype.makeRBT = function makeRBT (N) {\n var t = new Array(N);\n var l = BN.prototype._countBits(N) - 1;\n for (var i = 0; i < N; i++) {\n t[i] = this.revBin(i, l, N);\n }\n\n return t;\n };\n\n // Returns binary-reversed representation of `x`\n FFTM.prototype.revBin = function revBin (x, l, N) {\n if (x === 0 || x === N - 1) return x;\n\n var rb = 0;\n for (var i = 0; i < l; i++) {\n rb |= (x & 1) << (l - i - 1);\n x >>= 1;\n }\n\n return rb;\n };\n\n // Performs \"tweedling\" phase, therefore 'emulating'\n // behaviour of the recursive algorithm\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\n for (var i = 0; i < N; i++) {\n rtws[i] = rws[rbt[i]];\n itws[i] = iws[rbt[i]];\n }\n };\n\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\n this.permute(rbt, rws, iws, rtws, itws, N);\n\n for (var s = 1; s < N; s <<= 1) {\n var l = s << 1;\n\n var rtwdf = Math.cos(2 * Math.PI / l);\n var itwdf = Math.sin(2 * Math.PI / l);\n\n for (var p = 0; p < N; p += l) {\n var rtwdf_ = rtwdf;\n var itwdf_ = itwdf;\n\n for (var j = 0; j < s; j++) {\n var re = rtws[p + j];\n var ie = itws[p + j];\n\n var ro = rtws[p + j + s];\n var io = itws[p + j + s];\n\n var rx = rtwdf_ * ro - itwdf_ * io;\n\n io = rtwdf_ * io + itwdf_ * ro;\n ro = rx;\n\n rtws[p + j] = re + ro;\n itws[p + j] = ie + io;\n\n rtws[p + j + s] = re - ro;\n itws[p + j + s] = ie - io;\n\n /* jshint maxdepth : false */\n if (j !== l) {\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n rtwdf_ = rx;\n }\n }\n }\n }\n };\n\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\n var N = Math.max(m, n) | 1;\n var odd = N & 1;\n var i = 0;\n for (N = N / 2 | 0; N; N = N >>> 1) {\n i++;\n }\n\n return 1 << i + 1 + odd;\n };\n\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\n if (N <= 1) return;\n\n for (var i = 0; i < N / 2; i++) {\n var t = rws[i];\n\n rws[i] = rws[N - i - 1];\n rws[N - i - 1] = t;\n\n t = iws[i];\n\n iws[i] = -iws[N - i - 1];\n iws[N - i - 1] = -t;\n }\n };\n\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\n var carry = 0;\n for (var i = 0; i < N / 2; i++) {\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\n Math.round(ws[2 * i] / N) +\n carry;\n\n ws[i] = w & 0x3ffffff;\n\n if (w < 0x4000000) {\n carry = 0;\n } else {\n carry = w / 0x4000000 | 0;\n }\n }\n\n return ws;\n };\n\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\n var carry = 0;\n for (var i = 0; i < len; i++) {\n carry = carry + (ws[i] | 0);\n\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\n }\n\n // Pad with zeroes\n for (i = 2 * len; i < N; ++i) {\n rws[i] = 0;\n }\n\n assert(carry === 0);\n assert((carry & ~0x1fff) === 0);\n };\n\n FFTM.prototype.stub = function stub (N) {\n var ph = new Array(N);\n for (var i = 0; i < N; i++) {\n ph[i] = 0;\n }\n\n return ph;\n };\n\n FFTM.prototype.mulp = function mulp (x, y, out) {\n var N = 2 * this.guessLen13b(x.length, y.length);\n\n var rbt = this.makeRBT(N);\n\n var _ = this.stub(N);\n\n var rws = new Array(N);\n var rwst = new Array(N);\n var iwst = new Array(N);\n\n var nrws = new Array(N);\n var nrwst = new Array(N);\n var niwst = new Array(N);\n\n var rmws = out.words;\n rmws.length = N;\n\n this.convert13b(x.words, x.length, rws, N);\n this.convert13b(y.words, y.length, nrws, N);\n\n this.transform(rws, _, rwst, iwst, N, rbt);\n this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n for (var i = 0; i < N; i++) {\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n rwst[i] = rx;\n }\n\n this.conjugate(rwst, iwst, N);\n this.transform(rwst, iwst, rmws, _, N, rbt);\n this.conjugate(rmws, _, N);\n this.normalize13b(rmws, N);\n\n out.negative = x.negative ^ y.negative;\n out.length = x.length + y.length;\n return out.strip();\n };\n\n // Multiply `this` by `num`\n BN.prototype.mul = function mul (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return this.mulTo(num, out);\n };\n\n // Multiply employing FFT\n BN.prototype.mulf = function mulf (num) {\n var out = new BN(null);\n out.words = new Array(this.length + num.length);\n return jumboMulTo(this, num, out);\n };\n\n // In-place Multiplication\n BN.prototype.imul = function imul (num) {\n return this.clone().mulTo(num, this);\n };\n\n BN.prototype.imuln = function imuln (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n\n // Carry\n var carry = 0;\n for (var i = 0; i < this.length; i++) {\n var w = (this.words[i] | 0) * num;\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n carry >>= 26;\n carry += (w / 0x4000000) | 0;\n // NOTE: lo is 27bit maximum\n carry += lo >>> 26;\n this.words[i] = lo & 0x3ffffff;\n }\n\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n\n return this;\n };\n\n BN.prototype.muln = function muln (num) {\n return this.clone().imuln(num);\n };\n\n // `this` * `this`\n BN.prototype.sqr = function sqr () {\n return this.mul(this);\n };\n\n // `this` * `this` in-place\n BN.prototype.isqr = function isqr () {\n return this.imul(this.clone());\n };\n\n // Math.pow(`this`, `num`)\n BN.prototype.pow = function pow (num) {\n var w = toBitArray(num);\n if (w.length === 0) return new BN(1);\n\n // Skip leading zeroes\n var res = this;\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\n if (w[i] !== 0) break;\n }\n\n if (++i < w.length) {\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n if (w[i] === 0) continue;\n\n res = res.mul(q);\n }\n }\n\n return res;\n };\n\n // Shift-left in-place\n BN.prototype.iushln = function iushln (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\n var i;\n\n if (r !== 0) {\n var carry = 0;\n\n for (i = 0; i < this.length; i++) {\n var newCarry = this.words[i] & carryMask;\n var c = ((this.words[i] | 0) - newCarry) << r;\n this.words[i] = c | carry;\n carry = newCarry >>> (26 - r);\n }\n\n if (carry) {\n this.words[i] = carry;\n this.length++;\n }\n }\n\n if (s !== 0) {\n for (i = this.length - 1; i >= 0; i--) {\n this.words[i + s] = this.words[i];\n }\n\n for (i = 0; i < s; i++) {\n this.words[i] = 0;\n }\n\n this.length += s;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishln = function ishln (bits) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushln(bits);\n };\n\n // Shift-right in-place\n // NOTE: `hint` is a lowest bit before trailing zeroes\n // NOTE: if `extended` is present - it will be filled with destroyed bits\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\n assert(typeof bits === 'number' && bits >= 0);\n var h;\n if (hint) {\n h = (hint - (hint % 26)) / 26;\n } else {\n h = 0;\n }\n\n var r = bits % 26;\n var s = Math.min((bits - r) / 26, this.length);\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n var maskedWords = extended;\n\n h -= s;\n h = Math.max(0, h);\n\n // Extended mode, copy masked part\n if (maskedWords) {\n for (var i = 0; i < s; i++) {\n maskedWords.words[i] = this.words[i];\n }\n maskedWords.length = s;\n }\n\n if (s === 0) {\n // No-op, we should not move anything at all\n } else if (this.length > s) {\n this.length -= s;\n for (i = 0; i < this.length; i++) {\n this.words[i] = this.words[i + s];\n }\n } else {\n this.words[0] = 0;\n this.length = 1;\n }\n\n var carry = 0;\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n var word = this.words[i] | 0;\n this.words[i] = (carry << (26 - r)) | (word >>> r);\n carry = word & mask;\n }\n\n // Push carried bits as a mask\n if (maskedWords && carry !== 0) {\n maskedWords.words[maskedWords.length++] = carry;\n }\n\n if (this.length === 0) {\n this.words[0] = 0;\n this.length = 1;\n }\n\n return this.strip();\n };\n\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\n // TODO(indutny): implement me\n assert(this.negative === 0);\n return this.iushrn(bits, hint, extended);\n };\n\n // Shift-left\n BN.prototype.shln = function shln (bits) {\n return this.clone().ishln(bits);\n };\n\n BN.prototype.ushln = function ushln (bits) {\n return this.clone().iushln(bits);\n };\n\n // Shift-right\n BN.prototype.shrn = function shrn (bits) {\n return this.clone().ishrn(bits);\n };\n\n BN.prototype.ushrn = function ushrn (bits) {\n return this.clone().iushrn(bits);\n };\n\n // Test if n bit is set\n BN.prototype.testn = function testn (bit) {\n assert(typeof bit === 'number' && bit >= 0);\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) return false;\n\n // Check bit and return\n var w = this.words[s];\n\n return !!(w & q);\n };\n\n // Return only lowers bits of number (in-place)\n BN.prototype.imaskn = function imaskn (bits) {\n assert(typeof bits === 'number' && bits >= 0);\n var r = bits % 26;\n var s = (bits - r) / 26;\n\n assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n if (this.length <= s) {\n return this;\n }\n\n if (r !== 0) {\n s++;\n }\n this.length = Math.min(s, this.length);\n\n if (r !== 0) {\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\n this.words[this.length - 1] &= mask;\n }\n\n return this.strip();\n };\n\n // Return only lowers bits of number\n BN.prototype.maskn = function maskn (bits) {\n return this.clone().imaskn(bits);\n };\n\n // Add plain number `num` to `this`\n BN.prototype.iaddn = function iaddn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.isubn(-num);\n\n // Possible sign change\n if (this.negative !== 0) {\n if (this.length === 1 && (this.words[0] | 0) < num) {\n this.words[0] = num - (this.words[0] | 0);\n this.negative = 0;\n return this;\n }\n\n this.negative = 0;\n this.isubn(num);\n this.negative = 1;\n return this;\n }\n\n // Add without checks\n return this._iaddn(num);\n };\n\n BN.prototype._iaddn = function _iaddn (num) {\n this.words[0] += num;\n\n // Carry\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n this.words[i] -= 0x4000000;\n if (i === this.length - 1) {\n this.words[i + 1] = 1;\n } else {\n this.words[i + 1]++;\n }\n }\n this.length = Math.max(this.length, i + 1);\n\n return this;\n };\n\n // Subtract plain number `num` from `this`\n BN.prototype.isubn = function isubn (num) {\n assert(typeof num === 'number');\n assert(num < 0x4000000);\n if (num < 0) return this.iaddn(-num);\n\n if (this.negative !== 0) {\n this.negative = 0;\n this.iaddn(num);\n this.negative = 1;\n return this;\n }\n\n this.words[0] -= num;\n\n if (this.length === 1 && this.words[0] < 0) {\n this.words[0] = -this.words[0];\n this.negative = 1;\n } else {\n // Carry\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n this.words[i] += 0x4000000;\n this.words[i + 1] -= 1;\n }\n }\n\n return this.strip();\n };\n\n BN.prototype.addn = function addn (num) {\n return this.clone().iaddn(num);\n };\n\n BN.prototype.subn = function subn (num) {\n return this.clone().isubn(num);\n };\n\n BN.prototype.iabs = function iabs () {\n this.negative = 0;\n\n return this;\n };\n\n BN.prototype.abs = function abs () {\n return this.clone().iabs();\n };\n\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\n var len = num.length + shift;\n var i;\n\n this._expand(len);\n\n var w;\n var carry = 0;\n for (i = 0; i < num.length; i++) {\n w = (this.words[i + shift] | 0) + carry;\n var right = (num.words[i] | 0) * mul;\n w -= right & 0x3ffffff;\n carry = (w >> 26) - ((right / 0x4000000) | 0);\n this.words[i + shift] = w & 0x3ffffff;\n }\n for (; i < this.length - shift; i++) {\n w = (this.words[i + shift] | 0) + carry;\n carry = w >> 26;\n this.words[i + shift] = w & 0x3ffffff;\n }\n\n if (carry === 0) return this.strip();\n\n // Subtraction overflow\n assert(carry === -1);\n carry = 0;\n for (i = 0; i < this.length; i++) {\n w = -(this.words[i] | 0) + carry;\n carry = w >> 26;\n this.words[i] = w & 0x3ffffff;\n }\n this.negative = 1;\n\n return this.strip();\n };\n\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\n var shift = this.length - num.length;\n\n var a = this.clone();\n var b = num;\n\n // Normalize\n var bhi = b.words[b.length - 1] | 0;\n var bhiBits = this._countBits(bhi);\n shift = 26 - bhiBits;\n if (shift !== 0) {\n b = b.ushln(shift);\n a.iushln(shift);\n bhi = b.words[b.length - 1] | 0;\n }\n\n // Initialize quotient\n var m = a.length - b.length;\n var q;\n\n if (mode !== 'mod') {\n q = new BN(null);\n q.length = m + 1;\n q.words = new Array(q.length);\n for (var i = 0; i < q.length; i++) {\n q.words[i] = 0;\n }\n }\n\n var diff = a.clone()._ishlnsubmul(b, 1, m);\n if (diff.negative === 0) {\n a = diff;\n if (q) {\n q.words[m] = 1;\n }\n }\n\n for (var j = m - 1; j >= 0; j--) {\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\n (a.words[b.length + j - 1] | 0);\n\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n // (0x7ffffff)\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\n\n a._ishlnsubmul(b, qj, j);\n while (a.negative !== 0) {\n qj--;\n a.negative = 0;\n a._ishlnsubmul(b, 1, j);\n if (!a.isZero()) {\n a.negative ^= 1;\n }\n }\n if (q) {\n q.words[j] = qj;\n }\n }\n if (q) {\n q.strip();\n }\n a.strip();\n\n // Denormalize\n if (mode !== 'div' && shift !== 0) {\n a.iushrn(shift);\n }\n\n return {\n div: q || null,\n mod: a\n };\n };\n\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\n // to `div` to request div only, or be absent to\n // request both div & mod\n // 2) `positive` is true if unsigned mod is requested\n BN.prototype.divmod = function divmod (num, mode, positive) {\n assert(!num.isZero());\n\n if (this.isZero()) {\n return {\n div: new BN(0),\n mod: new BN(0)\n };\n }\n\n var div, mod, res;\n if (this.negative !== 0 && num.negative === 0) {\n res = this.neg().divmod(num, mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.iadd(num);\n }\n }\n\n return {\n div: div,\n mod: mod\n };\n }\n\n if (this.negative === 0 && num.negative !== 0) {\n res = this.divmod(num.neg(), mode);\n\n if (mode !== 'mod') {\n div = res.div.neg();\n }\n\n return {\n div: div,\n mod: res.mod\n };\n }\n\n if ((this.negative & num.negative) !== 0) {\n res = this.neg().divmod(num.neg(), mode);\n\n if (mode !== 'div') {\n mod = res.mod.neg();\n if (positive && mod.negative !== 0) {\n mod.isub(num);\n }\n }\n\n return {\n div: res.div,\n mod: mod\n };\n }\n\n // Both numbers are positive at this point\n\n // Strip both numbers to approximate shift value\n if (num.length > this.length || this.cmp(num) < 0) {\n return {\n div: new BN(0),\n mod: this\n };\n }\n\n // Very short reduction\n if (num.length === 1) {\n if (mode === 'div') {\n return {\n div: this.divn(num.words[0]),\n mod: null\n };\n }\n\n if (mode === 'mod') {\n return {\n div: null,\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return {\n div: this.divn(num.words[0]),\n mod: new BN(this.modn(num.words[0]))\n };\n }\n\n return this._wordDiv(num, mode);\n };\n\n // Find `this` / `num`\n BN.prototype.div = function div (num) {\n return this.divmod(num, 'div', false).div;\n };\n\n // Find `this` % `num`\n BN.prototype.mod = function mod (num) {\n return this.divmod(num, 'mod', false).mod;\n };\n\n BN.prototype.umod = function umod (num) {\n return this.divmod(num, 'mod', true).mod;\n };\n\n // Find Round(`this` / `num`)\n BN.prototype.divRound = function divRound (num) {\n var dm = this.divmod(num);\n\n // Fast case - exact division\n if (dm.mod.isZero()) return dm.div;\n\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n\n var half = num.ushrn(1);\n var r2 = num.andln(1);\n var cmp = mod.cmp(half);\n\n // Round down\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\n\n // Round up\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n };\n\n BN.prototype.modn = function modn (num) {\n assert(num <= 0x3ffffff);\n var p = (1 << 26) % num;\n\n var acc = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n acc = (p * acc + (this.words[i] | 0)) % num;\n }\n\n return acc;\n };\n\n // In-place division by number\n BN.prototype.idivn = function idivn (num) {\n assert(num <= 0x3ffffff);\n\n var carry = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var w = (this.words[i] | 0) + carry * 0x4000000;\n this.words[i] = (w / num) | 0;\n carry = w % num;\n }\n\n return this.strip();\n };\n\n BN.prototype.divn = function divn (num) {\n return this.clone().idivn(num);\n };\n\n BN.prototype.egcd = function egcd (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var x = this;\n var y = p.clone();\n\n if (x.negative !== 0) {\n x = x.umod(p);\n } else {\n x = x.clone();\n }\n\n // A * x + B * y = x\n var A = new BN(1);\n var B = new BN(0);\n\n // C * x + D * y = y\n var C = new BN(0);\n var D = new BN(1);\n\n var g = 0;\n\n while (x.isEven() && y.isEven()) {\n x.iushrn(1);\n y.iushrn(1);\n ++g;\n }\n\n var yp = y.clone();\n var xp = x.clone();\n\n while (!x.isZero()) {\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n x.iushrn(i);\n while (i-- > 0) {\n if (A.isOdd() || B.isOdd()) {\n A.iadd(yp);\n B.isub(xp);\n }\n\n A.iushrn(1);\n B.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n y.iushrn(j);\n while (j-- > 0) {\n if (C.isOdd() || D.isOdd()) {\n C.iadd(yp);\n D.isub(xp);\n }\n\n C.iushrn(1);\n D.iushrn(1);\n }\n }\n\n if (x.cmp(y) >= 0) {\n x.isub(y);\n A.isub(C);\n B.isub(D);\n } else {\n y.isub(x);\n C.isub(A);\n D.isub(B);\n }\n }\n\n return {\n a: C,\n b: D,\n gcd: y.iushln(g)\n };\n };\n\n // This is reduced incarnation of the binary EEA\n // above, designated to invert members of the\n // _prime_ fields F(p) at a maximal speed\n BN.prototype._invmp = function _invmp (p) {\n assert(p.negative === 0);\n assert(!p.isZero());\n\n var a = this;\n var b = p.clone();\n\n if (a.negative !== 0) {\n a = a.umod(p);\n } else {\n a = a.clone();\n }\n\n var x1 = new BN(1);\n var x2 = new BN(0);\n\n var delta = b.clone();\n\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\n if (i > 0) {\n a.iushrn(i);\n while (i-- > 0) {\n if (x1.isOdd()) {\n x1.iadd(delta);\n }\n\n x1.iushrn(1);\n }\n }\n\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\n if (j > 0) {\n b.iushrn(j);\n while (j-- > 0) {\n if (x2.isOdd()) {\n x2.iadd(delta);\n }\n\n x2.iushrn(1);\n }\n }\n\n if (a.cmp(b) >= 0) {\n a.isub(b);\n x1.isub(x2);\n } else {\n b.isub(a);\n x2.isub(x1);\n }\n }\n\n var res;\n if (a.cmpn(1) === 0) {\n res = x1;\n } else {\n res = x2;\n }\n\n if (res.cmpn(0) < 0) {\n res.iadd(p);\n }\n\n return res;\n };\n\n BN.prototype.gcd = function gcd (num) {\n if (this.isZero()) return num.abs();\n if (num.isZero()) return this.abs();\n\n var a = this.clone();\n var b = num.clone();\n a.negative = 0;\n b.negative = 0;\n\n // Remove common factor of two\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n a.iushrn(1);\n b.iushrn(1);\n }\n\n do {\n while (a.isEven()) {\n a.iushrn(1);\n }\n while (b.isEven()) {\n b.iushrn(1);\n }\n\n var r = a.cmp(b);\n if (r < 0) {\n // Swap `a` and `b` to make `a` always bigger than `b`\n var t = a;\n a = b;\n b = t;\n } else if (r === 0 || b.cmpn(1) === 0) {\n break;\n }\n\n a.isub(b);\n } while (true);\n\n return b.iushln(shift);\n };\n\n // Invert number in the field F(num)\n BN.prototype.invm = function invm (num) {\n return this.egcd(num).a.umod(num);\n };\n\n BN.prototype.isEven = function isEven () {\n return (this.words[0] & 1) === 0;\n };\n\n BN.prototype.isOdd = function isOdd () {\n return (this.words[0] & 1) === 1;\n };\n\n // And first word and num\n BN.prototype.andln = function andln (num) {\n return this.words[0] & num;\n };\n\n // Increment at the bit position in-line\n BN.prototype.bincn = function bincn (bit) {\n assert(typeof bit === 'number');\n var r = bit % 26;\n var s = (bit - r) / 26;\n var q = 1 << r;\n\n // Fast case: bit is much higher than all existing words\n if (this.length <= s) {\n this._expand(s + 1);\n this.words[s] |= q;\n return this;\n }\n\n // Add bit and propagate, if needed\n var carry = q;\n for (var i = s; carry !== 0 && i < this.length; i++) {\n var w = this.words[i] | 0;\n w += carry;\n carry = w >>> 26;\n w &= 0x3ffffff;\n this.words[i] = w;\n }\n if (carry !== 0) {\n this.words[i] = carry;\n this.length++;\n }\n return this;\n };\n\n BN.prototype.isZero = function isZero () {\n return this.length === 1 && this.words[0] === 0;\n };\n\n BN.prototype.cmpn = function cmpn (num) {\n var negative = num < 0;\n\n if (this.negative !== 0 && !negative) return -1;\n if (this.negative === 0 && negative) return 1;\n\n this.strip();\n\n var res;\n if (this.length > 1) {\n res = 1;\n } else {\n if (negative) {\n num = -num;\n }\n\n assert(num <= 0x3ffffff, 'Number is too big');\n\n var w = this.words[0] | 0;\n res = w === num ? 0 : w < num ? -1 : 1;\n }\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Compare two numbers and return:\n // 1 - if `this` > `num`\n // 0 - if `this` == `num`\n // -1 - if `this` < `num`\n BN.prototype.cmp = function cmp (num) {\n if (this.negative !== 0 && num.negative === 0) return -1;\n if (this.negative === 0 && num.negative !== 0) return 1;\n\n var res = this.ucmp(num);\n if (this.negative !== 0) return -res | 0;\n return res;\n };\n\n // Unsigned comparison\n BN.prototype.ucmp = function ucmp (num) {\n // At this point both numbers have the same sign\n if (this.length > num.length) return 1;\n if (this.length < num.length) return -1;\n\n var res = 0;\n for (var i = this.length - 1; i >= 0; i--) {\n var a = this.words[i] | 0;\n var b = num.words[i] | 0;\n\n if (a === b) continue;\n if (a < b) {\n res = -1;\n } else if (a > b) {\n res = 1;\n }\n break;\n }\n return res;\n };\n\n BN.prototype.gtn = function gtn (num) {\n return this.cmpn(num) === 1;\n };\n\n BN.prototype.gt = function gt (num) {\n return this.cmp(num) === 1;\n };\n\n BN.prototype.gten = function gten (num) {\n return this.cmpn(num) >= 0;\n };\n\n BN.prototype.gte = function gte (num) {\n return this.cmp(num) >= 0;\n };\n\n BN.prototype.ltn = function ltn (num) {\n return this.cmpn(num) === -1;\n };\n\n BN.prototype.lt = function lt (num) {\n return this.cmp(num) === -1;\n };\n\n BN.prototype.lten = function lten (num) {\n return this.cmpn(num) <= 0;\n };\n\n BN.prototype.lte = function lte (num) {\n return this.cmp(num) <= 0;\n };\n\n BN.prototype.eqn = function eqn (num) {\n return this.cmpn(num) === 0;\n };\n\n BN.prototype.eq = function eq (num) {\n return this.cmp(num) === 0;\n };\n\n //\n // A reduce context, could be using montgomery or something better, depending\n // on the `m` itself.\n //\n BN.red = function red (num) {\n return new Red(num);\n };\n\n BN.prototype.toRed = function toRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n assert(this.negative === 0, 'red works only with positives');\n return ctx.convertTo(this)._forceRed(ctx);\n };\n\n BN.prototype.fromRed = function fromRed () {\n assert(this.red, 'fromRed works only with numbers in reduction context');\n return this.red.convertFrom(this);\n };\n\n BN.prototype._forceRed = function _forceRed (ctx) {\n this.red = ctx;\n return this;\n };\n\n BN.prototype.forceRed = function forceRed (ctx) {\n assert(!this.red, 'Already a number in reduction context');\n return this._forceRed(ctx);\n };\n\n BN.prototype.redAdd = function redAdd (num) {\n assert(this.red, 'redAdd works only with red numbers');\n return this.red.add(this, num);\n };\n\n BN.prototype.redIAdd = function redIAdd (num) {\n assert(this.red, 'redIAdd works only with red numbers');\n return this.red.iadd(this, num);\n };\n\n BN.prototype.redSub = function redSub (num) {\n assert(this.red, 'redSub works only with red numbers');\n return this.red.sub(this, num);\n };\n\n BN.prototype.redISub = function redISub (num) {\n assert(this.red, 'redISub works only with red numbers');\n return this.red.isub(this, num);\n };\n\n BN.prototype.redShl = function redShl (num) {\n assert(this.red, 'redShl works only with red numbers');\n return this.red.shl(this, num);\n };\n\n BN.prototype.redMul = function redMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.mul(this, num);\n };\n\n BN.prototype.redIMul = function redIMul (num) {\n assert(this.red, 'redMul works only with red numbers');\n this.red._verify2(this, num);\n return this.red.imul(this, num);\n };\n\n BN.prototype.redSqr = function redSqr () {\n assert(this.red, 'redSqr works only with red numbers');\n this.red._verify1(this);\n return this.red.sqr(this);\n };\n\n BN.prototype.redISqr = function redISqr () {\n assert(this.red, 'redISqr works only with red numbers');\n this.red._verify1(this);\n return this.red.isqr(this);\n };\n\n // Square root over p\n BN.prototype.redSqrt = function redSqrt () {\n assert(this.red, 'redSqrt works only with red numbers');\n this.red._verify1(this);\n return this.red.sqrt(this);\n };\n\n BN.prototype.redInvm = function redInvm () {\n assert(this.red, 'redInvm works only with red numbers');\n this.red._verify1(this);\n return this.red.invm(this);\n };\n\n // Return negative clone of `this` % `red modulo`\n BN.prototype.redNeg = function redNeg () {\n assert(this.red, 'redNeg works only with red numbers');\n this.red._verify1(this);\n return this.red.neg(this);\n };\n\n BN.prototype.redPow = function redPow (num) {\n assert(this.red && !num.red, 'redPow(normalNum)');\n this.red._verify1(this);\n return this.red.pow(this, num);\n };\n\n // Prime numbers with efficient reduction\n var primes = {\n k256: null,\n p224: null,\n p192: null,\n p25519: null\n };\n\n // Pseudo-Mersenne prime\n function MPrime (name, p) {\n // P = 2 ^ N - K\n this.name = name;\n this.p = new BN(p, 16);\n this.n = this.p.bitLength();\n this.k = new BN(1).iushln(this.n).isub(this.p);\n\n this.tmp = this._tmp();\n }\n\n MPrime.prototype._tmp = function _tmp () {\n var tmp = new BN(null);\n tmp.words = new Array(Math.ceil(this.n / 13));\n return tmp;\n };\n\n MPrime.prototype.ireduce = function ireduce (num) {\n // Assumes that `num` is less than `P^2`\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n var r = num;\n var rlen;\n\n do {\n this.split(r, this.tmp);\n r = this.imulK(r);\n r = r.iadd(this.tmp);\n rlen = r.bitLength();\n } while (rlen > this.n);\n\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n if (cmp === 0) {\n r.words[0] = 0;\n r.length = 1;\n } else if (cmp > 0) {\n r.isub(this.p);\n } else {\n if (r.strip !== undefined) {\n // r is BN v4 instance\n r.strip();\n } else {\n // r is BN v5 instance\n r._strip();\n }\n }\n\n return r;\n };\n\n MPrime.prototype.split = function split (input, out) {\n input.iushrn(this.n, 0, out);\n };\n\n MPrime.prototype.imulK = function imulK (num) {\n return num.imul(this.k);\n };\n\n function K256 () {\n MPrime.call(\n this,\n 'k256',\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n }\n inherits(K256, MPrime);\n\n K256.prototype.split = function split (input, output) {\n // 256 = 9 * 26 + 22\n var mask = 0x3fffff;\n\n var outLen = Math.min(input.length, 9);\n for (var i = 0; i < outLen; i++) {\n output.words[i] = input.words[i];\n }\n output.length = outLen;\n\n if (input.length <= 9) {\n input.words[0] = 0;\n input.length = 1;\n return;\n }\n\n // Shift by 9 limbs\n var prev = input.words[9];\n output.words[output.length++] = prev & mask;\n\n for (i = 10; i < input.length; i++) {\n var next = input.words[i] | 0;\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\n prev = next;\n }\n prev >>>= 22;\n input.words[i - 10] = prev;\n if (prev === 0 && input.length > 10) {\n input.length -= 10;\n } else {\n input.length -= 9;\n }\n };\n\n K256.prototype.imulK = function imulK (num) {\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n num.words[num.length] = 0;\n num.words[num.length + 1] = 0;\n num.length += 2;\n\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n var lo = 0;\n for (var i = 0; i < num.length; i++) {\n var w = num.words[i] | 0;\n lo += w * 0x3d1;\n num.words[i] = lo & 0x3ffffff;\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\n }\n\n // Fast length reduction\n if (num.words[num.length - 1] === 0) {\n num.length--;\n if (num.words[num.length - 1] === 0) {\n num.length--;\n }\n }\n return num;\n };\n\n function P224 () {\n MPrime.call(\n this,\n 'p224',\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n }\n inherits(P224, MPrime);\n\n function P192 () {\n MPrime.call(\n this,\n 'p192',\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n }\n inherits(P192, MPrime);\n\n function P25519 () {\n // 2 ^ 255 - 19\n MPrime.call(\n this,\n '25519',\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n }\n inherits(P25519, MPrime);\n\n P25519.prototype.imulK = function imulK (num) {\n // K = 0x13\n var carry = 0;\n for (var i = 0; i < num.length; i++) {\n var hi = (num.words[i] | 0) * 0x13 + carry;\n var lo = hi & 0x3ffffff;\n hi >>>= 26;\n\n num.words[i] = lo;\n carry = hi;\n }\n if (carry !== 0) {\n num.words[num.length++] = carry;\n }\n return num;\n };\n\n // Exported mostly for testing purposes, use plain name instead\n BN._prime = function prime (name) {\n // Cached version of prime\n if (primes[name]) return primes[name];\n\n var prime;\n if (name === 'k256') {\n prime = new K256();\n } else if (name === 'p224') {\n prime = new P224();\n } else if (name === 'p192') {\n prime = new P192();\n } else if (name === 'p25519') {\n prime = new P25519();\n } else {\n throw new Error('Unknown prime ' + name);\n }\n primes[name] = prime;\n\n return prime;\n };\n\n //\n // Base reduction engine\n //\n function Red (m) {\n if (typeof m === 'string') {\n var prime = BN._prime(m);\n this.m = prime.p;\n this.prime = prime;\n } else {\n assert(m.gtn(1), 'modulus must be greater than 1');\n this.m = m;\n this.prime = null;\n }\n }\n\n Red.prototype._verify1 = function _verify1 (a) {\n assert(a.negative === 0, 'red works only with positives');\n assert(a.red, 'red works only with red numbers');\n };\n\n Red.prototype._verify2 = function _verify2 (a, b) {\n assert((a.negative | b.negative) === 0, 'red works only with positives');\n assert(a.red && a.red === b.red,\n 'red works only with red numbers');\n };\n\n Red.prototype.imod = function imod (a) {\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n return a.umod(this.m)._forceRed(this);\n };\n\n Red.prototype.neg = function neg (a) {\n if (a.isZero()) {\n return a.clone();\n }\n\n return this.m.sub(a)._forceRed(this);\n };\n\n Red.prototype.add = function add (a, b) {\n this._verify2(a, b);\n\n var res = a.add(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.iadd = function iadd (a, b) {\n this._verify2(a, b);\n\n var res = a.iadd(b);\n if (res.cmp(this.m) >= 0) {\n res.isub(this.m);\n }\n return res;\n };\n\n Red.prototype.sub = function sub (a, b) {\n this._verify2(a, b);\n\n var res = a.sub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res._forceRed(this);\n };\n\n Red.prototype.isub = function isub (a, b) {\n this._verify2(a, b);\n\n var res = a.isub(b);\n if (res.cmpn(0) < 0) {\n res.iadd(this.m);\n }\n return res;\n };\n\n Red.prototype.shl = function shl (a, num) {\n this._verify1(a);\n return this.imod(a.ushln(num));\n };\n\n Red.prototype.imul = function imul (a, b) {\n this._verify2(a, b);\n return this.imod(a.imul(b));\n };\n\n Red.prototype.mul = function mul (a, b) {\n this._verify2(a, b);\n return this.imod(a.mul(b));\n };\n\n Red.prototype.isqr = function isqr (a) {\n return this.imul(a, a.clone());\n };\n\n Red.prototype.sqr = function sqr (a) {\n return this.mul(a, a);\n };\n\n Red.prototype.sqrt = function sqrt (a) {\n if (a.isZero()) return a.clone();\n\n var mod3 = this.m.andln(3);\n assert(mod3 % 2 === 1);\n\n // Fast case\n if (mod3 === 3) {\n var pow = this.m.add(new BN(1)).iushrn(2);\n return this.pow(a, pow);\n }\n\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n //\n // Find Q and S, that Q * 2 ^ S = (P - 1)\n var q = this.m.subn(1);\n var s = 0;\n while (!q.isZero() && q.andln(1) === 0) {\n s++;\n q.iushrn(1);\n }\n assert(!q.isZero());\n\n var one = new BN(1).toRed(this);\n var nOne = one.redNeg();\n\n // Find quadratic non-residue\n // NOTE: Max is such because of generalized Riemann hypothesis.\n var lpow = this.m.subn(1).iushrn(1);\n var z = this.m.bitLength();\n z = new BN(2 * z * z).toRed(this);\n\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\n z.redIAdd(nOne);\n }\n\n var c = this.pow(z, q);\n var r = this.pow(a, q.addn(1).iushrn(1));\n var t = this.pow(a, q);\n var m = s;\n while (t.cmp(one) !== 0) {\n var tmp = t;\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\n tmp = tmp.redSqr();\n }\n assert(i < m);\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\n\n r = r.redMul(b);\n c = b.redSqr();\n t = t.redMul(c);\n m = i;\n }\n\n return r;\n };\n\n Red.prototype.invm = function invm (a) {\n var inv = a._invmp(this.m);\n if (inv.negative !== 0) {\n inv.negative = 0;\n return this.imod(inv).redNeg();\n } else {\n return this.imod(inv);\n }\n };\n\n Red.prototype.pow = function pow (a, num) {\n if (num.isZero()) return new BN(1).toRed(this);\n if (num.cmpn(1) === 0) return a.clone();\n\n var windowSize = 4;\n var wnd = new Array(1 << windowSize);\n wnd[0] = new BN(1).toRed(this);\n wnd[1] = a;\n for (var i = 2; i < wnd.length; i++) {\n wnd[i] = this.mul(wnd[i - 1], a);\n }\n\n var res = wnd[0];\n var current = 0;\n var currentLen = 0;\n var start = num.bitLength() % 26;\n if (start === 0) {\n start = 26;\n }\n\n for (i = num.length - 1; i >= 0; i--) {\n var word = num.words[i];\n for (var j = start - 1; j >= 0; j--) {\n var bit = (word >> j) & 1;\n if (res !== wnd[0]) {\n res = this.sqr(res);\n }\n\n if (bit === 0 && current === 0) {\n currentLen = 0;\n continue;\n }\n\n current <<= 1;\n current |= bit;\n currentLen++;\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n\n res = this.mul(res, wnd[current]);\n currentLen = 0;\n current = 0;\n }\n start = 26;\n }\n\n return res;\n };\n\n Red.prototype.convertTo = function convertTo (num) {\n var r = num.umod(this.m);\n\n return r === num ? r.clone() : r;\n };\n\n Red.prototype.convertFrom = function convertFrom (num) {\n var res = num.clone();\n res.red = null;\n return res;\n };\n\n //\n // Montgomery method engine\n //\n\n BN.mont = function mont (num) {\n return new Mont(num);\n };\n\n function Mont (m) {\n Red.call(this, m);\n\n this.shift = this.m.bitLength();\n if (this.shift % 26 !== 0) {\n this.shift += 26 - (this.shift % 26);\n }\n\n this.r = new BN(1).iushln(this.shift);\n this.r2 = this.imod(this.r.sqr());\n this.rinv = this.r._invmp(this.m);\n\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n this.minv = this.minv.umod(this.r);\n this.minv = this.r.sub(this.minv);\n }\n inherits(Mont, Red);\n\n Mont.prototype.convertTo = function convertTo (num) {\n return this.imod(num.ushln(this.shift));\n };\n\n Mont.prototype.convertFrom = function convertFrom (num) {\n var r = this.imod(num.mul(this.rinv));\n r.red = null;\n return r;\n };\n\n Mont.prototype.imul = function imul (a, b) {\n if (a.isZero() || b.isZero()) {\n a.words[0] = 0;\n a.length = 1;\n return a;\n }\n\n var t = a.imul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.mul = function mul (a, b) {\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n\n var t = a.mul(b);\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n var u = t.isub(c).iushrn(this.shift);\n var res = u;\n if (u.cmp(this.m) >= 0) {\n res = u.isub(this.m);\n } else if (u.cmpn(0) < 0) {\n res = u.iadd(this.m);\n }\n\n return res._forceRed(this);\n };\n\n Mont.prototype.invm = function invm (a) {\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n var res = this.imod(a._invmp(this.m).mul(this.r2));\n return res._forceRed(this);\n };\n})(typeof module === 'undefined' || module, this);\n","var r;\n\nmodule.exports = function rand(len) {\n if (!r)\n r = new Rand(null);\n\n return r.generate(len);\n};\n\nfunction Rand(rand) {\n this.rand = rand;\n}\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n return this._rand(len);\n};\n\n// Emulate crypto API using randy\nRand.prototype._rand = function _rand(n) {\n if (this.rand.getBytes)\n return this.rand.getBytes(n);\n\n var res = new Uint8Array(n);\n for (var i = 0; i < res.length; i++)\n res[i] = this.rand.getByte();\n return res;\n};\n\nif (typeof self === 'object') {\n if (self.crypto && self.crypto.getRandomValues) {\n // Modern browsers\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.crypto.getRandomValues(arr);\n return arr;\n };\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n // IE\n Rand.prototype._rand = function _rand(n) {\n var arr = new Uint8Array(n);\n self.msCrypto.getRandomValues(arr);\n return arr;\n };\n\n // Safari's WebWorkers do not have `crypto`\n } else if (typeof window === 'object') {\n // Old junk\n Rand.prototype._rand = function() {\n throw new Error('Not implemented yet');\n };\n }\n} else {\n // Node.js or Web worker with no crypto support\n try {\n var crypto = require('crypto');\n if (typeof crypto.randomBytes !== 'function')\n throw new Error('Not supported');\n\n Rand.prototype._rand = function _rand(n) {\n return crypto.randomBytes(n);\n };\n } catch (e) {\n }\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\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 '<Buffer ' + str + '>'\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');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\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\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\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","'use strict';\n\nfunction withIs(Class, { className, symbolName }) {\n const symbol = Symbol.for(symbolName);\n\n const ClassIsWrapper = {\n // The code below assigns the class wrapper to an object to trick\n // JavaScript engines to show the name of the extended class when\n // logging an instances.\n // We are assigning an anonymous class (class wrapper) to the object\n // with key `className` to keep the correct name.\n // If this is not supported it falls back to logging `ClassIsWrapper`.\n [className]: class extends Class {\n constructor(...args) {\n super(...args);\n Object.defineProperty(this, symbol, { value: true });\n }\n\n get [Symbol.toStringTag]() {\n return className;\n }\n },\n }[className];\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nfunction withIsProto(Class, { className, symbolName, withoutNew }) {\n const symbol = Symbol.for(symbolName);\n\n /* eslint-disable object-shorthand */\n const ClassIsWrapper = {\n [className]: function (...args) {\n if (withoutNew && !(this instanceof ClassIsWrapper)) {\n return new ClassIsWrapper(...args);\n }\n\n const _this = Class.call(this, ...args) || this;\n\n if (_this && !_this[symbol]) {\n Object.defineProperty(_this, symbol, { value: true });\n }\n\n return _this;\n },\n }[className];\n /* eslint-enable object-shorthand */\n\n ClassIsWrapper.prototype = Object.create(Class.prototype);\n ClassIsWrapper.prototype.constructor = ClassIsWrapper;\n\n Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {\n get() {\n return className;\n },\n });\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nmodule.exports = withIs;\nmodule.exports.proto = withIsProto;\n","'use strict';\nconst os = require('os');\n\nconst extractPathRegex = /\\s+at.*(?:\\(|\\s)(.*)\\)?/;\nconst pathRegex = /^(?:(?:(?:node|(?:internal\\/[\\w/]*|.*node_modules\\/(?:babel-polyfill|pirates)\\/.*)?\\w+)\\.js:\\d+:\\d+)|native)/;\nconst homeDir = typeof os.homedir === 'undefined' ? '' : os.homedir();\n\nmodule.exports = (stack, options) => {\n\toptions = Object.assign({pretty: false}, options);\n\n\treturn stack.replace(/\\\\/g, '/')\n\t\t.split('\\n')\n\t\t.filter(line => {\n\t\t\tconst pathMatches = line.match(extractPathRegex);\n\t\t\tif (pathMatches === null || !pathMatches[1]) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst match = pathMatches[1];\n\n\t\t\t// Electron\n\t\t\tif (\n\t\t\t\tmatch.includes('.app/Contents/Resources/electron.asar') ||\n\t\t\t\tmatch.includes('.app/Contents/Resources/default_app.asar')\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !pathRegex.test(match);\n\t\t})\n\t\t.filter(line => line.trim() !== '')\n\t\t.map(line => {\n\t\t\tif (options.pretty) {\n\t\t\t\treturn line.replace(extractPathRegex, (m, p1) => m.replace(p1, p1.replace(homeDir, '~')));\n\t\t\t}\n\n\t\t\treturn line;\n\t\t})\n\t\t.join('\\n');\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.substr(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 keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\n/**\n * Custom implementation of a double ended queue.\n */\nfunction Denque(array, options) {\n var options = options || {};\n\n this._head = 0;\n this._tail = 0;\n this._capacity = options.capacity;\n this._capacityMask = 0x3;\n this._list = new Array(4);\n if (Array.isArray(array)) {\n this._fromArray(array);\n }\n}\n\n/**\n * -------------\n * PUBLIC API\n * -------------\n */\n\n/**\n * Returns the item at the specified index from the list.\n * 0 is the first element, 1 is the second, and so on...\n * Elements at negative values are that many from the end: -1 is one before the end\n * (the last element), -2 is two before the end (one before last), etc.\n * @param index\n * @returns {*}\n */\nDenque.prototype.peekAt = function peekAt(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var len = this.size();\n if (i >= len || i < -len) return undefined;\n if (i < 0) i += len;\n i = (this._head + i) & this._capacityMask;\n return this._list[i];\n};\n\n/**\n * Alias for peekAt()\n * @param i\n * @returns {*}\n */\nDenque.prototype.get = function get(i) {\n return this.peekAt(i);\n};\n\n/**\n * Returns the first item in the list without removing it.\n * @returns {*}\n */\nDenque.prototype.peek = function peek() {\n if (this._head === this._tail) return undefined;\n return this._list[this._head];\n};\n\n/**\n * Alias for peek()\n * @returns {*}\n */\nDenque.prototype.peekFront = function peekFront() {\n return this.peek();\n};\n\n/**\n * Returns the item that is at the back of the queue without removing it.\n * Uses peekAt(-1)\n */\nDenque.prototype.peekBack = function peekBack() {\n return this.peekAt(-1);\n};\n\n/**\n * Returns the current length of the queue\n * @return {Number}\n */\nObject.defineProperty(Denque.prototype, 'length', {\n get: function length() {\n return this.size();\n }\n});\n\n/**\n * Return the number of items on the list, or 0 if empty.\n * @returns {number}\n */\nDenque.prototype.size = function size() {\n if (this._head === this._tail) return 0;\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Add an item at the beginning of the list.\n * @param item\n */\nDenque.prototype.unshift = function unshift(item) {\n if (item === undefined) return this.size();\n var len = this._list.length;\n this._head = (this._head - 1 + len) & this._capacityMask;\n this._list[this._head] = item;\n if (this._tail === this._head) this._growArray();\n if (this._capacity && this.size() > this._capacity) this.pop();\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the first item on the list,\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.shift = function shift() {\n var head = this._head;\n if (head === this._tail) return undefined;\n var item = this._list[head];\n this._list[head] = undefined;\n this._head = (head + 1) & this._capacityMask;\n if (head < 2 && this._tail > 10000 && this._tail <= this._list.length >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Add an item to the bottom of the list.\n * @param item\n */\nDenque.prototype.push = function push(item) {\n if (item === undefined) return this.size();\n var tail = this._tail;\n this._list[tail] = item;\n this._tail = (tail + 1) & this._capacityMask;\n if (this._tail === this._head) {\n this._growArray();\n }\n if (this._capacity && this.size() > this._capacity) {\n this.shift();\n }\n if (this._head < this._tail) return this._tail - this._head;\n else return this._capacityMask + 1 - (this._head - this._tail);\n};\n\n/**\n * Remove and return the last item on the list.\n * Returns undefined if the list is empty.\n * @returns {*}\n */\nDenque.prototype.pop = function pop() {\n var tail = this._tail;\n if (tail === this._head) return undefined;\n var len = this._list.length;\n this._tail = (tail - 1 + len) & this._capacityMask;\n var item = this._list[this._tail];\n this._list[this._tail] = undefined;\n if (this._head < 2 && tail > 10000 && tail <= len >>> 2) this._shrinkArray();\n return item;\n};\n\n/**\n * Remove and return the item at the specified index from the list.\n * Returns undefined if the list is empty.\n * @param index\n * @returns {*}\n */\nDenque.prototype.removeOne = function removeOne(index) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size) return void 0;\n if (i < 0) i += size;\n i = (this._head + i) & this._capacityMask;\n var item = this._list[i];\n var k;\n if (index < size / 2) {\n for (k = index; k > 0; k--) {\n this._list[i] = this._list[i = (i - 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._head = (this._head + 1 + len) & this._capacityMask;\n } else {\n for (k = size - 1 - index; k > 0; k--) {\n this._list[i] = this._list[i = ( i + 1 + len) & this._capacityMask];\n }\n this._list[i] = void 0;\n this._tail = (this._tail - 1 + len) & this._capacityMask;\n }\n return item;\n};\n\n/**\n * Remove number of items from the specified index from the list.\n * Returns array of removed items.\n * Returns undefined if the list is empty.\n * @param index\n * @param count\n * @returns {array}\n */\nDenque.prototype.remove = function remove(index, count) {\n var i = index;\n var removed;\n var del_count = count;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n if (this._head === this._tail) return void 0;\n var size = this.size();\n var len = this._list.length;\n if (i >= size || i < -size || count < 1) return void 0;\n if (i < 0) i += size;\n if (count === 1 || !count) {\n removed = new Array(1);\n removed[0] = this.removeOne(i);\n return removed;\n }\n if (i === 0 && i + count >= size) {\n removed = this.toArray();\n this.clear();\n return removed;\n }\n if (i + count > size) count = size - i;\n var k;\n removed = new Array(count);\n for (k = 0; k < count; k++) {\n removed[k] = this._list[(this._head + i + k) & this._capacityMask];\n }\n i = (this._head + i) & this._capacityMask;\n if (index + count === size) {\n this._tail = (this._tail - count + len) & this._capacityMask;\n for (k = count; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (index === 0) {\n this._head = (this._head + count + len) & this._capacityMask;\n for (k = count - 1; k > 0; k--) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n }\n return removed;\n }\n if (i < size / 2) {\n this._head = (this._head + index + count + len) & this._capacityMask;\n for (k = index; k > 0; k--) {\n this.unshift(this._list[i = (i - 1 + len) & this._capacityMask]);\n }\n i = (this._head - 1 + len) & this._capacityMask;\n while (del_count > 0) {\n this._list[i = (i - 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n if (index < 0) this._tail = i;\n } else {\n this._tail = i;\n i = (i + count + len) & this._capacityMask;\n for (k = size - (count + index); k > 0; k--) {\n this.push(this._list[i++]);\n }\n i = this._tail;\n while (del_count > 0) {\n this._list[i = (i + 1 + len) & this._capacityMask] = void 0;\n del_count--;\n }\n }\n if (this._head < 2 && this._tail > 10000 && this._tail <= len >>> 2) this._shrinkArray();\n return removed;\n};\n\n/**\n * Native splice implementation.\n * Remove number of items from the specified index from the list and/or add new elements.\n * Returns array of removed items or empty array if count == 0.\n * Returns undefined if the list is empty.\n *\n * @param index\n * @param count\n * @param {...*} [elements]\n * @returns {array}\n */\nDenque.prototype.splice = function splice(index, count) {\n var i = index;\n // expect a number or return undefined\n if ((i !== (i | 0))) {\n return void 0;\n }\n var size = this.size();\n if (i < 0) i += size;\n if (i > size) return void 0;\n if (arguments.length > 2) {\n var k;\n var temp;\n var removed;\n var arg_len = arguments.length;\n var len = this._list.length;\n var arguments_index = 2;\n if (!size || i < size / 2) {\n temp = new Array(i);\n for (k = 0; k < i; k++) {\n temp[k] = this._list[(this._head + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i > 0) {\n this._head = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._head = (this._head + i + len) & this._capacityMask;\n }\n while (arg_len > arguments_index) {\n this.unshift(arguments[--arg_len]);\n }\n for (k = i; k > 0; k--) {\n this.unshift(temp[k - 1]);\n }\n } else {\n temp = new Array(size - (i + count));\n var leng = temp.length;\n for (k = 0; k < leng; k++) {\n temp[k] = this._list[(this._head + i + count + k) & this._capacityMask];\n }\n if (count === 0) {\n removed = [];\n if (i != size) {\n this._tail = (this._head + i + len) & this._capacityMask;\n }\n } else {\n removed = this.remove(i, count);\n this._tail = (this._tail - leng + len) & this._capacityMask;\n }\n while (arguments_index < arg_len) {\n this.push(arguments[arguments_index++]);\n }\n for (k = 0; k < leng; k++) {\n this.push(temp[k]);\n }\n }\n return removed;\n } else {\n return this.remove(i, count);\n }\n};\n\n/**\n * Soft clear - does not reset capacity.\n */\nDenque.prototype.clear = function clear() {\n this._head = 0;\n this._tail = 0;\n};\n\n/**\n * Returns true or false whether the list is empty.\n * @returns {boolean}\n */\nDenque.prototype.isEmpty = function isEmpty() {\n return this._head === this._tail;\n};\n\n/**\n * Returns an array of all queue items.\n * @returns {Array}\n */\nDenque.prototype.toArray = function toArray() {\n return this._copyArray(false);\n};\n\n/**\n * -------------\n * INTERNALS\n * -------------\n */\n\n/**\n * Fills the queue with items from an array\n * For use in the constructor\n * @param array\n * @private\n */\nDenque.prototype._fromArray = function _fromArray(array) {\n for (var i = 0; i < array.length; i++) this.push(array[i]);\n};\n\n/**\n *\n * @param fullCopy\n * @returns {Array}\n * @private\n */\nDenque.prototype._copyArray = function _copyArray(fullCopy) {\n var newArray = [];\n var list = this._list;\n var len = list.length;\n var i;\n if (fullCopy || this._head > this._tail) {\n for (i = this._head; i < len; i++) newArray.push(list[i]);\n for (i = 0; i < this._tail; i++) newArray.push(list[i]);\n } else {\n for (i = this._head; i < this._tail; i++) newArray.push(list[i]);\n }\n return newArray;\n};\n\n/**\n * Grows the internal list array.\n * @private\n */\nDenque.prototype._growArray = function _growArray() {\n if (this._head) {\n // copy existing data, head to end, then beginning to tail.\n this._list = this._copyArray(true);\n this._head = 0;\n }\n\n // head is at 0 and array is now full, safe to extend\n this._tail = this._list.length;\n\n this._list.length *= 2;\n this._capacityMask = (this._capacityMask << 1) | 1;\n};\n\n/**\n * Shrinks the internal list array.\n * @private\n */\nDenque.prototype._shrinkArray = function _shrinkArray() {\n this._list.length >>>= 1;\n this._capacityMask >>>= 1;\n};\n\n\nmodule.exports = Denque;\n","'use strict'\nconst debug = require('debug')\nconst log = debug('dns-over-http-resolver')\nlog.error = debug('dns-over-http-resolver:error')\n\nconst Receptacle = require('receptacle')\n\nconst utils = require('./utils')\n\n/**\n * DNS over HTTP resolver.\n * Uses a list of servers to resolve DNS records with HTTP requests.\n */\nclass Resolver {\n /**\n * @class\n * @param {object} [properties]\n * @param {number} [properties.maxCache = 100] - maximum number of cached dns records.\n */\n constructor ({ maxCache = 100 } = {}) {\n this._cache = new Receptacle({ max: maxCache })\n this._servers = [\n 'https://cloudflare-dns.com/dns-query',\n 'https://dns.google/resolve'\n ]\n }\n\n /**\n * Get an array of the IP addresses currently configured for DNS resolution.\n * These addresses are formatted according to RFC 5952. It can include a custom port.\n *\n * @returns {Array<string>}\n */\n getServers () {\n return this._servers\n }\n\n /**\n * Get a shuffled array of the IP addresses currently configured for DNS resolution.\n * These addresses are formatted according to RFC 5952. It can include a custom port.\n *\n * @returns {Array<string>}\n */\n _getShuffledServers () {\n const newServers = [].concat(this._servers)\n\n for (let i = newServers.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * i)\n const temp = newServers[i]\n newServers[i] = newServers[j]\n newServers[j] = temp\n }\n\n return newServers\n }\n\n /**\n * Sets the IP address and port of servers to be used when performing DNS resolution.\n *\n * @param {Array<string>} servers - array of RFC 5952 formatted addresses.\n */\n setServers (servers) {\n this._servers = servers\n }\n\n /**\n * Uses the DNS protocol to resolve the given host name into the appropriate DNS record.\n *\n * @param {string} hostname - host name to resolve.\n * @param {string} [rrType = 'A'] - resource record type.\n * @returns {Promise<*>}\n */\n resolve (hostname, rrType = 'A') {\n switch (rrType) {\n case 'A':\n return this.resolve4(hostname)\n case 'AAAA':\n return this.resolve6(hostname)\n case 'TXT':\n return this.resolveTxt(hostname)\n default:\n throw new Error(`${rrType} is not supported`)\n }\n }\n\n /**\n * Uses the DNS protocol to resolve the given host name into IPv4 addresses.\n *\n * @param {string} hostname - host name to resolve.\n * @returns {Promise<Array<string>>}\n */\n async resolve4 (hostname) {\n const recordType = 'A'\n const cached = this._cache.get(utils.getCacheKey(hostname, recordType))\n if (cached) {\n return cached\n }\n\n for (const server of this._getShuffledServers()) {\n try {\n const response = await utils.fetch(utils.buildResource({\n serverResolver: server,\n hostname,\n recordType\n }))\n\n const d = await response.json()\n const data = d.Answer.map(a => a.data)\n const ttl = Math.min(d.Answer.map(a => a.TTL))\n\n this._cache.set(utils.getCacheKey(hostname, recordType), data, { ttl })\n\n return data\n } catch (err) {\n log.error(`${server} could not resolve ${hostname} record ${recordType}`)\n }\n }\n\n throw new Error(`Could not resolve ${hostname} record ${recordType}`)\n }\n\n /**\n * Uses the DNS protocol to resolve the given host name into IPv6 addresses.\n *\n * @param {string} hostname - host name to resolve.\n * @returns {Promise<Array<string>>}\n */\n async resolve6 (hostname) {\n const recordType = 'AAAA'\n const cached = this._cache.get(utils.getCacheKey(hostname, recordType))\n if (cached) {\n return cached\n }\n\n for (const server of this._getShuffledServers()) {\n try {\n const response = await utils.fetch(utils.buildResource({\n serverResolver: server,\n hostname,\n recordType\n }))\n\n const d = await response.json()\n const data = d.Answer.map(a => a.data)\n const ttl = Math.min(d.Answer.map(a => a.TTL))\n\n this._cache.set(utils.getCacheKey(hostname, recordType), data, { ttl })\n\n return data\n } catch (err) {\n log.error(`${server} could not resolve ${hostname} record ${recordType}`)\n }\n }\n\n throw new Error(`Could not resolve ${hostname} record ${recordType}`)\n }\n\n /**\n * Uses the DNS protocol to resolve the given host name into a Text record.\n *\n * @param {string} hostname - host name to resolve.\n * @returns {Promise<Array<Array<string>>>}\n */\n async resolveTxt (hostname) {\n const recordType = 'TXT'\n const cached = this._cache.get(utils.getCacheKey(hostname, recordType))\n if (cached) {\n return cached\n }\n\n for (const server of this._getShuffledServers()) {\n try {\n const response = await utils.fetch(utils.buildResource({\n serverResolver: server,\n hostname,\n recordType\n }))\n\n const d = await response.json()\n const data = d.Answer.map(a => [a.data.replace(/['\"]+/g, '')])\n const ttl = Math.min(d.Answer.map(a => a.TTL))\n\n this._cache.set(utils.getCacheKey(hostname, recordType), data, { ttl })\n\n return data\n } catch (err) {\n log.error(`${server} could not resolve ${hostname} record ${recordType}`)\n }\n }\n\n throw new Error(`Could not resolve ${hostname} record ${recordType}`)\n }\n}\n\nResolver.Resolver = Resolver\nmodule.exports = Resolver\n","'use strict'\n\nconst { default: nativeFetch, Headers } = require('native-fetch')\n\n/**\n * Build fetch resource for request.\n *\n * @param {object} properties\n * @param {string} properties.serverResolver\n * @param {string} properties.hostname\n * @param {string} properties.recordType\n * @returns {string}\n */\nfunction buildResource ({ serverResolver, hostname, recordType }) {\n return `${serverResolver}?name=${hostname}&type=${recordType}`\n}\n\n/**\n * Use fetch to find the record.\n *\n * @param {object} resource\n * @returns {Promise}\n */\nfunction fetch (resource) {\n return nativeFetch(resource, {\n headers: new Headers({\n accept: 'application/dns-json'\n })\n })\n}\n\n/**\n * Creates cache key composed by recordType and hostname.\n *\n * @param {string} hostname\n * @param {string} recordType\n * @returns {string}\n */\nfunction getCacheKey (hostname, recordType) {\n return `${recordType}_${hostname}`\n}\n\nmodule.exports = {\n buildResource,\n fetch,\n getCacheKey\n}\n","'use strict'\n\nexports.toString = function (klass) {\n switch (klass) {\n case 1: return 'IN'\n case 2: return 'CS'\n case 3: return 'CH'\n case 4: return 'HS'\n case 255: return 'ANY'\n }\n return 'UNKNOWN_' + klass\n}\n\nexports.toClass = function (name) {\n switch (name.toUpperCase()) {\n case 'IN': return 1\n case 'CS': return 2\n case 'CH': return 3\n case 'HS': return 4\n case 'ANY': return 255\n }\n return 0\n}\n","'use strict'\n\nconst Buffer = require('buffer').Buffer\nconst types = require('./types')\nconst rcodes = require('./rcodes')\nconst opcodes = require('./opcodes')\nconst classes = require('./classes')\nconst optioncodes = require('./optioncodes')\nconst ip = require('@leichtgewicht/ip-codec')\n\nconst QUERY_FLAG = 0\nconst RESPONSE_FLAG = 1 << 15\nconst FLUSH_MASK = 1 << 15\nconst NOT_FLUSH_MASK = ~FLUSH_MASK\nconst QU_MASK = 1 << 15\nconst NOT_QU_MASK = ~QU_MASK\n\nconst name = exports.name = {}\n\nname.encode = function (str, buf, offset) {\n if (!buf) buf = Buffer.alloc(name.encodingLength(str))\n if (!offset) offset = 0\n const oldOffset = offset\n\n // strip leading and trailing .\n const n = str.replace(/^\\.|\\.$/gm, '')\n if (n.length) {\n const list = n.split('.')\n\n for (let i = 0; i < list.length; i++) {\n const len = buf.write(list[i], offset + 1)\n buf[offset] = len\n offset += len + 1\n }\n }\n\n buf[offset++] = 0\n\n name.encode.bytes = offset - oldOffset\n return buf\n}\n\nname.encode.bytes = 0\n\nname.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const list = []\n let oldOffset = offset\n let totalLength = 0\n let consumedBytes = 0\n let jumped = false\n\n while (true) {\n if (offset >= buf.length) {\n throw new Error('Cannot decode name (buffer overflow)')\n }\n const len = buf[offset++]\n consumedBytes += jumped ? 0 : 1\n\n if (len === 0) {\n break\n } else if ((len & 0xc0) === 0) {\n if (offset + len > buf.length) {\n throw new Error('Cannot decode name (buffer overflow)')\n }\n totalLength += len + 1\n if (totalLength > 254) {\n throw new Error('Cannot decode name (name too long)')\n }\n list.push(buf.toString('utf-8', offset, offset + len))\n offset += len\n consumedBytes += jumped ? 0 : len\n } else if ((len & 0xc0) === 0xc0) {\n if (offset + 1 > buf.length) {\n throw new Error('Cannot decode name (buffer overflow)')\n }\n const jumpOffset = buf.readUInt16BE(offset - 1) - 0xc000\n if (jumpOffset >= oldOffset) {\n // Allow only pointers to prior data. RFC 1035, section 4.1.4 states:\n // \"[...] an entire domain name or a list of labels at the end of a domain name\n // is replaced with a pointer to a prior occurance (sic) of the same name.\"\n throw new Error('Cannot decode name (bad pointer)')\n }\n offset = jumpOffset\n oldOffset = jumpOffset\n consumedBytes += jumped ? 0 : 1\n jumped = true\n } else {\n throw new Error('Cannot decode name (bad label)')\n }\n }\n\n name.decode.bytes = consumedBytes\n return list.length === 0 ? '.' : list.join('.')\n}\n\nname.decode.bytes = 0\n\nname.encodingLength = function (n) {\n if (n === '.' || n === '..') return 1\n return Buffer.byteLength(n.replace(/^\\.|\\.$/gm, '')) + 2\n}\n\nconst string = {}\n\nstring.encode = function (s, buf, offset) {\n if (!buf) buf = Buffer.alloc(string.encodingLength(s))\n if (!offset) offset = 0\n\n const len = buf.write(s, offset + 1)\n buf[offset] = len\n string.encode.bytes = len + 1\n return buf\n}\n\nstring.encode.bytes = 0\n\nstring.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const len = buf[offset]\n const s = buf.toString('utf-8', offset + 1, offset + 1 + len)\n string.decode.bytes = len + 1\n return s\n}\n\nstring.decode.bytes = 0\n\nstring.encodingLength = function (s) {\n return Buffer.byteLength(s) + 1\n}\n\nconst header = {}\n\nheader.encode = function (h, buf, offset) {\n if (!buf) buf = header.encodingLength(h)\n if (!offset) offset = 0\n\n const flags = (h.flags || 0) & 32767\n const type = h.type === 'response' ? RESPONSE_FLAG : QUERY_FLAG\n\n buf.writeUInt16BE(h.id || 0, offset)\n buf.writeUInt16BE(flags | type, offset + 2)\n buf.writeUInt16BE(h.questions.length, offset + 4)\n buf.writeUInt16BE(h.answers.length, offset + 6)\n buf.writeUInt16BE(h.authorities.length, offset + 8)\n buf.writeUInt16BE(h.additionals.length, offset + 10)\n\n return buf\n}\n\nheader.encode.bytes = 12\n\nheader.decode = function (buf, offset) {\n if (!offset) offset = 0\n if (buf.length < 12) throw new Error('Header must be 12 bytes')\n const flags = buf.readUInt16BE(offset + 2)\n\n return {\n id: buf.readUInt16BE(offset),\n type: flags & RESPONSE_FLAG ? 'response' : 'query',\n flags: flags & 32767,\n flag_qr: ((flags >> 15) & 0x1) === 1,\n opcode: opcodes.toString((flags >> 11) & 0xf),\n flag_aa: ((flags >> 10) & 0x1) === 1,\n flag_tc: ((flags >> 9) & 0x1) === 1,\n flag_rd: ((flags >> 8) & 0x1) === 1,\n flag_ra: ((flags >> 7) & 0x1) === 1,\n flag_z: ((flags >> 6) & 0x1) === 1,\n flag_ad: ((flags >> 5) & 0x1) === 1,\n flag_cd: ((flags >> 4) & 0x1) === 1,\n rcode: rcodes.toString(flags & 0xf),\n questions: new Array(buf.readUInt16BE(offset + 4)),\n answers: new Array(buf.readUInt16BE(offset + 6)),\n authorities: new Array(buf.readUInt16BE(offset + 8)),\n additionals: new Array(buf.readUInt16BE(offset + 10))\n }\n}\n\nheader.decode.bytes = 12\n\nheader.encodingLength = function () {\n return 12\n}\n\nconst runknown = exports.unknown = {}\n\nrunknown.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(runknown.encodingLength(data))\n if (!offset) offset = 0\n\n buf.writeUInt16BE(data.length, offset)\n data.copy(buf, offset + 2)\n\n runknown.encode.bytes = data.length + 2\n return buf\n}\n\nrunknown.encode.bytes = 0\n\nrunknown.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const len = buf.readUInt16BE(offset)\n const data = buf.slice(offset + 2, offset + 2 + len)\n runknown.decode.bytes = len + 2\n return data\n}\n\nrunknown.decode.bytes = 0\n\nrunknown.encodingLength = function (data) {\n return data.length + 2\n}\n\nconst rns = exports.ns = {}\n\nrns.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rns.encodingLength(data))\n if (!offset) offset = 0\n\n name.encode(data, buf, offset + 2)\n buf.writeUInt16BE(name.encode.bytes, offset)\n rns.encode.bytes = name.encode.bytes + 2\n return buf\n}\n\nrns.encode.bytes = 0\n\nrns.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const len = buf.readUInt16BE(offset)\n const dd = name.decode(buf, offset + 2)\n\n rns.decode.bytes = len + 2\n return dd\n}\n\nrns.decode.bytes = 0\n\nrns.encodingLength = function (data) {\n return name.encodingLength(data) + 2\n}\n\nconst rsoa = exports.soa = {}\n\nrsoa.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rsoa.encodingLength(data))\n if (!offset) offset = 0\n\n const oldOffset = offset\n offset += 2\n name.encode(data.mname, buf, offset)\n offset += name.encode.bytes\n name.encode(data.rname, buf, offset)\n offset += name.encode.bytes\n buf.writeUInt32BE(data.serial || 0, offset)\n offset += 4\n buf.writeUInt32BE(data.refresh || 0, offset)\n offset += 4\n buf.writeUInt32BE(data.retry || 0, offset)\n offset += 4\n buf.writeUInt32BE(data.expire || 0, offset)\n offset += 4\n buf.writeUInt32BE(data.minimum || 0, offset)\n offset += 4\n\n buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n rsoa.encode.bytes = offset - oldOffset\n return buf\n}\n\nrsoa.encode.bytes = 0\n\nrsoa.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const oldOffset = offset\n\n const data = {}\n offset += 2\n data.mname = name.decode(buf, offset)\n offset += name.decode.bytes\n data.rname = name.decode(buf, offset)\n offset += name.decode.bytes\n data.serial = buf.readUInt32BE(offset)\n offset += 4\n data.refresh = buf.readUInt32BE(offset)\n offset += 4\n data.retry = buf.readUInt32BE(offset)\n offset += 4\n data.expire = buf.readUInt32BE(offset)\n offset += 4\n data.minimum = buf.readUInt32BE(offset)\n offset += 4\n\n rsoa.decode.bytes = offset - oldOffset\n return data\n}\n\nrsoa.decode.bytes = 0\n\nrsoa.encodingLength = function (data) {\n return 22 + name.encodingLength(data.mname) + name.encodingLength(data.rname)\n}\n\nconst rtxt = exports.txt = {}\n\nrtxt.encode = function (data, buf, offset) {\n if (!Array.isArray(data)) data = [data]\n for (let i = 0; i < data.length; i++) {\n if (typeof data[i] === 'string') {\n data[i] = Buffer.from(data[i])\n }\n if (!Buffer.isBuffer(data[i])) {\n throw new Error('Must be a Buffer')\n }\n }\n\n if (!buf) buf = Buffer.alloc(rtxt.encodingLength(data))\n if (!offset) offset = 0\n\n const oldOffset = offset\n offset += 2\n\n data.forEach(function (d) {\n buf[offset++] = d.length\n d.copy(buf, offset, 0, d.length)\n offset += d.length\n })\n\n buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n rtxt.encode.bytes = offset - oldOffset\n return buf\n}\n\nrtxt.encode.bytes = 0\n\nrtxt.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n let remaining = buf.readUInt16BE(offset)\n offset += 2\n\n let data = []\n while (remaining > 0) {\n const len = buf[offset++]\n --remaining\n if (remaining < len) {\n throw new Error('Buffer overflow')\n }\n data.push(buf.slice(offset, offset + len))\n offset += len\n remaining -= len\n }\n\n rtxt.decode.bytes = offset - oldOffset\n return data\n}\n\nrtxt.decode.bytes = 0\n\nrtxt.encodingLength = function (data) {\n if (!Array.isArray(data)) data = [data]\n let length = 2\n data.forEach(function (buf) {\n if (typeof buf === 'string') {\n length += Buffer.byteLength(buf) + 1\n } else {\n length += buf.length + 1\n }\n })\n return length\n}\n\nconst rnull = exports.null = {}\n\nrnull.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rnull.encodingLength(data))\n if (!offset) offset = 0\n\n if (typeof data === 'string') data = Buffer.from(data)\n if (!data) data = Buffer.alloc(0)\n\n const oldOffset = offset\n offset += 2\n\n const len = data.length\n data.copy(buf, offset, 0, len)\n offset += len\n\n buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n rnull.encode.bytes = offset - oldOffset\n return buf\n}\n\nrnull.encode.bytes = 0\n\nrnull.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n const len = buf.readUInt16BE(offset)\n\n offset += 2\n\n const data = buf.slice(offset, offset + len)\n offset += len\n\n rnull.decode.bytes = offset - oldOffset\n return data\n}\n\nrnull.decode.bytes = 0\n\nrnull.encodingLength = function (data) {\n if (!data) return 2\n return (Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data)) + 2\n}\n\nconst rhinfo = exports.hinfo = {}\n\nrhinfo.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rhinfo.encodingLength(data))\n if (!offset) offset = 0\n\n const oldOffset = offset\n offset += 2\n string.encode(data.cpu, buf, offset)\n offset += string.encode.bytes\n string.encode(data.os, buf, offset)\n offset += string.encode.bytes\n buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n rhinfo.encode.bytes = offset - oldOffset\n return buf\n}\n\nrhinfo.encode.bytes = 0\n\nrhinfo.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const oldOffset = offset\n\n const data = {}\n offset += 2\n data.cpu = string.decode(buf, offset)\n offset += string.decode.bytes\n data.os = string.decode(buf, offset)\n offset += string.decode.bytes\n rhinfo.decode.bytes = offset - oldOffset\n return data\n}\n\nrhinfo.decode.bytes = 0\n\nrhinfo.encodingLength = function (data) {\n return string.encodingLength(data.cpu) + string.encodingLength(data.os) + 2\n}\n\nconst rptr = exports.ptr = {}\nconst rcname = exports.cname = rptr\nconst rdname = exports.dname = rptr\n\nrptr.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rptr.encodingLength(data))\n if (!offset) offset = 0\n\n name.encode(data, buf, offset + 2)\n buf.writeUInt16BE(name.encode.bytes, offset)\n rptr.encode.bytes = name.encode.bytes + 2\n return buf\n}\n\nrptr.encode.bytes = 0\n\nrptr.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const data = name.decode(buf, offset + 2)\n rptr.decode.bytes = name.decode.bytes + 2\n return data\n}\n\nrptr.decode.bytes = 0\n\nrptr.encodingLength = function (data) {\n return name.encodingLength(data) + 2\n}\n\nconst rsrv = exports.srv = {}\n\nrsrv.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rsrv.encodingLength(data))\n if (!offset) offset = 0\n\n buf.writeUInt16BE(data.priority || 0, offset + 2)\n buf.writeUInt16BE(data.weight || 0, offset + 4)\n buf.writeUInt16BE(data.port || 0, offset + 6)\n name.encode(data.target, buf, offset + 8)\n\n const len = name.encode.bytes + 6\n buf.writeUInt16BE(len, offset)\n\n rsrv.encode.bytes = len + 2\n return buf\n}\n\nrsrv.encode.bytes = 0\n\nrsrv.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const len = buf.readUInt16BE(offset)\n\n const data = {}\n data.priority = buf.readUInt16BE(offset + 2)\n data.weight = buf.readUInt16BE(offset + 4)\n data.port = buf.readUInt16BE(offset + 6)\n data.target = name.decode(buf, offset + 8)\n\n rsrv.decode.bytes = len + 2\n return data\n}\n\nrsrv.decode.bytes = 0\n\nrsrv.encodingLength = function (data) {\n return 8 + name.encodingLength(data.target)\n}\n\nconst rcaa = exports.caa = {}\n\nrcaa.ISSUER_CRITICAL = 1 << 7\n\nrcaa.encode = function (data, buf, offset) {\n const len = rcaa.encodingLength(data)\n\n if (!buf) buf = Buffer.alloc(rcaa.encodingLength(data))\n if (!offset) offset = 0\n\n if (data.issuerCritical) {\n data.flags = rcaa.ISSUER_CRITICAL\n }\n\n buf.writeUInt16BE(len - 2, offset)\n offset += 2\n buf.writeUInt8(data.flags || 0, offset)\n offset += 1\n string.encode(data.tag, buf, offset)\n offset += string.encode.bytes\n buf.write(data.value, offset)\n offset += Buffer.byteLength(data.value)\n\n rcaa.encode.bytes = len\n return buf\n}\n\nrcaa.encode.bytes = 0\n\nrcaa.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const len = buf.readUInt16BE(offset)\n offset += 2\n\n const oldOffset = offset\n const data = {}\n data.flags = buf.readUInt8(offset)\n offset += 1\n data.tag = string.decode(buf, offset)\n offset += string.decode.bytes\n data.value = buf.toString('utf-8', offset, oldOffset + len)\n\n data.issuerCritical = !!(data.flags & rcaa.ISSUER_CRITICAL)\n\n rcaa.decode.bytes = len + 2\n\n return data\n}\n\nrcaa.decode.bytes = 0\n\nrcaa.encodingLength = function (data) {\n return string.encodingLength(data.tag) + string.encodingLength(data.value) + 2\n}\n\nconst rmx = exports.mx = {}\n\nrmx.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rmx.encodingLength(data))\n if (!offset) offset = 0\n\n const oldOffset = offset\n offset += 2\n buf.writeUInt16BE(data.preference || 0, offset)\n offset += 2\n name.encode(data.exchange, buf, offset)\n offset += name.encode.bytes\n\n buf.writeUInt16BE(offset - oldOffset - 2, oldOffset)\n rmx.encode.bytes = offset - oldOffset\n return buf\n}\n\nrmx.encode.bytes = 0\n\nrmx.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const oldOffset = offset\n\n const data = {}\n offset += 2\n data.preference = buf.readUInt16BE(offset)\n offset += 2\n data.exchange = name.decode(buf, offset)\n offset += name.decode.bytes\n\n rmx.decode.bytes = offset - oldOffset\n return data\n}\n\nrmx.encodingLength = function (data) {\n return 4 + name.encodingLength(data.exchange)\n}\n\nconst ra = exports.a = {}\n\nra.encode = function (host, buf, offset) {\n if (!buf) buf = Buffer.alloc(ra.encodingLength(host))\n if (!offset) offset = 0\n\n buf.writeUInt16BE(4, offset)\n offset += 2\n ip.v4.encode(host, buf, offset)\n ra.encode.bytes = 6\n return buf\n}\n\nra.encode.bytes = 0\n\nra.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n offset += 2\n const host = ip.v4.decode(buf, offset)\n ra.decode.bytes = 6\n return host\n}\n\nra.decode.bytes = 0\n\nra.encodingLength = function () {\n return 6\n}\n\nconst raaaa = exports.aaaa = {}\n\nraaaa.encode = function (host, buf, offset) {\n if (!buf) buf = Buffer.alloc(raaaa.encodingLength(host))\n if (!offset) offset = 0\n\n buf.writeUInt16BE(16, offset)\n offset += 2\n ip.v6.encode(host, buf, offset)\n raaaa.encode.bytes = 18\n return buf\n}\n\nraaaa.encode.bytes = 0\n\nraaaa.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n offset += 2\n const host = ip.v6.decode(buf, offset)\n raaaa.decode.bytes = 18\n return host\n}\n\nraaaa.decode.bytes = 0\n\nraaaa.encodingLength = function () {\n return 18\n}\n\nconst roption = exports.option = {}\n\nroption.encode = function (option, buf, offset) {\n if (!buf) buf = Buffer.alloc(roption.encodingLength(option))\n if (!offset) offset = 0\n const oldOffset = offset\n\n const code = optioncodes.toCode(option.code)\n buf.writeUInt16BE(code, offset)\n offset += 2\n if (option.data) {\n buf.writeUInt16BE(option.data.length, offset)\n offset += 2\n option.data.copy(buf, offset)\n offset += option.data.length\n } else {\n switch (code) {\n // case 3: NSID. No encode makes sense.\n // case 5,6,7: Not implementable\n case 8: // ECS\n // note: do IP math before calling\n const spl = option.sourcePrefixLength || 0\n const fam = option.family || ip.familyOf(option.ip)\n const ipBuf = ip.encode(option.ip, Buffer.alloc)\n const ipLen = Math.ceil(spl / 8)\n buf.writeUInt16BE(ipLen + 4, offset)\n offset += 2\n buf.writeUInt16BE(fam, offset)\n offset += 2\n buf.writeUInt8(spl, offset++)\n buf.writeUInt8(option.scopePrefixLength || 0, offset++)\n\n ipBuf.copy(buf, offset, 0, ipLen)\n offset += ipLen\n break\n // case 9: EXPIRE (experimental)\n // case 10: COOKIE. No encode makes sense.\n case 11: // KEEP-ALIVE\n if (option.timeout) {\n buf.writeUInt16BE(2, offset)\n offset += 2\n buf.writeUInt16BE(option.timeout, offset)\n offset += 2\n } else {\n buf.writeUInt16BE(0, offset)\n offset += 2\n }\n break\n case 12: // PADDING\n const len = option.length || 0\n buf.writeUInt16BE(len, offset)\n offset += 2\n buf.fill(0, offset, offset + len)\n offset += len\n break\n // case 13: CHAIN. Experimental.\n case 14: // KEY-TAG\n const tagsLen = option.tags.length * 2\n buf.writeUInt16BE(tagsLen, offset)\n offset += 2\n for (const tag of option.tags) {\n buf.writeUInt16BE(tag, offset)\n offset += 2\n }\n break\n default:\n throw new Error(`Unknown roption code: ${option.code}`)\n }\n }\n\n roption.encode.bytes = offset - oldOffset\n return buf\n}\n\nroption.encode.bytes = 0\n\nroption.decode = function (buf, offset) {\n if (!offset) offset = 0\n const option = {}\n option.code = buf.readUInt16BE(offset)\n option.type = optioncodes.toString(option.code)\n offset += 2\n const len = buf.readUInt16BE(offset)\n offset += 2\n option.data = buf.slice(offset, offset + len)\n switch (option.code) {\n // case 3: NSID. No decode makes sense.\n case 8: // ECS\n option.family = buf.readUInt16BE(offset)\n offset += 2\n option.sourcePrefixLength = buf.readUInt8(offset++)\n option.scopePrefixLength = buf.readUInt8(offset++)\n const padded = Buffer.alloc((option.family === 1) ? 4 : 16)\n buf.copy(padded, 0, offset, offset + len - 4)\n option.ip = ip.decode(padded)\n break\n // case 12: Padding. No decode makes sense.\n case 11: // KEEP-ALIVE\n if (len > 0) {\n option.timeout = buf.readUInt16BE(offset)\n offset += 2\n }\n break\n case 14:\n option.tags = []\n for (let i = 0; i < len; i += 2) {\n option.tags.push(buf.readUInt16BE(offset))\n offset += 2\n }\n // don't worry about default. caller will use data if desired\n }\n\n roption.decode.bytes = len + 4\n return option\n}\n\nroption.decode.bytes = 0\n\nroption.encodingLength = function (option) {\n if (option.data) {\n return option.data.length + 4\n }\n const code = optioncodes.toCode(option.code)\n switch (code) {\n case 8: // ECS\n const spl = option.sourcePrefixLength || 0\n return Math.ceil(spl / 8) + 8\n case 11: // KEEP-ALIVE\n return (typeof option.timeout === 'number') ? 6 : 4\n case 12: // PADDING\n return option.length + 4\n case 14: // KEY-TAG\n return 4 + (option.tags.length * 2)\n }\n throw new Error(`Unknown roption code: ${option.code}`)\n}\n\nconst ropt = exports.opt = {}\n\nropt.encode = function (options, buf, offset) {\n if (!buf) buf = Buffer.alloc(ropt.encodingLength(options))\n if (!offset) offset = 0\n const oldOffset = offset\n\n const rdlen = encodingLengthList(options, roption)\n buf.writeUInt16BE(rdlen, offset)\n offset = encodeList(options, roption, buf, offset + 2)\n\n ropt.encode.bytes = offset - oldOffset\n return buf\n}\n\nropt.encode.bytes = 0\n\nropt.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n const options = []\n let rdlen = buf.readUInt16BE(offset)\n offset += 2\n let o = 0\n while (rdlen > 0) {\n options[o++] = roption.decode(buf, offset)\n offset += roption.decode.bytes\n rdlen -= roption.decode.bytes\n }\n ropt.decode.bytes = offset - oldOffset\n return options\n}\n\nropt.decode.bytes = 0\n\nropt.encodingLength = function (options) {\n return 2 + encodingLengthList(options || [], roption)\n}\n\nconst rdnskey = exports.dnskey = {}\n\nrdnskey.PROTOCOL_DNSSEC = 3\nrdnskey.ZONE_KEY = 0x80\nrdnskey.SECURE_ENTRYPOINT = 0x8000\n\nrdnskey.encode = function (key, buf, offset) {\n if (!buf) buf = Buffer.alloc(rdnskey.encodingLength(key))\n if (!offset) offset = 0\n const oldOffset = offset\n\n const keydata = key.key\n if (!Buffer.isBuffer(keydata)) {\n throw new Error('Key must be a Buffer')\n }\n\n offset += 2 // Leave space for length\n buf.writeUInt16BE(key.flags, offset)\n offset += 2\n buf.writeUInt8(rdnskey.PROTOCOL_DNSSEC, offset)\n offset += 1\n buf.writeUInt8(key.algorithm, offset)\n offset += 1\n keydata.copy(buf, offset, 0, keydata.length)\n offset += keydata.length\n\n rdnskey.encode.bytes = offset - oldOffset\n buf.writeUInt16BE(rdnskey.encode.bytes - 2, oldOffset)\n return buf\n}\n\nrdnskey.encode.bytes = 0\n\nrdnskey.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n var key = {}\n var length = buf.readUInt16BE(offset)\n offset += 2\n key.flags = buf.readUInt16BE(offset)\n offset += 2\n if (buf.readUInt8(offset) !== rdnskey.PROTOCOL_DNSSEC) {\n throw new Error('Protocol must be 3')\n }\n offset += 1\n key.algorithm = buf.readUInt8(offset)\n offset += 1\n key.key = buf.slice(offset, oldOffset + length + 2)\n offset += key.key.length\n rdnskey.decode.bytes = offset - oldOffset\n return key\n}\n\nrdnskey.decode.bytes = 0\n\nrdnskey.encodingLength = function (key) {\n return 6 + Buffer.byteLength(key.key)\n}\n\nconst rrrsig = exports.rrsig = {}\n\nrrrsig.encode = function (sig, buf, offset) {\n if (!buf) buf = Buffer.alloc(rrrsig.encodingLength(sig))\n if (!offset) offset = 0\n const oldOffset = offset\n\n const signature = sig.signature\n if (!Buffer.isBuffer(signature)) {\n throw new Error('Signature must be a Buffer')\n }\n\n offset += 2 // Leave space for length\n buf.writeUInt16BE(types.toType(sig.typeCovered), offset)\n offset += 2\n buf.writeUInt8(sig.algorithm, offset)\n offset += 1\n buf.writeUInt8(sig.labels, offset)\n offset += 1\n buf.writeUInt32BE(sig.originalTTL, offset)\n offset += 4\n buf.writeUInt32BE(sig.expiration, offset)\n offset += 4\n buf.writeUInt32BE(sig.inception, offset)\n offset += 4\n buf.writeUInt16BE(sig.keyTag, offset)\n offset += 2\n name.encode(sig.signersName, buf, offset)\n offset += name.encode.bytes\n signature.copy(buf, offset, 0, signature.length)\n offset += signature.length\n\n rrrsig.encode.bytes = offset - oldOffset\n buf.writeUInt16BE(rrrsig.encode.bytes - 2, oldOffset)\n return buf\n}\n\nrrrsig.encode.bytes = 0\n\nrrrsig.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n var sig = {}\n var length = buf.readUInt16BE(offset)\n offset += 2\n sig.typeCovered = types.toString(buf.readUInt16BE(offset))\n offset += 2\n sig.algorithm = buf.readUInt8(offset)\n offset += 1\n sig.labels = buf.readUInt8(offset)\n offset += 1\n sig.originalTTL = buf.readUInt32BE(offset)\n offset += 4\n sig.expiration = buf.readUInt32BE(offset)\n offset += 4\n sig.inception = buf.readUInt32BE(offset)\n offset += 4\n sig.keyTag = buf.readUInt16BE(offset)\n offset += 2\n sig.signersName = name.decode(buf, offset)\n offset += name.decode.bytes\n sig.signature = buf.slice(offset, oldOffset + length + 2)\n offset += sig.signature.length\n rrrsig.decode.bytes = offset - oldOffset\n return sig\n}\n\nrrrsig.decode.bytes = 0\n\nrrrsig.encodingLength = function (sig) {\n return 20 +\n name.encodingLength(sig.signersName) +\n Buffer.byteLength(sig.signature)\n}\n\nconst rrp = exports.rp = {}\n\nrrp.encode = function (data, buf, offset) {\n if (!buf) buf = Buffer.alloc(rrp.encodingLength(data))\n if (!offset) offset = 0\n const oldOffset = offset\n\n offset += 2 // Leave space for length\n name.encode(data.mbox || '.', buf, offset)\n offset += name.encode.bytes\n name.encode(data.txt || '.', buf, offset)\n offset += name.encode.bytes\n rrp.encode.bytes = offset - oldOffset\n buf.writeUInt16BE(rrp.encode.bytes - 2, oldOffset)\n return buf\n}\n\nrrp.encode.bytes = 0\n\nrrp.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n const data = {}\n offset += 2\n data.mbox = name.decode(buf, offset) || '.'\n offset += name.decode.bytes\n data.txt = name.decode(buf, offset) || '.'\n offset += name.decode.bytes\n rrp.decode.bytes = offset - oldOffset\n return data\n}\n\nrrp.decode.bytes = 0\n\nrrp.encodingLength = function (data) {\n return 2 + name.encodingLength(data.mbox || '.') + name.encodingLength(data.txt || '.')\n}\n\nconst typebitmap = {}\n\ntypebitmap.encode = function (typelist, buf, offset) {\n if (!buf) buf = Buffer.alloc(typebitmap.encodingLength(typelist))\n if (!offset) offset = 0\n const oldOffset = offset\n\n var typesByWindow = []\n for (var i = 0; i < typelist.length; i++) {\n var typeid = types.toType(typelist[i])\n if (typesByWindow[typeid >> 8] === undefined) {\n typesByWindow[typeid >> 8] = []\n }\n typesByWindow[typeid >> 8][(typeid >> 3) & 0x1F] |= 1 << (7 - (typeid & 0x7))\n }\n\n for (i = 0; i < typesByWindow.length; i++) {\n if (typesByWindow[i] !== undefined) {\n var windowBuf = Buffer.from(typesByWindow[i])\n buf.writeUInt8(i, offset)\n offset += 1\n buf.writeUInt8(windowBuf.length, offset)\n offset += 1\n windowBuf.copy(buf, offset)\n offset += windowBuf.length\n }\n }\n\n typebitmap.encode.bytes = offset - oldOffset\n return buf\n}\n\ntypebitmap.encode.bytes = 0\n\ntypebitmap.decode = function (buf, offset, length) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n var typelist = []\n while (offset - oldOffset < length) {\n var window = buf.readUInt8(offset)\n offset += 1\n var windowLength = buf.readUInt8(offset)\n offset += 1\n for (var i = 0; i < windowLength; i++) {\n var b = buf.readUInt8(offset + i)\n for (var j = 0; j < 8; j++) {\n if (b & (1 << (7 - j))) {\n var typeid = types.toString((window << 8) | (i << 3) | j)\n typelist.push(typeid)\n }\n }\n }\n offset += windowLength\n }\n\n typebitmap.decode.bytes = offset - oldOffset\n return typelist\n}\n\ntypebitmap.decode.bytes = 0\n\ntypebitmap.encodingLength = function (typelist) {\n var extents = []\n for (var i = 0; i < typelist.length; i++) {\n var typeid = types.toType(typelist[i])\n extents[typeid >> 8] = Math.max(extents[typeid >> 8] || 0, typeid & 0xFF)\n }\n\n var len = 0\n for (i = 0; i < extents.length; i++) {\n if (extents[i] !== undefined) {\n len += 2 + Math.ceil((extents[i] + 1) / 8)\n }\n }\n\n return len\n}\n\nconst rnsec = exports.nsec = {}\n\nrnsec.encode = function (record, buf, offset) {\n if (!buf) buf = Buffer.alloc(rnsec.encodingLength(record))\n if (!offset) offset = 0\n const oldOffset = offset\n\n offset += 2 // Leave space for length\n name.encode(record.nextDomain, buf, offset)\n offset += name.encode.bytes\n typebitmap.encode(record.rrtypes, buf, offset)\n offset += typebitmap.encode.bytes\n\n rnsec.encode.bytes = offset - oldOffset\n buf.writeUInt16BE(rnsec.encode.bytes - 2, oldOffset)\n return buf\n}\n\nrnsec.encode.bytes = 0\n\nrnsec.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n var record = {}\n var length = buf.readUInt16BE(offset)\n offset += 2\n record.nextDomain = name.decode(buf, offset)\n offset += name.decode.bytes\n record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset))\n offset += typebitmap.decode.bytes\n\n rnsec.decode.bytes = offset - oldOffset\n return record\n}\n\nrnsec.decode.bytes = 0\n\nrnsec.encodingLength = function (record) {\n return 2 +\n name.encodingLength(record.nextDomain) +\n typebitmap.encodingLength(record.rrtypes)\n}\n\nconst rnsec3 = exports.nsec3 = {}\n\nrnsec3.encode = function (record, buf, offset) {\n if (!buf) buf = Buffer.alloc(rnsec3.encodingLength(record))\n if (!offset) offset = 0\n const oldOffset = offset\n\n const salt = record.salt\n if (!Buffer.isBuffer(salt)) {\n throw new Error('salt must be a Buffer')\n }\n\n const nextDomain = record.nextDomain\n if (!Buffer.isBuffer(nextDomain)) {\n throw new Error('nextDomain must be a Buffer')\n }\n\n offset += 2 // Leave space for length\n buf.writeUInt8(record.algorithm, offset)\n offset += 1\n buf.writeUInt8(record.flags, offset)\n offset += 1\n buf.writeUInt16BE(record.iterations, offset)\n offset += 2\n buf.writeUInt8(salt.length, offset)\n offset += 1\n salt.copy(buf, offset, 0, salt.length)\n offset += salt.length\n buf.writeUInt8(nextDomain.length, offset)\n offset += 1\n nextDomain.copy(buf, offset, 0, nextDomain.length)\n offset += nextDomain.length\n typebitmap.encode(record.rrtypes, buf, offset)\n offset += typebitmap.encode.bytes\n\n rnsec3.encode.bytes = offset - oldOffset\n buf.writeUInt16BE(rnsec3.encode.bytes - 2, oldOffset)\n return buf\n}\n\nrnsec3.encode.bytes = 0\n\nrnsec3.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n var record = {}\n var length = buf.readUInt16BE(offset)\n offset += 2\n record.algorithm = buf.readUInt8(offset)\n offset += 1\n record.flags = buf.readUInt8(offset)\n offset += 1\n record.iterations = buf.readUInt16BE(offset)\n offset += 2\n const saltLength = buf.readUInt8(offset)\n offset += 1\n record.salt = buf.slice(offset, offset + saltLength)\n offset += saltLength\n const hashLength = buf.readUInt8(offset)\n offset += 1\n record.nextDomain = buf.slice(offset, offset + hashLength)\n offset += hashLength\n record.rrtypes = typebitmap.decode(buf, offset, length - (offset - oldOffset))\n offset += typebitmap.decode.bytes\n\n rnsec3.decode.bytes = offset - oldOffset\n return record\n}\n\nrnsec3.decode.bytes = 0\n\nrnsec3.encodingLength = function (record) {\n return 8 +\n record.salt.length +\n record.nextDomain.length +\n typebitmap.encodingLength(record.rrtypes)\n}\n\nconst rds = exports.ds = {}\n\nrds.encode = function (digest, buf, offset) {\n if (!buf) buf = Buffer.alloc(rds.encodingLength(digest))\n if (!offset) offset = 0\n const oldOffset = offset\n\n const digestdata = digest.digest\n if (!Buffer.isBuffer(digestdata)) {\n throw new Error('Digest must be a Buffer')\n }\n\n offset += 2 // Leave space for length\n buf.writeUInt16BE(digest.keyTag, offset)\n offset += 2\n buf.writeUInt8(digest.algorithm, offset)\n offset += 1\n buf.writeUInt8(digest.digestType, offset)\n offset += 1\n digestdata.copy(buf, offset, 0, digestdata.length)\n offset += digestdata.length\n\n rds.encode.bytes = offset - oldOffset\n buf.writeUInt16BE(rds.encode.bytes - 2, oldOffset)\n return buf\n}\n\nrds.encode.bytes = 0\n\nrds.decode = function (buf, offset) {\n if (!offset) offset = 0\n const oldOffset = offset\n\n var digest = {}\n var length = buf.readUInt16BE(offset)\n offset += 2\n digest.keyTag = buf.readUInt16BE(offset)\n offset += 2\n digest.algorithm = buf.readUInt8(offset)\n offset += 1\n digest.digestType = buf.readUInt8(offset)\n offset += 1\n digest.digest = buf.slice(offset, oldOffset + length + 2)\n offset += digest.digest.length\n rds.decode.bytes = offset - oldOffset\n return digest\n}\n\nrds.decode.bytes = 0\n\nrds.encodingLength = function (digest) {\n return 6 + Buffer.byteLength(digest.digest)\n}\n\nconst renc = exports.record = function (type) {\n switch (type.toUpperCase()) {\n case 'A': return ra\n case 'PTR': return rptr\n case 'CNAME': return rcname\n case 'DNAME': return rdname\n case 'TXT': return rtxt\n case 'NULL': return rnull\n case 'AAAA': return raaaa\n case 'SRV': return rsrv\n case 'HINFO': return rhinfo\n case 'CAA': return rcaa\n case 'NS': return rns\n case 'SOA': return rsoa\n case 'MX': return rmx\n case 'OPT': return ropt\n case 'DNSKEY': return rdnskey\n case 'RRSIG': return rrrsig\n case 'RP': return rrp\n case 'NSEC': return rnsec\n case 'NSEC3': return rnsec3\n case 'DS': return rds\n }\n return runknown\n}\n\nconst answer = exports.answer = {}\n\nanswer.encode = function (a, buf, offset) {\n if (!buf) buf = Buffer.alloc(answer.encodingLength(a))\n if (!offset) offset = 0\n\n const oldOffset = offset\n\n name.encode(a.name, buf, offset)\n offset += name.encode.bytes\n\n buf.writeUInt16BE(types.toType(a.type), offset)\n\n if (a.type.toUpperCase() === 'OPT') {\n if (a.name !== '.') {\n throw new Error('OPT name must be root.')\n }\n buf.writeUInt16BE(a.udpPayloadSize || 4096, offset + 2)\n buf.writeUInt8(a.extendedRcode || 0, offset + 4)\n buf.writeUInt8(a.ednsVersion || 0, offset + 5)\n buf.writeUInt16BE(a.flags || 0, offset + 6)\n\n offset += 8\n ropt.encode(a.options || [], buf, offset)\n offset += ropt.encode.bytes\n } else {\n let klass = classes.toClass(a.class === undefined ? 'IN' : a.class)\n if (a.flush) klass |= FLUSH_MASK // the 1st bit of the class is the flush bit\n buf.writeUInt16BE(klass, offset + 2)\n buf.writeUInt32BE(a.ttl || 0, offset + 4)\n\n offset += 8\n const enc = renc(a.type)\n enc.encode(a.data, buf, offset)\n offset += enc.encode.bytes\n }\n\n answer.encode.bytes = offset - oldOffset\n return buf\n}\n\nanswer.encode.bytes = 0\n\nanswer.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const a = {}\n const oldOffset = offset\n\n a.name = name.decode(buf, offset)\n offset += name.decode.bytes\n a.type = types.toString(buf.readUInt16BE(offset))\n if (a.type === 'OPT') {\n a.udpPayloadSize = buf.readUInt16BE(offset + 2)\n a.extendedRcode = buf.readUInt8(offset + 4)\n a.ednsVersion = buf.readUInt8(offset + 5)\n a.flags = buf.readUInt16BE(offset + 6)\n a.flag_do = ((a.flags >> 15) & 0x1) === 1\n a.options = ropt.decode(buf, offset + 8)\n offset += 8 + ropt.decode.bytes\n } else {\n const klass = buf.readUInt16BE(offset + 2)\n a.ttl = buf.readUInt32BE(offset + 4)\n\n a.class = classes.toString(klass & NOT_FLUSH_MASK)\n a.flush = !!(klass & FLUSH_MASK)\n\n const enc = renc(a.type)\n a.data = enc.decode(buf, offset + 8)\n offset += 8 + enc.decode.bytes\n }\n\n answer.decode.bytes = offset - oldOffset\n return a\n}\n\nanswer.decode.bytes = 0\n\nanswer.encodingLength = function (a) {\n const data = (a.data !== null && a.data !== undefined) ? a.data : a.options\n return name.encodingLength(a.name) + 8 + renc(a.type).encodingLength(data)\n}\n\nconst question = exports.question = {}\n\nquestion.encode = function (q, buf, offset) {\n if (!buf) buf = Buffer.alloc(question.encodingLength(q))\n if (!offset) offset = 0\n\n const oldOffset = offset\n\n name.encode(q.name, buf, offset)\n offset += name.encode.bytes\n\n buf.writeUInt16BE(types.toType(q.type), offset)\n offset += 2\n\n buf.writeUInt16BE(classes.toClass(q.class === undefined ? 'IN' : q.class), offset)\n offset += 2\n\n question.encode.bytes = offset - oldOffset\n return q\n}\n\nquestion.encode.bytes = 0\n\nquestion.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const oldOffset = offset\n const q = {}\n\n q.name = name.decode(buf, offset)\n offset += name.decode.bytes\n\n q.type = types.toString(buf.readUInt16BE(offset))\n offset += 2\n\n q.class = classes.toString(buf.readUInt16BE(offset))\n offset += 2\n\n const qu = !!(q.class & QU_MASK)\n if (qu) q.class &= NOT_QU_MASK\n\n question.decode.bytes = offset - oldOffset\n return q\n}\n\nquestion.decode.bytes = 0\n\nquestion.encodingLength = function (q) {\n return name.encodingLength(q.name) + 4\n}\n\nexports.AUTHORITATIVE_ANSWER = 1 << 10\nexports.TRUNCATED_RESPONSE = 1 << 9\nexports.RECURSION_DESIRED = 1 << 8\nexports.RECURSION_AVAILABLE = 1 << 7\nexports.AUTHENTIC_DATA = 1 << 5\nexports.CHECKING_DISABLED = 1 << 4\nexports.DNSSEC_OK = 1 << 15\n\nexports.encode = function (result, buf, offset) {\n const allocing = !buf\n\n if (allocing) buf = Buffer.alloc(exports.encodingLength(result))\n if (!offset) offset = 0\n\n const oldOffset = offset\n\n if (!result.questions) result.questions = []\n if (!result.answers) result.answers = []\n if (!result.authorities) result.authorities = []\n if (!result.additionals) result.additionals = []\n\n header.encode(result, buf, offset)\n offset += header.encode.bytes\n\n offset = encodeList(result.questions, question, buf, offset)\n offset = encodeList(result.answers, answer, buf, offset)\n offset = encodeList(result.authorities, answer, buf, offset)\n offset = encodeList(result.additionals, answer, buf, offset)\n\n exports.encode.bytes = offset - oldOffset\n\n // just a quick sanity check\n if (allocing && exports.encode.bytes !== buf.length) {\n return buf.slice(0, exports.encode.bytes)\n }\n\n return buf\n}\n\nexports.encode.bytes = 0\n\nexports.decode = function (buf, offset) {\n if (!offset) offset = 0\n\n const oldOffset = offset\n const result = header.decode(buf, offset)\n offset += header.decode.bytes\n\n offset = decodeList(result.questions, question, buf, offset)\n offset = decodeList(result.answers, answer, buf, offset)\n offset = decodeList(result.authorities, answer, buf, offset)\n offset = decodeList(result.additionals, answer, buf, offset)\n\n exports.decode.bytes = offset - oldOffset\n\n return result\n}\n\nexports.decode.bytes = 0\n\nexports.encodingLength = function (result) {\n return header.encodingLength(result) +\n encodingLengthList(result.questions || [], question) +\n encodingLengthList(result.answers || [], answer) +\n encodingLengthList(result.authorities || [], answer) +\n encodingLengthList(result.additionals || [], answer)\n}\n\nexports.streamEncode = function (result) {\n const buf = exports.encode(result)\n const sbuf = Buffer.alloc(2)\n sbuf.writeUInt16BE(buf.byteLength)\n const combine = Buffer.concat([sbuf, buf])\n exports.streamEncode.bytes = combine.byteLength\n return combine\n}\n\nexports.streamEncode.bytes = 0\n\nexports.streamDecode = function (sbuf) {\n const len = sbuf.readUInt16BE(0)\n if (sbuf.byteLength < len + 2) {\n // not enough data\n return null\n }\n const result = exports.decode(sbuf.slice(2))\n exports.streamDecode.bytes = exports.decode.bytes\n return result\n}\n\nexports.streamDecode.bytes = 0\n\nfunction encodingLengthList (list, enc) {\n let len = 0\n for (let i = 0; i < list.length; i++) len += enc.encodingLength(list[i])\n return len\n}\n\nfunction encodeList (list, enc, buf, offset) {\n for (let i = 0; i < list.length; i++) {\n enc.encode(list[i], buf, offset)\n offset += enc.encode.bytes\n }\n return offset\n}\n\nfunction decodeList (list, enc, buf, offset) {\n for (let i = 0; i < list.length; i++) {\n list[i] = enc.decode(buf, offset)\n offset += enc.decode.bytes\n }\n return offset\n}\n","'use strict'\n\n/*\n * Traditional DNS header OPCODEs (4-bits) defined by IANA in\n * https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-5\n */\n\nexports.toString = function (opcode) {\n switch (opcode) {\n case 0: return 'QUERY'\n case 1: return 'IQUERY'\n case 2: return 'STATUS'\n case 3: return 'OPCODE_3'\n case 4: return 'NOTIFY'\n case 5: return 'UPDATE'\n case 6: return 'OPCODE_6'\n case 7: return 'OPCODE_7'\n case 8: return 'OPCODE_8'\n case 9: return 'OPCODE_9'\n case 10: return 'OPCODE_10'\n case 11: return 'OPCODE_11'\n case 12: return 'OPCODE_12'\n case 13: return 'OPCODE_13'\n case 14: return 'OPCODE_14'\n case 15: return 'OPCODE_15'\n }\n return 'OPCODE_' + opcode\n}\n\nexports.toOpcode = function (code) {\n switch (code.toUpperCase()) {\n case 'QUERY': return 0\n case 'IQUERY': return 1\n case 'STATUS': return 2\n case 'OPCODE_3': return 3\n case 'NOTIFY': return 4\n case 'UPDATE': return 5\n case 'OPCODE_6': return 6\n case 'OPCODE_7': return 7\n case 'OPCODE_8': return 8\n case 'OPCODE_9': return 9\n case 'OPCODE_10': return 10\n case 'OPCODE_11': return 11\n case 'OPCODE_12': return 12\n case 'OPCODE_13': return 13\n case 'OPCODE_14': return 14\n case 'OPCODE_15': return 15\n }\n return 0\n}\n","'use strict'\n\nexports.toString = function (type) {\n switch (type) {\n // list at\n // https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-11\n case 1: return 'LLQ'\n case 2: return 'UL'\n case 3: return 'NSID'\n case 5: return 'DAU'\n case 6: return 'DHU'\n case 7: return 'N3U'\n case 8: return 'CLIENT_SUBNET'\n case 9: return 'EXPIRE'\n case 10: return 'COOKIE'\n case 11: return 'TCP_KEEPALIVE'\n case 12: return 'PADDING'\n case 13: return 'CHAIN'\n case 14: return 'KEY_TAG'\n case 26946: return 'DEVICEID'\n }\n if (type < 0) {\n return null\n }\n return `OPTION_${type}`\n}\n\nexports.toCode = function (name) {\n if (typeof name === 'number') {\n return name\n }\n if (!name) {\n return -1\n }\n switch (name.toUpperCase()) {\n case 'OPTION_0': return 0\n case 'LLQ': return 1\n case 'UL': return 2\n case 'NSID': return 3\n case 'OPTION_4': return 4\n case 'DAU': return 5\n case 'DHU': return 6\n case 'N3U': return 7\n case 'CLIENT_SUBNET': return 8\n case 'EXPIRE': return 9\n case 'COOKIE': return 10\n case 'TCP_KEEPALIVE': return 11\n case 'PADDING': return 12\n case 'CHAIN': return 13\n case 'KEY_TAG': return 14\n case 'DEVICEID': return 26946\n case 'OPTION_65535': return 65535\n }\n const m = name.match(/_(\\d+)$/)\n if (m) {\n return parseInt(m[1], 10)\n }\n return -1\n}\n","'use strict'\n\n/*\n * Traditional DNS header RCODEs (4-bits) defined by IANA in\n * https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml\n */\n\nexports.toString = function (rcode) {\n switch (rcode) {\n case 0: return 'NOERROR'\n case 1: return 'FORMERR'\n case 2: return 'SERVFAIL'\n case 3: return 'NXDOMAIN'\n case 4: return 'NOTIMP'\n case 5: return 'REFUSED'\n case 6: return 'YXDOMAIN'\n case 7: return 'YXRRSET'\n case 8: return 'NXRRSET'\n case 9: return 'NOTAUTH'\n case 10: return 'NOTZONE'\n case 11: return 'RCODE_11'\n case 12: return 'RCODE_12'\n case 13: return 'RCODE_13'\n case 14: return 'RCODE_14'\n case 15: return 'RCODE_15'\n }\n return 'RCODE_' + rcode\n}\n\nexports.toRcode = function (code) {\n switch (code.toUpperCase()) {\n case 'NOERROR': return 0\n case 'FORMERR': return 1\n case 'SERVFAIL': return 2\n case 'NXDOMAIN': return 3\n case 'NOTIMP': return 4\n case 'REFUSED': return 5\n case 'YXDOMAIN': return 6\n case 'YXRRSET': return 7\n case 'NXRRSET': return 8\n case 'NOTAUTH': return 9\n case 'NOTZONE': return 10\n case 'RCODE_11': return 11\n case 'RCODE_12': return 12\n case 'RCODE_13': return 13\n case 'RCODE_14': return 14\n case 'RCODE_15': return 15\n }\n return 0\n}\n","'use strict'\n\nexports.toString = function (type) {\n switch (type) {\n case 1: return 'A'\n case 10: return 'NULL'\n case 28: return 'AAAA'\n case 18: return 'AFSDB'\n case 42: return 'APL'\n case 257: return 'CAA'\n case 60: return 'CDNSKEY'\n case 59: return 'CDS'\n case 37: return 'CERT'\n case 5: return 'CNAME'\n case 49: return 'DHCID'\n case 32769: return 'DLV'\n case 39: return 'DNAME'\n case 48: return 'DNSKEY'\n case 43: return 'DS'\n case 55: return 'HIP'\n case 13: return 'HINFO'\n case 45: return 'IPSECKEY'\n case 25: return 'KEY'\n case 36: return 'KX'\n case 29: return 'LOC'\n case 15: return 'MX'\n case 35: return 'NAPTR'\n case 2: return 'NS'\n case 47: return 'NSEC'\n case 50: return 'NSEC3'\n case 51: return 'NSEC3PARAM'\n case 12: return 'PTR'\n case 46: return 'RRSIG'\n case 17: return 'RP'\n case 24: return 'SIG'\n case 6: return 'SOA'\n case 99: return 'SPF'\n case 33: return 'SRV'\n case 44: return 'SSHFP'\n case 32768: return 'TA'\n case 249: return 'TKEY'\n case 52: return 'TLSA'\n case 250: return 'TSIG'\n case 16: return 'TXT'\n case 252: return 'AXFR'\n case 251: return 'IXFR'\n case 41: return 'OPT'\n case 255: return 'ANY'\n }\n return 'UNKNOWN_' + type\n}\n\nexports.toType = function (name) {\n switch (name.toUpperCase()) {\n case 'A': return 1\n case 'NULL': return 10\n case 'AAAA': return 28\n case 'AFSDB': return 18\n case 'APL': return 42\n case 'CAA': return 257\n case 'CDNSKEY': return 60\n case 'CDS': return 59\n case 'CERT': return 37\n case 'CNAME': return 5\n case 'DHCID': return 49\n case 'DLV': return 32769\n case 'DNAME': return 39\n case 'DNSKEY': return 48\n case 'DS': return 43\n case 'HIP': return 55\n case 'HINFO': return 13\n case 'IPSECKEY': return 45\n case 'KEY': return 25\n case 'KX': return 36\n case 'LOC': return 29\n case 'MX': return 15\n case 'NAPTR': return 35\n case 'NS': return 2\n case 'NSEC': return 47\n case 'NSEC3': return 50\n case 'NSEC3PARAM': return 51\n case 'PTR': return 12\n case 'RRSIG': return 46\n case 'RP': return 17\n case 'SIG': return 24\n case 'SOA': return 6\n case 'SPF': return 99\n case 'SRV': return 33\n case 'SSHFP': return 44\n case 'TA': return 32768\n case 'TKEY': return 249\n case 'TLSA': return 52\n case 'TSIG': return 250\n case 'TXT': return 16\n case 'AXFR': return 252\n case 'IXFR': return 251\n case 'OPT': return 41\n case 'ANY': return 255\n case '*': return 255\n }\n if (name.toUpperCase().startsWith('UNKNOWN_')) return parseInt(name.slice(8))\n return 0\n}\n","'use strict'\n\nfunction inherit (ctor, superCtor) {\n Object.defineProperty(ctor, 'super_', {\n value: superCtor,\n writable: true,\n configurable: true\n })\n Object.setPrototypeOf(ctor.prototype, superCtor.prototype)\n}\n\nlet AbortError = typeof global !== 'undefined' ? global.AbortError : typeof window !== 'undefined' ? window.AbortError : null\nif (!AbortError) {\n AbortError = function () {\n Error.captureStackTrace(this, AbortError)\n this.message = 'Request aborted.'\n }\n inherit(AbortError, Error)\n AbortError.prototype.code = 'ABORT_ERR'\n AbortError.prototype.name = 'AbortError'\n}\n\nfunction HTTPStatusError (uri, code, method) {\n Error.captureStackTrace(this, HTTPStatusError)\n this.message = 'status=' + code + ' while requesting ' + uri + ' [' + method + ']'\n this.uri = uri\n this.status = code\n this.method = method\n}\ninherit(HTTPStatusError, Error)\nHTTPStatusError.prototype.code = 'HTTP_STATUS'\nHTTPStatusError.prototype.name = 'StatusError'\n\nfunction ResponseError (message, cause) {\n Error.captureStackTrace(this, ResponseError)\n this.message = message\n this.cause = cause\n}\ninherit(ResponseError, Error)\nResponseError.prototype.code = 'RESPONSE_ERR'\nResponseError.prototype.name = 'ResponseError'\n\nfunction TimeoutError (timeout) {\n Error.captureStackTrace(this, TimeoutError)\n this.message = 'Timeout (t=' + timeout + ').'\n this.timeout = timeout\n}\ninherit(TimeoutError, Error)\nTimeoutError.prototype.code = 'ETIMEOUT'\nTimeoutError.prototype.name = 'TimeoutError'\n\nfunction Endpoint (opts) {\n if (!opts.protocol) {\n opts.protocol = 'https:'\n } else if (!['http:', 'https:', 'udp4:', 'udp6:'].includes(opts.protocol)) {\n throw new Error(`Invalid Endpoint: unsupported protocol \"${opts.protocol}\" for endpoint: ${JSON.stringify(opts)}`)\n }\n if (typeof opts.host !== 'string') {\n throw new Error(`Invalid Endpoint: host \"${opts.host}\" needs to be a string: ${JSON.stringify(opts)}`)\n }\n if (typeof opts.port !== 'number' && !isNaN(opts.port)) {\n throw new Error(`Invalid Endpoint: port \"${opts.port}\" needs to be a number: ${JSON.stringify(opts)}`)\n }\n for (const key in opts) {\n if (opts[key] !== undefined) {\n this[key] = opts[key]\n }\n }\n}\n\nconst rawEndpoints = require('./endpoints.json')\nconst endpoints = {}\nfor (const name in rawEndpoints) {\n endpoints[name] = new Endpoint(rawEndpoints[name])\n}\n\nmodule.exports = {\n endpoints,\n AbortError: AbortError,\n HTTPStatusError: HTTPStatusError,\n ResponseError: ResponseError,\n TimeoutError: TimeoutError,\n Endpoint: Endpoint\n}\n","'use strict'\nconst packet = require('dns-packet')\nconst lib = require('./lib.node.js')\nconst common = require('./common.js')\nconst AbortError = common.AbortError\nconst ResponseError = common.ResponseError\nconst Endpoint = common.Endpoint\nconst endpoints = common.endpoints\nconst v4Regex = /^((\\d{1,3}\\.){3,3}\\d{1,3})(:(\\d{2,5}))?$/\nconst v6Regex = /^((::)?(((\\d{1,3}\\.){3}(\\d{1,3}){1})?([0-9a-f]){0,4}:{0,2}){1,8}(::)?)(:(\\d{2,5}))?$/i\n\nfunction queryOne (endpoint, query, timeout, abortSignal) {\n if (abortSignal && abortSignal.aborted) {\n return Promise.reject(new AbortError())\n }\n if (endpoint.protocol === 'udp4:' || endpoint.protocol === 'udp6:') {\n return lib.queryDns(endpoint, query, timeout, abortSignal)\n }\n return queryDoh(endpoint, query, timeout, abortSignal)\n}\n\nfunction queryDoh (endpoint, query, timeout, abortSignal) {\n const protocol = endpoint.protocol || 'https:'\n return new Promise(function (resolve, reject) {\n lib.request(\n protocol,\n endpoint.host,\n endpoint.port ? parseInt(endpoint.port, 10) : (protocol === 'https:' ? 443 : 80),\n endpoint.path || '/dns-query',\n /^post$/i.test(endpoint.method) ? 'POST' : 'GET',\n packet.encode(Object.assign({\n flags: packet.RECURSION_DESIRED,\n type: 'query'\n }, query)),\n timeout,\n abortSignal,\n function (error, data, response) {\n let decoded\n if (error === null) {\n if (data.length === 0) {\n error = new ResponseError('Empty.')\n } else {\n try {\n decoded = packet.decode(data)\n } catch (err) {\n error = new ResponseError('Invalid packet (cause=' + err.message + ')', err)\n }\n }\n }\n if (error !== null) {\n reject(Object.assign(error, { response, endpoint }))\n } else {\n decoded.endpoint = endpoint\n decoded.response = response\n resolve(decoded)\n }\n }\n )\n })\n}\n\nfunction query (q, opts) {\n opts = Object.assign({\n retries: 5,\n timeout: 30000\n }, opts)\n let endpoints\n try {\n if (opts.endpoints === 'doh') {\n endpoints = lib.endpoints({ doh: true, dns: false })\n } else if (opts.endpoints === 'dns') {\n endpoints = lib.endpoints({ doh: false, dns: true })\n } else {\n endpoints = parseEndpoints(opts.endpoints) || lib.endpoints({ doh: true, dns: true })\n }\n if (!endpoints || endpoints.length === 0) {\n throw new Error('No endpoints defined.')\n }\n } catch (error) {\n return Promise.reject(error)\n }\n return queryN(endpoints, q, opts)\n}\n\nfunction queryN (endpoints, q, opts) {\n const endpoint = endpoints.length === 1\n ? endpoints[0]\n : endpoints[Math.floor(Math.random() * endpoints.length) % endpoints.length]\n return queryOne(endpoint, q, opts.timeout, opts.signal)\n .then(\n data => {\n // Add the endpoint to give a chance to identify which endpoint returned the result\n data.endpoint = endpoint\n return data\n },\n err => {\n if (err.name === 'AbortError' || opts.retries === 0) {\n throw err\n }\n if (opts.retries > 0) {\n opts.retries -= 1\n }\n return query(q, opts)\n }\n )\n}\n\nfunction parseEndpoints (input) {\n if (!input) {\n return\n }\n if (typeof input[Symbol.iterator] !== 'function' || typeof input === 'string') {\n throw new Error('Endpoints needs to be iterable.')\n }\n const result = []\n for (let endpoint of input) {\n if (typeof endpoint === 'object') {\n if (!(endpoint instanceof Endpoint)) {\n endpoint = new Endpoint(endpoint)\n }\n result.push(endpoint)\n } else if (typeof endpoint === 'string') {\n result.push(endpoints[endpoint] || parseEndpoint(endpoint))\n }\n }\n return result\n}\n\nfunction parseEndpoint (endpoint) {\n const parts = /^(([^:]+?:)\\/\\/)?([^/]*?)(\\/.*?)?(\\s\\[(post|get)\\])?$/i.exec(endpoint)\n let protocol = parts[2] || 'https:'\n let family = 1\n let host\n let port\n const ipv6Parts = v6Regex.exec(parts[3])\n if (ipv6Parts) {\n const ipv4Parts = v4Regex.exec(parts[3])\n if (ipv4Parts) {\n host = ipv4Parts[1]\n if (ipv4Parts[4]) {\n port = parseInt(ipv4Parts[4])\n }\n } else {\n family = 2\n host = ipv6Parts[1]\n if (ipv6Parts[9]) {\n port = parseInt(ipv6Parts[10])\n }\n }\n } else {\n const portParts = /^([^:]*)(:(.*))?$/.exec(parts[3])\n host = portParts[1]\n if (portParts[3]) {\n port = parseInt(portParts[3])\n }\n }\n if (protocol === 'udp:') {\n protocol = family === 2 ? 'udp6:' : 'udp4:'\n }\n return new Endpoint({\n protocol: protocol,\n host,\n port,\n path: parts[4],\n method: parts[6]\n })\n}\n\nmodule.exports = {\n query: query,\n endpoints: endpoints,\n parseEndpoints: parseEndpoints,\n AbortError: AbortError,\n ResponseError: ResponseError,\n TimeoutError: common.TimeoutError,\n HTTPStatusError: common.HTTPStatusError,\n Endpoint: Endpoint\n}\n","'use strict'\n/* global XMLHttpRequest */\nconst Buffer = require('buffer').Buffer\nconst common = require('./common.js')\nconst AbortError = common.AbortError\nconst HTTPStatusError = common.HTTPStatusError\nconst TimeoutError = common.TimeoutError\nconst contentType = 'application/dns-message'\nconst endpoints = Object.values(common.endpoints).filter(function (endpoint) {\n return !endpoint.filter && !endpoint.logging && endpoint.cors\n})\n\n// https://tools.ietf.org/html/rfc8484\nfunction toRFC8484 (buffer) {\n return buffer.toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n}\n\nfunction noop () {}\n\nfunction request (protocol, host, port, path, method, packet, timeout, abortSignal, cb) {\n const uri = protocol + '//' + host + ':' + port + path + (method === 'GET' ? '?dns=' + toRFC8484(packet) : '')\n const xhr = new XMLHttpRequest()\n xhr.open(method, uri, true)\n xhr.setRequestHeader('Accept', contentType)\n if (method === 'POST') {\n xhr.setRequestHeader('Content-Type', contentType)\n }\n xhr.responseType = 'arraybuffer'\n xhr.timeout = timeout\n xhr.ontimeout = ontimeout\n xhr.onreadystatechange = onreadystatechange\n xhr.onerror = onerror\n xhr.onload = onload\n if (method === 'GET') {\n xhr.send()\n } else {\n xhr.send(packet)\n }\n\n if (abortSignal) {\n abortSignal.addEventListener('abort', onabort)\n }\n\n function ontimeout () {\n finish(new TimeoutError(timeout))\n try {\n xhr.abort()\n } catch (e) {}\n }\n\n function onload () {\n if (xhr.status !== 200) {\n finish(new HTTPStatusError(uri, xhr.status, method))\n } else {\n finish(null, Buffer.from(xhr.response))\n }\n }\n\n function onreadystatechange () {\n if (xhr.readyState > 1 && xhr.status !== 200 && xhr.status !== 0) {\n finish(new HTTPStatusError(uri, xhr.status, method))\n try {\n xhr.abort()\n } catch (e) {}\n }\n }\n\n let finish = function (error, data) {\n finish = noop\n if (abortSignal) {\n abortSignal.removeEventListener('abort', onabort)\n }\n cb(error, data, xhr)\n }\n\n function onerror () {\n finish(xhr.status === 200 ? new Error('Inexplicable XHR Error') : new HTTPStatusError(uri, xhr.status, method))\n }\n\n function onabort () {\n finish(new AbortError())\n try {\n xhr.abort()\n } catch (e) {}\n }\n}\n\nmodule.exports = {\n request: request,\n queryDns: function () {\n throw new Error('Only \"doh\" endpoints are supported in the browser')\n },\n endpoints: opts => {\n if (opts.doh) {\n return endpoints\n }\n if (opts.dns) {\n throw new Error('Only \"doh\" is supported in the browser')\n }\n }\n}\n","\"use strict\";\n/*\nMIT License\n\nCopyright (c) 2019 Cyril Dever\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n 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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nexports.__esModule = true;\nexports.decrypt = exports.encrypt = exports.derive = exports.verify = exports.sign = exports.getPublic = exports.kdf = void 0;\n/**\n * Browser ecies-geth implementation.\n * This is based off the `eccrypto` JS module.\n */\nvar elliptic_1 = require(\"elliptic\");\n/* eslint-disable @typescript-eslint/unbound-method */\nvar ec = new elliptic_1.ec('secp256k1');\n/* eslint-disable @typescript-eslint/strict-boolean-expressions */\nvar crypto = window.crypto || window.msCrypto; // eslint-disable-line @typescript-eslint/no-non-null-assertion\nvar subtle = (crypto.subtle || crypto.webkitSubtle); // eslint-disable-line @typescript-eslint/no-non-null-assertion\n/* eslint-enable @typescript-eslint/strict-boolean-expressions */\nif (subtle === undefined || crypto === undefined) {\n throw new Error('crypto and/or subtle api unavailable');\n}\n// Use the browser RNG\nvar randomBytes = function (size) {\n return crypto.getRandomValues(Buffer.alloc(size));\n};\n// Get the browser SHA256 implementation\nvar sha256 = function (msg) {\n return subtle.digest({ name: 'SHA-256' }, msg).then(Buffer.from);\n};\n// The KDF as implemented in Parity mimics Geth's implementation\nvar kdf = function (secret, outputLength) {\n var ctr = 1;\n var written = 0;\n var willBeResult = Promise.resolve(Buffer.from(''));\n var _loop_1 = function () {\n var ctrs = Buffer.from([ctr >> 24, ctr >> 16, ctr >> 8, ctr]);\n var willBeHashResult = sha256(Buffer.concat([ctrs, secret]));\n willBeResult = willBeResult.then(function (result) { return willBeHashResult.then(function (hashResult) {\n return Buffer.concat([result, hashResult]);\n }); });\n written += 32;\n ctr += 1;\n };\n while (written < outputLength) {\n _loop_1();\n }\n return willBeResult;\n};\nexports.kdf = kdf;\nvar aesCtrEncrypt = function (counter, key, data) {\n return subtle\n .importKey('raw', key, 'AES-CTR', false, ['encrypt'])\n .then(function (cryptoKey) {\n return subtle.encrypt({ name: 'AES-CTR', counter: counter, length: 128 }, cryptoKey, data);\n }).then(Buffer.from);\n};\nvar aesCtrDecrypt = function (counter, key, data) {\n return subtle\n .importKey('raw', key, 'AES-CTR', false, ['decrypt'])\n .then(function (cryptoKey) {\n return subtle.decrypt({ name: 'AES-CTR', counter: counter, length: 128 }, cryptoKey, data);\n }).then(Buffer.from);\n};\nvar hmacSha256Sign = function (key, msg) {\n var algorithm = { name: 'HMAC', hash: { name: 'SHA-256' } };\n return subtle.importKey('raw', key, algorithm, false, ['sign'])\n .then(function (cryptoKey) { return subtle.sign(algorithm, cryptoKey, msg); })\n .then(Buffer.from);\n};\nvar hmacSha256Verify = function (key, msg, sig) {\n var algorithm = { name: 'HMAC', hash: { name: 'SHA-256' } };\n var keyp = subtle.importKey('raw', key, algorithm, false, ['verify']);\n return keyp.then(function (cryptoKey) { return subtle.verify(algorithm, cryptoKey, sig, msg); });\n};\n/**\n * Compute the public key for a given private key.\n *\n * @param {Buffer} privateKey - A 32-byte private key\n * @return {Promise<Buffer>} A promise that resolve with the 65-byte public key or reject on wrong private key.\n * @function\n */\nvar getPublic = function (privateKey) { return new Promise(function (resolve, reject) {\n if (privateKey.length !== 32) {\n reject(new Error('Private key should be 32 bytes long'));\n }\n else {\n resolve(Buffer.from(ec.keyFromPrivate(privateKey).getPublic('array')));\n }\n}); };\nexports.getPublic = getPublic;\n/**\n * Create an ECDSA signature.\n *\n * @param {Buffer} privateKey - A 32-byte private key\n * @param {Buffer} msg - The message being signed, no more than 32 bytes\n * @return {Promise.<Buffer>} A promise that resolves with the signature and rejects on bad key or message\n */\nvar sign = function (privateKey, msg) { return new Promise(function (resolve, reject) {\n if (privateKey.length !== 32) {\n reject(new Error('Private key should be 32 bytes long'));\n }\n else if (msg.length <= 0) {\n reject(new Error('Message should not be empty'));\n }\n else if (msg.length > 32) {\n reject(new Error('Message is too long (max 32 bytes)'));\n }\n else {\n resolve(Buffer.from(ec.sign(msg, privateKey, { canonical: true }).toDER('hex'), 'hex')); // eslint-disable-line @typescript-eslint/no-unsafe-argument\n }\n}); };\nexports.sign = sign;\n/**\n * Verify an ECDSA signature.\n *\n * @param {Buffer} publicKey - A 65-byte public key\n * @param {Buffer} msg - The message being verified\n * @param {Buffer} sig - The signature\n * @return {Promise.<true>} A promise that resolves on correct signature and rejects on bad key or signature\n */\nvar verify = function (publicKey, msg, sig) { return new Promise(function (resolve, reject) {\n try {\n if (publicKey.length !== 65 || publicKey[0] !== 4) {\n reject(new Error('Public key should 65 bytes long'));\n }\n else if (msg.length <= 0) {\n reject(new Error('Message should not be empty'));\n }\n else if (msg.length > 32) {\n reject(new Error('Message is too long (max 32 bytes)'));\n }\n else if (!ec.verify(msg, sig.toString('hex'), publicKey, 'hex')) { // eslint-disable-line @typescript-eslint/no-unsafe-argument\n reject(new Error('Bad signature'));\n }\n else {\n resolve(true);\n }\n }\n catch (e) {\n reject(new Error('Invalid arguments'));\n }\n}); };\nexports.verify = verify;\n/**\n * Derive shared secret for given private and public keys.\n *\n * @param {Buffer} privateKey - Sender's private key (32 bytes)\n * @param {Buffer} publicKey - Recipient's public key (65 bytes)\n * @return {Promise.<Buffer>} A promise that resolves with the derived shared secret (Px, 32 bytes) and rejects on bad key\n */\nvar derive = function (privateKeyA, publicKeyB) { return new Promise(function (resolve, reject) {\n if (privateKeyA.length !== 32) {\n reject(new Error(\"Bad private key, it should be 32 bytes but it's actually \" + privateKeyA.length + \" bytes long\"));\n }\n else if (publicKeyB.length !== 65) {\n reject(new Error(\"Bad public key, it should be 65 bytes but it's actually \" + publicKeyB.length + \" bytes long\"));\n }\n else if (publicKeyB[0] !== 4) {\n reject(new Error('Bad public key, a valid public key would begin with 4'));\n }\n else {\n var keyA = ec.keyFromPrivate(privateKeyA);\n var keyB = ec.keyFromPublic(publicKeyB);\n var Px = keyA.derive(keyB.getPublic()); // BN instance\n resolve(Buffer.from(Px.toArray()));\n }\n}); };\nexports.derive = derive;\n/**\n * Encrypt message for given recepient's public key.\n *\n * @param {Buffer} publicKeyTo - Recipient's public key (65 bytes)\n * @param {Buffer} msg - The message being encrypted\n * @param {?{?iv: Buffer, ?ephemPrivateKey: Buffer}} opts - You may also specify initialization vector (16 bytes) and ephemeral private key (32 bytes) to get deterministic results.\n * @return {Promise.<Buffer>} - A promise that resolves with the ECIES structure serialized\n */\nvar encrypt = function (publicKeyTo, msg, opts) { return __awaiter(void 0, void 0, void 0, function () {\n var ephemPrivateKey;\n return __generator(this, function (_a) {\n /* eslint-disable @typescript-eslint/strict-boolean-expressions */\n opts = opts || {};\n ephemPrivateKey = opts.ephemPrivateKey || randomBytes(32);\n return [2 /*return*/, (0, exports.derive)(ephemPrivateKey, publicKeyTo)\n .then(function (sharedPx) { return (0, exports.kdf)(sharedPx, 32); })\n .then(function (hash) { return __awaiter(void 0, void 0, void 0, function () {\n var iv, encryptionKey;\n return __generator(this, function (_a) {\n iv = opts.iv || randomBytes(16) // eslint-disable-line @typescript-eslint/no-non-null-assertion\n ;\n encryptionKey = hash.slice(0, 16);\n return [2 /*return*/, aesCtrEncrypt(iv, encryptionKey, msg)\n .then(function (cipherText) { return Buffer.concat([iv, cipherText]); })\n .then(function (ivCipherText) {\n return sha256(hash.slice(16))\n .then(function (macKey) { return hmacSha256Sign(macKey, ivCipherText); })\n .then(function (HMAC) {\n return (0, exports.getPublic)(ephemPrivateKey)\n .then(function (ephemPublicKey) { return Buffer.concat([ephemPublicKey, ivCipherText, HMAC]); });\n });\n })];\n });\n }); })\n /* eslint-enable @typescript-eslint/strict-boolean-expressions */\n ];\n });\n}); };\nexports.encrypt = encrypt;\nvar metaLength = 1 + 64 + 16 + 32;\n/**\n * Decrypt message using given private key.\n *\n * @param {Buffer} privateKey - A 32-byte private key of recepient of the message\n * @param {Ecies} encrypted - ECIES serialized structure (result of ECIES encryption)\n * @return {Promise.<Buffer>} - A promise that resolves with the plaintext on successful decryption and rejects on failure\n */\nvar decrypt = function (privateKey, encrypted) { return new Promise(function (resolve, reject) {\n if (encrypted.length <= metaLength) {\n reject(new Error(\"Invalid Ciphertext. Data is too small. It should ba at least \" + metaLength + \" bytes\"));\n }\n else if (encrypted[0] !== 4) {\n reject(new Error(\"Not a valid ciphertext. It should begin with 4 but actually begin with \" + encrypted[0]));\n }\n else {\n // deserialize\n var ephemPublicKey = encrypted.slice(0, 65);\n var cipherTextLength = encrypted.length - metaLength;\n var iv_1 = encrypted.slice(65, 65 + 16);\n var cipherAndIv_1 = encrypted.slice(65, 65 + 16 + cipherTextLength);\n var ciphertext_1 = cipherAndIv_1.slice(16);\n var msgMac_1 = encrypted.slice(65 + 16 + cipherTextLength);\n // check HMAC\n resolve((0, exports.derive)(privateKey, ephemPublicKey)\n .then(function (px) { return (0, exports.kdf)(px, 32); })\n .then(function (hash) { return sha256(hash.slice(16)).then(function (macKey) { return [hash.slice(0, 16), macKey]; }); })\n .then(function (_a) {\n var encryptionKey = _a[0], macKey = _a[1];\n return hmacSha256Verify(macKey, cipherAndIv_1, msgMac_1)\n .then(function (isHmacGood) { return !isHmacGood\n ? Promise.reject(new Error('Incorrect MAC'))\n : aesCtrDecrypt(iv_1, encryptionKey, ciphertext_1); });\n }).then(Buffer.from));\n }\n}); };\nexports.decrypt = decrypt;\n__exportStar(require(\"./model\"), exports);\n/* eslint-enable @typescript-eslint/unbound-method */ \n","\"use strict\";\n/*\nMIT License\n\nCopyright (c) 2021 Cyril Dever\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\nexports.__esModule = true;\nexports.KeyPath = exports.Path = void 0;\nvar Path = function (account, scope, keyIndex) { return ({\n account: account,\n scope: scope,\n keyIndex: keyIndex\n}); };\nexports.Path = Path;\nvar parse = function (value) {\n var parts = value.split('/');\n if (parts.length !== 4 || parts[0] !== 'm') {\n throw new Error('invalid value for path');\n }\n return (0, exports.Path)(parts[1], parts[2], parts[3]);\n};\nvar next = function (value, increment) {\n var parsed = parse(value);\n var index = parseInt(parsed.keyIndex);\n var actualIncrement = increment !== undefined && increment > 1 ? increment : 1;\n var newValue = 'm/' + parsed.account + '/' + parsed.scope + '/' + (index + actualIncrement).toString(10);\n return (0, exports.KeyPath)(newValue);\n};\nvar setValue = function (value) {\n var parsed = parse(value);\n if (parseInt(parsed.account) > Math.pow(2, 16) - 1 || parseInt(parsed.scope) > Math.pow(2, 16) - 1 || parseInt(parsed.keyIndex) > Math.pow(2, 21) - 1) {\n throw new Error('invalid path with value exceeding its limits');\n }\n return value;\n};\nvar valueOf = function (value) { return function () {\n var parsed = parse(value);\n return parseInt(parsed.account) * Math.pow(2, 37) + parseInt(parsed.scope) * Math.pow(2, 21) + parseInt(parsed.keyIndex);\n}; };\n/**\n * Build an immutable key path\n *\n * @param {string} value - The path string\n * @returns an instance of KeyPath\n * @throws invalid value for path\n * @throws invalid path with value exceeding its limits\n */\nvar KeyPath = function (value) { return ({\n value: setValue(value),\n parse: function () { return parse(value); },\n next: function (increment) { return next(value, increment); },\n valueOf: valueOf(value)\n}); };\nexports.KeyPath = KeyPath;\n","'use strict';\n\nvar elliptic = exports;\n\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves');\n\n// Protocols\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n this.type = type;\n this.p = new BN(conf.p, 16);\n\n // Use Montgomery, when there is no fast reduction for the prime\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\n\n // Useful for many curves\n this.zero = new BN(0).toRed(this.red);\n this.one = new BN(1).toRed(this.red);\n this.two = new BN(2).toRed(this.red);\n\n // Curve configuration, optional\n this.n = conf.n && new BN(conf.n, 16);\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\n\n // Temporary arrays\n this._wnafT1 = new Array(4);\n this._wnafT2 = new Array(4);\n this._wnafT3 = new Array(4);\n this._wnafT4 = new Array(4);\n\n this._bitLength = this.n ? this.n.bitLength() : 0;\n\n // Generalized Greg Maxwell's trick\n var adjustCount = this.n && this.p.div(this.n);\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\n this.redN = null;\n } else {\n this._maxwellTrick = true;\n this.redN = this.n.toRed(this.red);\n }\n}\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n assert(p.precomputed);\n var doubles = p._getDoubles();\n\n var naf = getNAF(k, 1, this._bitLength);\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\n I /= 3;\n\n // Translate into more windowed form\n var repr = [];\n var j;\n var nafW;\n for (j = 0; j < naf.length; j += doubles.step) {\n nafW = 0;\n for (var l = j + doubles.step - 1; l >= j; l--)\n nafW = (nafW << 1) + naf[l];\n repr.push(nafW);\n }\n\n var a = this.jpoint(null, null, null);\n var b = this.jpoint(null, null, null);\n for (var i = I; i > 0; i--) {\n for (j = 0; j < repr.length; j++) {\n nafW = repr[j];\n if (nafW === i)\n b = b.mixedAdd(doubles.points[j]);\n else if (nafW === -i)\n b = b.mixedAdd(doubles.points[j].neg());\n }\n a = a.add(b);\n }\n return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n var w = 4;\n\n // Precompute window\n var nafPoints = p._getNAFPoints(w);\n w = nafPoints.wnd;\n var wnd = nafPoints.points;\n\n // Get NAF form\n var naf = getNAF(k, w, this._bitLength);\n\n // Add `this`*(N+1) for every w-NAF index\n var acc = this.jpoint(null, null, null);\n for (var i = naf.length - 1; i >= 0; i--) {\n // Count zeroes\n for (var l = 0; i >= 0 && naf[i] === 0; i--)\n l++;\n if (i >= 0)\n l++;\n acc = acc.dblp(l);\n\n if (i < 0)\n break;\n var z = naf[i];\n assert(z !== 0);\n if (p.type === 'affine') {\n // J +- P\n if (z > 0)\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\n else\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\n } else {\n // J +- J\n if (z > 0)\n acc = acc.add(wnd[(z - 1) >> 1]);\n else\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\n }\n }\n return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\n points,\n coeffs,\n len,\n jacobianResult) {\n var wndWidth = this._wnafT1;\n var wnd = this._wnafT2;\n var naf = this._wnafT3;\n\n // Fill all arrays\n var max = 0;\n var i;\n var j;\n var p;\n for (i = 0; i < len; i++) {\n p = points[i];\n var nafPoints = p._getNAFPoints(defW);\n wndWidth[i] = nafPoints.wnd;\n wnd[i] = nafPoints.points;\n }\n\n // Comb small window NAFs\n for (i = len - 1; i >= 1; i -= 2) {\n var a = i - 1;\n var b = i;\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\n max = Math.max(naf[a].length, max);\n max = Math.max(naf[b].length, max);\n continue;\n }\n\n var comb = [\n points[a], /* 1 */\n null, /* 3 */\n null, /* 5 */\n points[b], /* 7 */\n ];\n\n // Try to avoid Projective points, if possible\n if (points[a].y.cmp(points[b].y) === 0) {\n comb[1] = points[a].add(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].add(points[b].neg());\n } else {\n comb[1] = points[a].toJ().mixedAdd(points[b]);\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n }\n\n var index = [\n -3, /* -1 -1 */\n -1, /* -1 0 */\n -5, /* -1 1 */\n -7, /* 0 -1 */\n 0, /* 0 0 */\n 7, /* 0 1 */\n 5, /* 1 -1 */\n 1, /* 1 0 */\n 3, /* 1 1 */\n ];\n\n var jsf = getJSF(coeffs[a], coeffs[b]);\n max = Math.max(jsf[0].length, max);\n naf[a] = new Array(max);\n naf[b] = new Array(max);\n for (j = 0; j < max; j++) {\n var ja = jsf[0][j] | 0;\n var jb = jsf[1][j] | 0;\n\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n naf[b][j] = 0;\n wnd[a] = comb;\n }\n }\n\n var acc = this.jpoint(null, null, null);\n var tmp = this._wnafT4;\n for (i = max; i >= 0; i--) {\n var k = 0;\n\n while (i >= 0) {\n var zero = true;\n for (j = 0; j < len; j++) {\n tmp[j] = naf[j][i] | 0;\n if (tmp[j] !== 0)\n zero = false;\n }\n if (!zero)\n break;\n k++;\n i--;\n }\n if (i >= 0)\n k++;\n acc = acc.dblp(k);\n if (i < 0)\n break;\n\n for (j = 0; j < len; j++) {\n var z = tmp[j];\n p;\n if (z === 0)\n continue;\n else if (z > 0)\n p = wnd[j][(z - 1) >> 1];\n else if (z < 0)\n p = wnd[j][(-z - 1) >> 1].neg();\n\n if (p.type === 'affine')\n acc = acc.mixedAdd(p);\n else\n acc = acc.add(p);\n }\n }\n // Zeroify references\n for (i = 0; i < len; i++)\n wnd[i] = null;\n\n if (jacobianResult)\n return acc;\n else\n return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n this.curve = curve;\n this.type = type;\n this.precomputed = null;\n}\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq(/*other*/) {\n throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n bytes = utils.toArray(bytes, enc);\n\n var len = this.p.byteLength();\n\n // uncompressed, hybrid-odd, hybrid-even\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\n bytes.length - 1 === 2 * len) {\n if (bytes[0] === 0x06)\n assert(bytes[bytes.length - 1] % 2 === 0);\n else if (bytes[0] === 0x07)\n assert(bytes[bytes.length - 1] % 2 === 1);\n\n var res = this.point(bytes.slice(1, 1 + len),\n bytes.slice(1 + len, 1 + 2 * len));\n\n return res;\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\n bytes.length - 1 === len) {\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n }\n throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n var len = this.curve.p.byteLength();\n var x = this.getX().toArray('be', len);\n\n if (compact)\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\n\n return [ 0x04 ].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n if (this.precomputed)\n return this;\n\n var precomputed = {\n doubles: null,\n naf: null,\n beta: null,\n };\n precomputed.naf = this._getNAFPoints(8);\n precomputed.doubles = this._getDoubles(4, power);\n precomputed.beta = this._getBeta();\n this.precomputed = precomputed;\n\n return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n if (!this.precomputed)\n return false;\n\n var doubles = this.precomputed.doubles;\n if (!doubles)\n return false;\n\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n if (this.precomputed && this.precomputed.doubles)\n return this.precomputed.doubles;\n\n var doubles = [ this ];\n var acc = this;\n for (var i = 0; i < power; i += step) {\n for (var j = 0; j < step; j++)\n acc = acc.dbl();\n doubles.push(acc);\n }\n return {\n step: step,\n points: doubles,\n };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n if (this.precomputed && this.precomputed.naf)\n return this.precomputed.naf;\n\n var res = [ this ];\n var max = (1 << wnd) - 1;\n var dbl = max === 1 ? null : this.dbl();\n for (var i = 1; i < max; i++)\n res[i] = res[i - 1].add(dbl);\n return {\n wnd: wnd,\n points: res,\n };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n var r = this;\n for (var i = 0; i < k; i++)\n r = r.dbl();\n return r;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n // NOTE: Important as we are creating point in Base.call()\n this.twisted = (conf.a | 0) !== 1;\n this.mOneA = this.twisted && (conf.a | 0) === -1;\n this.extended = this.mOneA;\n\n Base.call(this, 'edwards', conf);\n\n this.a = new BN(conf.a, 16).umod(this.red.m);\n this.a = this.a.toRed(this.red);\n this.c = new BN(conf.c, 16).toRed(this.red);\n this.c2 = this.c.redSqr();\n this.d = new BN(conf.d, 16).toRed(this.red);\n this.dd = this.d.redAdd(this.d);\n\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n this.oneC = (conf.c | 0) === 1;\n}\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n if (this.mOneA)\n return num.redNeg();\n else\n return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n if (this.oneC)\n return num;\n else\n return this.c.redMul(num);\n};\n\n// Just for compatibility with Short curve\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var x2 = x.redSqr();\n var rhs = this.c2.redSub(this.a.redMul(x2));\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n\n var y2 = rhs.redMul(lhs.redInvm());\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n y = new BN(y, 16);\n if (!y.red)\n y = y.toRed(this.red);\n\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n var y2 = y.redSqr();\n var lhs = y2.redSub(this.c2);\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n var x2 = lhs.redMul(rhs.redInvm());\n\n if (x2.cmp(this.zero) === 0) {\n if (odd)\n throw new Error('invalid point');\n else\n return this.point(this.zero, y);\n }\n\n var x = x2.redSqrt();\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n if (x.fromRed().isOdd() !== odd)\n x = x.redNeg();\n\n return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n if (point.isInfinity())\n return true;\n\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n point.normalize();\n\n var x2 = point.x.redSqr();\n var y2 = point.y.redSqr();\n var lhs = x2.redMul(this.a).redAdd(y2);\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n\n return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && y === null && z === null) {\n this.x = this.curve.zero;\n this.y = this.curve.one;\n this.z = this.curve.one;\n this.t = this.curve.zero;\n this.zOne = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = z ? new BN(z, 16) : this.curve.one;\n this.t = t && new BN(t, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n if (this.t && !this.t.red)\n this.t = this.t.toRed(this.curve.red);\n this.zOne = this.z === this.curve.one;\n\n // Use extended coordinates\n if (this.curve.extended && !this.t) {\n this.t = this.x.redMul(this.y);\n if (!this.zOne)\n this.t = this.t.redMul(this.z.redInvm());\n }\n }\n}\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.x.cmpn(0) === 0 &&\n (this.y.cmp(this.z) === 0 ||\n (this.zOne && this.y.cmp(this.curve.c) === 0));\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #doubling-dbl-2008-hwcd\n // 4M + 4S\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = 2 * Z1^2\n var c = this.z.redSqr();\n c = c.redIAdd(c);\n // D = a * A\n var d = this.curve._mulA(a);\n // E = (X1 + Y1)^2 - A - B\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\n // G = D + B\n var g = d.redAdd(b);\n // F = G - C\n var f = g.redSub(c);\n // H = D - B\n var h = d.redSub(b);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #doubling-dbl-2008-bbjlp\n // #doubling-dbl-2007-bl\n // and others\n // Generally 3M + 4S or 2M + 4S\n\n // B = (X1 + Y1)^2\n var b = this.x.redAdd(this.y).redSqr();\n // C = X1^2\n var c = this.x.redSqr();\n // D = Y1^2\n var d = this.y.redSqr();\n\n var nx;\n var ny;\n var nz;\n var e;\n var h;\n var j;\n if (this.curve.twisted) {\n // E = a * C\n e = this.curve._mulA(c);\n // F = E + D\n var f = e.redAdd(d);\n if (this.zOne) {\n // X3 = (B - C - D) * (F - 2)\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F^2 - 2 * F\n nz = f.redSqr().redSub(f).redSub(f);\n } else {\n // H = Z1^2\n h = this.z.redSqr();\n // J = F - 2 * H\n j = f.redSub(h).redISub(h);\n // X3 = (B-C-D)*J\n nx = b.redSub(c).redISub(d).redMul(j);\n // Y3 = F * (E - D)\n ny = f.redMul(e.redSub(d));\n // Z3 = F * J\n nz = f.redMul(j);\n }\n } else {\n // E = C + D\n e = c.redAdd(d);\n // H = (c * Z1)^2\n h = this.curve._mulC(this.z).redSqr();\n // J = E - 2 * H\n j = e.redSub(h).redSub(h);\n // X3 = c * (B - E) * J\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\n // Y3 = c * E * (C - D)\n ny = this.curve._mulC(e).redMul(c.redISub(d));\n // Z3 = E * J\n nz = e.redMul(j);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n // Double in extended coordinates\n if (this.curve.extended)\n return this._extDbl();\n else\n return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n // #addition-add-2008-hwcd-3\n // 8M\n\n // A = (Y1 - X1) * (Y2 - X2)\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\n // B = (Y1 + X1) * (Y2 + X2)\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\n // C = T1 * k * T2\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\n // D = Z1 * 2 * Z2\n var d = this.z.redMul(p.z.redAdd(p.z));\n // E = B - A\n var e = b.redSub(a);\n // F = D - C\n var f = d.redSub(c);\n // G = D + C\n var g = d.redAdd(c);\n // H = B + A\n var h = b.redAdd(a);\n // X3 = E * F\n var nx = e.redMul(f);\n // Y3 = G * H\n var ny = g.redMul(h);\n // T3 = E * H\n var nt = e.redMul(h);\n // Z3 = F * G\n var nz = f.redMul(g);\n return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n // #addition-add-2008-bbjlp\n // #addition-add-2007-bl\n // 10M + 1S\n\n // A = Z1 * Z2\n var a = this.z.redMul(p.z);\n // B = A^2\n var b = a.redSqr();\n // C = X1 * X2\n var c = this.x.redMul(p.x);\n // D = Y1 * Y2\n var d = this.y.redMul(p.y);\n // E = d * C * D\n var e = this.curve.d.redMul(c).redMul(d);\n // F = B - E\n var f = b.redSub(e);\n // G = B + E\n var g = b.redAdd(e);\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n var nx = a.redMul(f).redMul(tmp);\n var ny;\n var nz;\n if (this.curve.twisted) {\n // Y3 = A * G * (D - a * C)\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\n // Z3 = F * G\n nz = f.redMul(g);\n } else {\n // Y3 = A * G * (D - C)\n ny = a.redMul(g).redMul(d.redSub(c));\n // Z3 = c * F * G\n nz = this.curve._mulC(f).redMul(g);\n }\n return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n if (this.isInfinity())\n return p;\n if (p.isInfinity())\n return this;\n\n if (this.curve.extended)\n return this._extAdd(p);\n else\n return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n if (this.zOne)\n return this;\n\n // Normalize coordinates\n var zi = this.z.redInvm();\n this.x = this.x.redMul(zi);\n this.y = this.y.redMul(zi);\n if (this.t)\n this.t = this.t.redMul(zi);\n this.z = this.curve.one;\n this.zOne = true;\n return this;\n};\n\nPoint.prototype.neg = function neg() {\n return this.curve.point(this.x.redNeg(),\n this.y,\n this.z,\n this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n this.normalize();\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n this.normalize();\n return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n return this === other ||\n this.getX().cmp(other.getX()) === 0 &&\n this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n var rx = x.toRed(this.curve.red).redMul(this.z);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(this.z);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\n// Compatibility with BaseCurve\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;\n","'use strict';\n\nvar curve = exports;\n\ncurve.base = require('./base');\ncurve.short = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');\n","'use strict';\n\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n Base.call(this, 'mont', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.i4 = new BN(4).toRed(this.red).redInvm();\n this.two = new BN(2).toRed(this.red);\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n var x = point.normalize().x;\n var x2 = x.redSqr();\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n var y = rhs.redSqrt();\n\n return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n Base.BasePoint.call(this, curve, 'projective');\n if (x === null && z === null) {\n this.x = this.curve.one;\n this.z = this.curve.zero;\n } else {\n this.x = new BN(x, 16);\n this.z = new BN(z, 16);\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n }\n}\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {\n // No-op\n};\n\nPoint.prototype._encode = function _encode() {\n return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n // 2M + 2S + 4A\n\n // A = X1 + Z1\n var a = this.x.redAdd(this.z);\n // AA = A^2\n var aa = a.redSqr();\n // B = X1 - Z1\n var b = this.x.redSub(this.z);\n // BB = B^2\n var bb = b.redSqr();\n // C = AA - BB\n var c = aa.redSub(bb);\n // X3 = AA * BB\n var nx = aa.redMul(bb);\n // Z3 = C * (BB + A24 * C)\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n // 4M + 2S + 6A\n\n // A = X2 + Z2\n var a = this.x.redAdd(this.z);\n // B = X2 - Z2\n var b = this.x.redSub(this.z);\n // C = X3 + Z3\n var c = p.x.redAdd(p.z);\n // D = X3 - Z3\n var d = p.x.redSub(p.z);\n // DA = D * A\n var da = d.redMul(a);\n // CB = C * B\n var cb = c.redMul(b);\n // X5 = Z1 * (DA + CB)^2\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\n // Z5 = X1 * (DA - CB)^2\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\n return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n var t = k.clone();\n var a = this; // (N / 2) * Q + Q\n var b = this.curve.point(null, null); // (N / 2) * Q\n var c = this; // Q\n\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\n bits.push(t.andln(1));\n\n for (var i = bits.length - 1; i >= 0; i--) {\n if (bits[i] === 0) {\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n a = a.diffAdd(b, c);\n // N * Q = 2 * ((N / 2) * Q + Q))\n b = b.dbl();\n } else {\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n b = a.diffAdd(b, c);\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\n a = a.dbl();\n }\n }\n return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n this.x = this.x.redMul(this.z.redInvm());\n this.z = this.curve.one;\n return this;\n};\n\nPoint.prototype.getX = function getX() {\n // Normalize coordinates\n this.normalize();\n\n return this.x.fromRed();\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar BN = require('bn.js');\nvar inherits = require('inherits');\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n Base.call(this, 'short', conf);\n\n this.a = new BN(conf.a, 16).toRed(this.red);\n this.b = new BN(conf.b, 16).toRed(this.red);\n this.tinv = this.two.redInvm();\n\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\n\n // If the curve is endomorphic, precalculate beta and lambda\n this.endo = this._getEndomorphism(conf);\n this._endoWnafT1 = new Array(4);\n this._endoWnafT2 = new Array(4);\n}\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n // No efficient endomorphism\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\n return;\n\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n var beta;\n var lambda;\n if (conf.beta) {\n beta = new BN(conf.beta, 16).toRed(this.red);\n } else {\n var betas = this._getEndoRoots(this.p);\n // Choose the smallest beta\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n beta = beta.toRed(this.red);\n }\n if (conf.lambda) {\n lambda = new BN(conf.lambda, 16);\n } else {\n // Choose the lambda that is matching selected beta\n var lambdas = this._getEndoRoots(this.n);\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n lambda = lambdas[0];\n } else {\n lambda = lambdas[1];\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n }\n }\n\n // Get basis vectors, used for balanced length-two representation\n var basis;\n if (conf.basis) {\n basis = conf.basis.map(function(vec) {\n return {\n a: new BN(vec.a, 16),\n b: new BN(vec.b, 16),\n };\n });\n } else {\n basis = this._getEndoBasis(lambda);\n }\n\n return {\n beta: beta,\n lambda: lambda,\n basis: basis,\n };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n // Find roots of for x^2 + x + 1 in F\n // Root = (-1 +- Sqrt(-3)) / 2\n //\n var red = num === this.p ? this.red : BN.mont(num);\n var tinv = new BN(2).toRed(red).redInvm();\n var ntinv = tinv.redNeg();\n\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n\n var l1 = ntinv.redAdd(s).fromRed();\n var l2 = ntinv.redSub(s).fromRed();\n return [ l1, l2 ];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n // aprxSqrt >= sqrt(this.n)\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\n\n // 3.74\n // Run EGCD, until r(L + 1) < aprxSqrt\n var u = lambda;\n var v = this.n.clone();\n var x1 = new BN(1);\n var y1 = new BN(0);\n var x2 = new BN(0);\n var y2 = new BN(1);\n\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n var a0;\n var b0;\n // First vector\n var a1;\n var b1;\n // Second vector\n var a2;\n var b2;\n\n var prevR;\n var i = 0;\n var r;\n var x;\n while (u.cmpn(0) !== 0) {\n var q = v.div(u);\n r = v.sub(q.mul(u));\n x = x2.sub(q.mul(x1));\n var y = y2.sub(q.mul(y1));\n\n if (!a1 && r.cmp(aprxSqrt) < 0) {\n a0 = prevR.neg();\n b0 = x1;\n a1 = r.neg();\n b1 = x;\n } else if (a1 && ++i === 2) {\n break;\n }\n prevR = r;\n\n v = u;\n u = r;\n x2 = x1;\n x1 = x;\n y2 = y1;\n y1 = y;\n }\n a2 = r.neg();\n b2 = x;\n\n var len1 = a1.sqr().add(b1.sqr());\n var len2 = a2.sqr().add(b2.sqr());\n if (len2.cmp(len1) >= 0) {\n a2 = a0;\n b2 = b0;\n }\n\n // Normalize signs\n if (a1.negative) {\n a1 = a1.neg();\n b1 = b1.neg();\n }\n if (a2.negative) {\n a2 = a2.neg();\n b2 = b2.neg();\n }\n\n return [\n { a: a1, b: b1 },\n { a: a2, b: b2 },\n ];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n var basis = this.endo.basis;\n var v1 = basis[0];\n var v2 = basis[1];\n\n var c1 = v2.b.mul(k).divRound(this.n);\n var c2 = v1.b.neg().mul(k).divRound(this.n);\n\n var p1 = c1.mul(v1.a);\n var p2 = c2.mul(v2.a);\n var q1 = c1.mul(v1.b);\n var q2 = c2.mul(v2.b);\n\n // Calculate answer\n var k1 = k.sub(p1).sub(p2);\n var k2 = q1.add(q2).neg();\n return { k1: k1, k2: k2 };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n x = new BN(x, 16);\n if (!x.red)\n x = x.toRed(this.red);\n\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n var y = y2.redSqrt();\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\n throw new Error('invalid point');\n\n // XXX Is there any way to tell if the number is odd without converting it\n // to non-red form?\n var isOdd = y.fromRed().isOdd();\n if (odd && !isOdd || !odd && isOdd)\n y = y.redNeg();\n\n return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n if (point.inf)\n return true;\n\n var x = point.x;\n var y = point.y;\n\n var ax = this.a.redMul(x);\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd =\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n var npoints = this._endoWnafT1;\n var ncoeffs = this._endoWnafT2;\n for (var i = 0; i < points.length; i++) {\n var split = this._endoSplit(coeffs[i]);\n var p = points[i];\n var beta = p._getBeta();\n\n if (split.k1.negative) {\n split.k1.ineg();\n p = p.neg(true);\n }\n if (split.k2.negative) {\n split.k2.ineg();\n beta = beta.neg(true);\n }\n\n npoints[i * 2] = p;\n npoints[i * 2 + 1] = beta;\n ncoeffs[i * 2] = split.k1;\n ncoeffs[i * 2 + 1] = split.k2;\n }\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\n\n // Clean-up references to points and coefficients\n for (var j = 0; j < i * 2; j++) {\n npoints[j] = null;\n ncoeffs[j] = null;\n }\n return res;\n };\n\nfunction Point(curve, x, y, isRed) {\n Base.BasePoint.call(this, curve, 'affine');\n if (x === null && y === null) {\n this.x = null;\n this.y = null;\n this.inf = true;\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n // Force redgomery representation when loading from JSON\n if (isRed) {\n this.x.forceRed(this.curve.red);\n this.y.forceRed(this.curve.red);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n this.inf = false;\n }\n}\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n if (!this.curve.endo)\n return;\n\n var pre = this.precomputed;\n if (pre && pre.beta)\n return pre.beta;\n\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n if (pre) {\n var curve = this.curve;\n var endoMul = function(p) {\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\n };\n pre.beta = beta;\n beta.precomputed = {\n beta: null,\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(endoMul),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(endoMul),\n },\n };\n }\n return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n if (!this.precomputed)\n return [ this.x, this.y ];\n\n return [ this.x, this.y, this.precomputed && {\n doubles: this.precomputed.doubles && {\n step: this.precomputed.doubles.step,\n points: this.precomputed.doubles.points.slice(1),\n },\n naf: this.precomputed.naf && {\n wnd: this.precomputed.naf.wnd,\n points: this.precomputed.naf.points.slice(1),\n },\n } ];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n if (typeof obj === 'string')\n obj = JSON.parse(obj);\n var res = curve.point(obj[0], obj[1], red);\n if (!obj[2])\n return res;\n\n function obj2point(obj) {\n return curve.point(obj[0], obj[1], red);\n }\n\n var pre = obj[2];\n res.precomputed = {\n beta: null,\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: [ res ].concat(pre.doubles.points.map(obj2point)),\n },\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: [ res ].concat(pre.naf.points.map(obj2point)),\n },\n };\n return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC Point Infinity>';\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.inf)\n return p;\n\n // P + O = P\n if (p.inf)\n return this;\n\n // P + P = 2P\n if (this.eq(p))\n return this.dbl();\n\n // P + (-P) = O\n if (this.neg().eq(p))\n return this.curve.point(null, null);\n\n // P + Q = O\n if (this.x.cmp(p.x) === 0)\n return this.curve.point(null, null);\n\n var c = this.y.redSub(p.y);\n if (c.cmpn(0) !== 0)\n c = c.redMul(this.x.redSub(p.x).redInvm());\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n if (this.inf)\n return this;\n\n // 2P = O\n var ys1 = this.y.redAdd(this.y);\n if (ys1.cmpn(0) === 0)\n return this.curve.point(null, null);\n\n var a = this.curve.a;\n\n var x2 = this.x.redSqr();\n var dyinv = ys1.redInvm();\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n k = new BN(k, 16);\n if (this.isInfinity())\n return this;\n else if (this._hasDoubles(k))\n return this.curve._fixedNafMul(this, k);\n else if (this.curve.endo)\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\n else\n return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n var points = [ this, p2 ];\n var coeffs = [ k1, k2 ];\n if (this.curve.endo)\n return this.curve._endoWnafMulAdd(points, coeffs, true);\n else\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n return this === p ||\n this.inf === p.inf &&\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n if (this.inf)\n return this;\n\n var res = this.curve.point(this.x, this.y.redNeg());\n if (_precompute && this.precomputed) {\n var pre = this.precomputed;\n var negate = function(p) {\n return p.neg();\n };\n res.precomputed = {\n naf: pre.naf && {\n wnd: pre.naf.wnd,\n points: pre.naf.points.map(negate),\n },\n doubles: pre.doubles && {\n step: pre.doubles.step,\n points: pre.doubles.points.map(negate),\n },\n };\n }\n return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n if (this.inf)\n return this.curve.jpoint(null, null, null);\n\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n Base.BasePoint.call(this, curve, 'jacobian');\n if (x === null && y === null && z === null) {\n this.x = this.curve.one;\n this.y = this.curve.one;\n this.z = new BN(0);\n } else {\n this.x = new BN(x, 16);\n this.y = new BN(y, 16);\n this.z = new BN(z, 16);\n }\n if (!this.x.red)\n this.x = this.x.toRed(this.curve.red);\n if (!this.y.red)\n this.y = this.y.toRed(this.curve.red);\n if (!this.z.red)\n this.z = this.z.toRed(this.curve.red);\n\n this.zOne = this.z === this.curve.one;\n}\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n if (this.isInfinity())\n return this.curve.point(null, null);\n\n var zinv = this.z.redInvm();\n var zinv2 = zinv.redSqr();\n var ax = this.x.redMul(zinv2);\n var ay = this.y.redMul(zinv2).redMul(zinv);\n\n return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n // O + P = P\n if (this.isInfinity())\n return p;\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 12M + 4S + 7A\n var pz2 = p.z.redSqr();\n var z2 = this.z.redSqr();\n var u1 = this.x.redMul(pz2);\n var u2 = p.x.redMul(z2);\n var s1 = this.y.redMul(pz2.redMul(p.z));\n var s2 = p.y.redMul(z2.redMul(this.z));\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(p.z).redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n // O + P = P\n if (this.isInfinity())\n return p.toJ();\n\n // P + O = P\n if (p.isInfinity())\n return this;\n\n // 8M + 3S + 7A\n var z2 = this.z.redSqr();\n var u1 = this.x;\n var u2 = p.x.redMul(z2);\n var s1 = this.y;\n var s2 = p.y.redMul(z2).redMul(this.z);\n\n var h = u1.redSub(u2);\n var r = s1.redSub(s2);\n if (h.cmpn(0) === 0) {\n if (r.cmpn(0) !== 0)\n return this.curve.jpoint(null, null, null);\n else\n return this.dbl();\n }\n\n var h2 = h.redSqr();\n var h3 = h2.redMul(h);\n var v = u1.redMul(h2);\n\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n var nz = this.z.redMul(h);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n if (pow === 0)\n return this;\n if (this.isInfinity())\n return this;\n if (!pow)\n return this.dbl();\n\n var i;\n if (this.curve.zeroA || this.curve.threeA) {\n var r = this;\n for (i = 0; i < pow; i++)\n r = r.dbl();\n return r;\n }\n\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\n // N = 1 => 6M + 6S + 9A\n var a = this.curve.a;\n var tinv = this.curve.tinv;\n\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n // Reuse results\n var jyd = jy.redAdd(jy);\n for (i = 0; i < pow; i++) {\n var jx2 = jx.redSqr();\n var jyd2 = jyd.redSqr();\n var jyd4 = jyd2.redSqr();\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var t1 = jx.redMul(jyd2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n var dny = c.redMul(t2);\n dny = dny.redIAdd(dny).redISub(jyd4);\n var nz = jyd.redMul(jz);\n if (i + 1 < pow)\n jz4 = jz4.redMul(jyd4);\n\n jx = nx;\n jz = nz;\n jyd = dny;\n }\n\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n if (this.isInfinity())\n return this;\n\n if (this.curve.zeroA)\n return this._zeroDbl();\n else if (this.curve.threeA)\n return this._threeDbl();\n else\n return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 14A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // T = M ^ 2 - 2*S\n var t = m.redSqr().redISub(s).redISub(s);\n\n // 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2*Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n // #doubling-dbl-2009-l\n // 2M + 5S + 13A\n\n // A = X1^2\n var a = this.x.redSqr();\n // B = Y1^2\n var b = this.y.redSqr();\n // C = B^2\n var c = b.redSqr();\n // D = 2 * ((X1 + B)^2 - A - C)\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n d = d.redIAdd(d);\n // E = 3 * A\n var e = a.redAdd(a).redIAdd(a);\n // F = E^2\n var f = e.redSqr();\n\n // 8 * C\n var c8 = c.redIAdd(c);\n c8 = c8.redIAdd(c8);\n c8 = c8.redIAdd(c8);\n\n // X3 = F - 2 * D\n nx = f.redISub(d).redISub(d);\n // Y3 = E * (D - X3) - 8 * C\n ny = e.redMul(d.redISub(nx)).redISub(c8);\n // Z3 = 2 * Y1 * Z1\n nz = this.y.redMul(this.z);\n nz = nz.redIAdd(nz);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n var nx;\n var ny;\n var nz;\n // Z = 1\n if (this.zOne) {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n // #doubling-mdbl-2007-bl\n // 1M + 5S + 15A\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n s = s.redIAdd(s);\n // M = 3 * XX + a\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\n // T = M^2 - 2 * S\n var t = m.redSqr().redISub(s).redISub(s);\n // X3 = T\n nx = t;\n // Y3 = M * (S - T) - 8 * YYYY\n var yyyy8 = yyyy.redIAdd(yyyy);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n yyyy8 = yyyy8.redIAdd(yyyy8);\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\n // Z3 = 2 * Y1\n nz = this.y.redAdd(this.y);\n } else {\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n // 3M + 5S\n\n // delta = Z1^2\n var delta = this.z.redSqr();\n // gamma = Y1^2\n var gamma = this.y.redSqr();\n // beta = X1 * gamma\n var beta = this.x.redMul(gamma);\n // alpha = 3 * (X1 - delta) * (X1 + delta)\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\n // X3 = alpha^2 - 8 * beta\n var beta4 = beta.redIAdd(beta);\n beta4 = beta4.redIAdd(beta4);\n var beta8 = beta4.redAdd(beta4);\n nx = alpha.redSqr().redISub(beta8);\n // Z3 = (Y1 + Z1)^2 - gamma - delta\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n var ggamma8 = gamma.redSqr();\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ggamma8 = ggamma8.redIAdd(ggamma8);\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n }\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n var a = this.curve.a;\n\n // 4M + 6S + 10A\n var jx = this.x;\n var jy = this.y;\n var jz = this.z;\n var jz4 = jz.redSqr().redSqr();\n\n var jx2 = jx.redSqr();\n var jy2 = jy.redSqr();\n\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n\n var jxd4 = jx.redAdd(jx);\n jxd4 = jxd4.redIAdd(jxd4);\n var t1 = jxd4.redMul(jy2);\n var nx = c.redSqr().redISub(t1.redAdd(t1));\n var t2 = t1.redISub(nx);\n\n var jyd8 = jy2.redSqr();\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n jyd8 = jyd8.redIAdd(jyd8);\n var ny = c.redMul(t2).redISub(jyd8);\n var nz = jy.redAdd(jy).redMul(jz);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n if (!this.curve.zeroA)\n return this.dbl().add(this);\n\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n // 5M + 10S + ...\n\n // XX = X1^2\n var xx = this.x.redSqr();\n // YY = Y1^2\n var yy = this.y.redSqr();\n // ZZ = Z1^2\n var zz = this.z.redSqr();\n // YYYY = YY^2\n var yyyy = yy.redSqr();\n // M = 3 * XX + a * ZZ2; a = 0\n var m = xx.redAdd(xx).redIAdd(xx);\n // MM = M^2\n var mm = m.redSqr();\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n e = e.redIAdd(e);\n e = e.redAdd(e).redIAdd(e);\n e = e.redISub(mm);\n // EE = E^2\n var ee = e.redSqr();\n // T = 16*YYYY\n var t = yyyy.redIAdd(yyyy);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n t = t.redIAdd(t);\n // U = (M + E)^2 - MM - EE - T\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\n // X3 = 4 * (X1 * EE - 4 * YY * U)\n var yyu4 = yy.redMul(u);\n yyu4 = yyu4.redIAdd(yyu4);\n yyu4 = yyu4.redIAdd(yyu4);\n var nx = this.x.redMul(ee).redISub(yyu4);\n nx = nx.redIAdd(nx);\n nx = nx.redIAdd(nx);\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n ny = ny.redIAdd(ny);\n // Z3 = (Z1 + E)^2 - ZZ - EE\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n\n return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n k = new BN(k, kbase);\n\n return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n if (p.type === 'affine')\n return this.eq(p.toJ());\n\n if (this === p)\n return true;\n\n // x1 * z2^2 == x2 * z1^2\n var z2 = this.z.redSqr();\n var pz2 = p.z.redSqr();\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\n return false;\n\n // y1 * z2^3 == y2 * z1^3\n var z3 = z2.redMul(this.z);\n var pz3 = pz2.redMul(p.z);\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n var zs = this.z.redSqr();\n var rx = x.toRed(this.curve.red).redMul(zs);\n if (this.x.cmp(rx) === 0)\n return true;\n\n var xc = x.clone();\n var t = this.curve.redN.redMul(zs);\n for (;;) {\n xc.iadd(this.curve.n);\n if (xc.cmp(this.curve.p) >= 0)\n return false;\n\n rx.redIAdd(t);\n if (this.x.cmp(rx) === 0)\n return true;\n }\n};\n\nJPoint.prototype.inspect = function inspect() {\n if (this.isInfinity())\n return '<EC JPoint Infinity>';\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\n ' y: ' + this.y.toString(16, 2) +\n ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n // XXX This code assumes that zero is always zero in red\n return this.z.cmpn(0) === 0;\n};\n","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\nvar curve = require('./curve');\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n if (options.type === 'short')\n this.curve = new curve.short(options);\n else if (options.type === 'edwards')\n this.curve = new curve.edwards(options);\n else\n this.curve = new curve.mont(options);\n this.g = this.curve.g;\n this.n = this.curve.n;\n this.hash = options.hash;\n\n assert(this.g.validate(), 'Invalid curve');\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n get: function() {\n var curve = new PresetCurve(options);\n Object.defineProperty(curves, name, {\n configurable: true,\n enumerable: true,\n value: curve,\n });\n return curve;\n },\n });\n}\n\ndefineCurve('p192', {\n type: 'short',\n prime: 'p192',\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n hash: hash.sha256,\n gRed: false,\n g: [\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811',\n ],\n});\n\ndefineCurve('p224', {\n type: 'short',\n prime: 'p224',\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n hash: hash.sha256,\n gRed: false,\n g: [\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34',\n ],\n});\n\ndefineCurve('p256', {\n type: 'short',\n prime: null,\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n hash: hash.sha256,\n gRed: false,\n g: [\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5',\n ],\n});\n\ndefineCurve('p384', {\n type: 'short',\n prime: null,\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n hash: hash.sha384,\n gRed: false,\n g: [\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\n '5502f25d bf55296c 3a545e38 72760ab7',\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f',\n ],\n});\n\ndefineCurve('p521', {\n type: 'short',\n prime: null,\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n hash: hash.sha512,\n gRed: false,\n g: [\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\n '3fad0761 353c7086 a272c240 88be9476 9fd16650',\n ],\n});\n\ndefineCurve('curve25519', {\n type: 'mont',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '76d06',\n b: '1',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '9',\n ],\n});\n\ndefineCurve('ed25519', {\n type: 'edwards',\n prime: 'p25519',\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n a: '-1',\n c: '1',\n // -121665 * (121666^(-1)) (mod P)\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n hash: hash.sha256,\n gRed: false,\n g: [\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\n\n // 4/5\n '6666666666666666666666666666666666666666666666666666666666666658',\n ],\n});\n\nvar pre;\ntry {\n pre = require('./precomputed/secp256k1');\n} catch (e) {\n pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n type: 'short',\n prime: 'k256',\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n a: '0',\n b: '7',\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n h: '1',\n hash: hash.sha256,\n\n // Precomputed endomorphism\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n basis: [\n {\n a: '3086d221a7d46bcde86c90e49284eb15',\n b: '-e4437ed6010e88286f547fa90abfe4c3',\n },\n {\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n b: '3086d221a7d46bcde86c90e49284eb15',\n },\n ],\n\n gRed: false,\n g: [\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\n pre,\n ],\n});\n","'use strict';\n\nvar BN = require('bn.js');\nvar HmacDRBG = require('hmac-drbg');\nvar utils = require('../utils');\nvar curves = require('../curves');\nvar rand = require('brorand');\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EC(options) {\n if (!(this instanceof EC))\n return new EC(options);\n\n // Shortcut `elliptic.ec(curve-name)`\n if (typeof options === 'string') {\n assert(Object.prototype.hasOwnProperty.call(curves, options),\n 'Unknown curve ' + options);\n\n options = curves[options];\n }\n\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n if (options instanceof curves.PresetCurve)\n options = { curve: options };\n\n this.curve = options.curve.curve;\n this.n = this.curve.n;\n this.nh = this.n.ushrn(1);\n this.g = this.curve.g;\n\n // Point on curve\n this.g = options.curve.g;\n this.g.precompute(options.curve.n.bitLength() + 1);\n\n // Hash for function for DRBG\n this.hash = options.hash || options.curve.hash;\n}\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n if (!options)\n options = {};\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n entropy: options.entropy || rand(this.hash.hmacStrength),\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n nonce: this.n.toArray(),\n });\n\n var bytes = this.n.byteLength();\n var ns2 = this.n.sub(new BN(2));\n for (;;) {\n var priv = new BN(drbg.generate(bytes));\n if (priv.cmp(ns2) > 0)\n continue;\n\n priv.iaddn(1);\n return this.keyFromPrivate(priv);\n }\n};\n\nEC.prototype._truncateToN = function _truncateToN(msg, truncOnly) {\n var delta = msg.byteLength() * 8 - this.n.bitLength();\n if (delta > 0)\n msg = msg.ushrn(delta);\n if (!truncOnly && msg.cmp(this.n) >= 0)\n return msg.sub(this.n);\n else\n return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n if (typeof enc === 'object') {\n options = enc;\n enc = null;\n }\n if (!options)\n options = {};\n\n key = this.keyFromPrivate(key, enc);\n msg = this._truncateToN(new BN(msg, 16));\n\n // Zero-extend key to provide enough entropy\n var bytes = this.n.byteLength();\n var bkey = key.getPrivate().toArray('be', bytes);\n\n // Zero-extend nonce to have the same byte size as N\n var nonce = msg.toArray('be', bytes);\n\n // Instantiate Hmac_DRBG\n var drbg = new HmacDRBG({\n hash: this.hash,\n entropy: bkey,\n nonce: nonce,\n pers: options.pers,\n persEnc: options.persEnc || 'utf8',\n });\n\n // Number of bytes to generate\n var ns1 = this.n.sub(new BN(1));\n\n for (var iter = 0; ; iter++) {\n var k = options.k ?\n options.k(iter) :\n new BN(drbg.generate(this.n.byteLength()));\n k = this._truncateToN(k, true);\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\n continue;\n\n var kp = this.g.mul(k);\n if (kp.isInfinity())\n continue;\n\n var kpX = kp.getX();\n var r = kpX.umod(this.n);\n if (r.cmpn(0) === 0)\n continue;\n\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n s = s.umod(this.n);\n if (s.cmpn(0) === 0)\n continue;\n\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\n (kpX.cmp(r) !== 0 ? 2 : 0);\n\n // Use complement of `s`, if it is > `n / 2`\n if (options.canonical && s.cmp(this.nh) > 0) {\n s = this.n.sub(s);\n recoveryParam ^= 1;\n }\n\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\n }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n msg = this._truncateToN(new BN(msg, 16));\n key = this.keyFromPublic(key, enc);\n signature = new Signature(signature, 'hex');\n\n // Perform primitive values validation\n var r = signature.r;\n var s = signature.s;\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\n return false;\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\n return false;\n\n // Validate signature\n var sinv = s.invm(this.n);\n var u1 = sinv.mul(msg).umod(this.n);\n var u2 = sinv.mul(r).umod(this.n);\n var p;\n\n if (!this.curve._maxwellTrick) {\n p = this.g.mulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n return p.getX().umod(this.n).cmp(r) === 0;\n }\n\n // NOTE: Greg Maxwell's trick, inspired by:\n // https://git.io/vad3K\n\n p = this.g.jmulAdd(u1, key.getPublic(), u2);\n if (p.isInfinity())\n return false;\n\n // Compare `p.x` of Jacobian point with `r`,\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n // inverse of `p.z^2`\n return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\n assert((3 & j) === j, 'The recovery param is more than two bits');\n signature = new Signature(signature, enc);\n\n var n = this.n;\n var e = new BN(msg);\n var r = signature.r;\n var s = signature.s;\n\n // A set LSB signifies that the y-coordinate is odd\n var isYOdd = j & 1;\n var isSecondKey = j >> 1;\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\n throw new Error('Unable to find sencond key candinate');\n\n // 1.1. Let x = r + jn.\n if (isSecondKey)\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\n else\n r = this.curve.pointFromX(r, isYOdd);\n\n var rInv = signature.r.invm(n);\n var s1 = n.sub(e).mul(rInv).umod(n);\n var s2 = s.mul(rInv).umod(n);\n\n // 1.6.1 Compute Q = r^-1 (sR - eG)\n // Q = r^-1 (sR + -eG)\n return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\n signature = new Signature(signature, enc);\n if (signature.recoveryParam !== null)\n return signature.recoveryParam;\n\n for (var i = 0; i < 4; i++) {\n var Qprime;\n try {\n Qprime = this.recoverPubKey(e, signature, i);\n } catch (e) {\n continue;\n }\n\n if (Qprime.eq(Q))\n return i;\n }\n throw new Error('Unable to find valid recovery factor');\n};\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n this.ec = ec;\n this.priv = null;\n this.pub = null;\n\n // KeyPair(ec, { priv: ..., pub: ... })\n if (options.priv)\n this._importPrivate(options.priv, options.privEnc);\n if (options.pub)\n this._importPublic(options.pub, options.pubEnc);\n}\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n if (pub instanceof KeyPair)\n return pub;\n\n return new KeyPair(ec, {\n pub: pub,\n pubEnc: enc,\n });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n if (priv instanceof KeyPair)\n return priv;\n\n return new KeyPair(ec, {\n priv: priv,\n privEnc: enc,\n });\n};\n\nKeyPair.prototype.validate = function validate() {\n var pub = this.getPublic();\n\n if (pub.isInfinity())\n return { result: false, reason: 'Invalid public key' };\n if (!pub.validate())\n return { result: false, reason: 'Public key is not a point' };\n if (!pub.mul(this.ec.curve.n).isInfinity())\n return { result: false, reason: 'Public key * N != O' };\n\n return { result: true, reason: null };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n // compact is optional argument\n if (typeof compact === 'string') {\n enc = compact;\n compact = null;\n }\n\n if (!this.pub)\n this.pub = this.ec.g.mul(this.priv);\n\n if (!enc)\n return this.pub;\n\n return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n if (enc === 'hex')\n return this.priv.toString(16, 2);\n else\n return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n this.priv = new BN(key, enc || 16);\n\n // Ensure that the priv won't be bigger than n, otherwise we may fail\n // in fixed multiplication method\n this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n if (key.x || key.y) {\n // Montgomery points only have an `x` coordinate.\n // Weierstrass/Edwards points on the other hand have both `x` and\n // `y` coordinates.\n if (this.ec.curve.type === 'mont') {\n assert(key.x, 'Need x coordinate');\n } else if (this.ec.curve.type === 'short' ||\n this.ec.curve.type === 'edwards') {\n assert(key.x && key.y, 'Need both x and y coordinate');\n }\n this.pub = this.ec.curve.point(key.x, key.y);\n return;\n }\n this.pub = this.ec.curve.decodePoint(key, enc);\n};\n\n// ECDH\nKeyPair.prototype.derive = function derive(pub) {\n if(!pub.validate()) {\n assert(pub.validate(), 'public point not validated');\n }\n return pub.mul(this.priv).getX();\n};\n\n// ECDSA\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};\n","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n if (options instanceof Signature)\n return options;\n\n if (this._importDER(options, enc))\n return;\n\n assert(options.r && options.s, 'Signature without r or s');\n this.r = new BN(options.r, 16);\n this.s = new BN(options.s, 16);\n if (options.recoveryParam === undefined)\n this.recoveryParam = null;\n else\n this.recoveryParam = options.recoveryParam;\n}\nmodule.exports = Signature;\n\nfunction Position() {\n this.place = 0;\n}\n\nfunction getLength(buf, p) {\n var initial = buf[p.place++];\n if (!(initial & 0x80)) {\n return initial;\n }\n var octetLen = initial & 0xf;\n\n // Indefinite length or overflow\n if (octetLen === 0 || octetLen > 4) {\n return false;\n }\n\n var val = 0;\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n val <<= 8;\n val |= buf[off];\n val >>>= 0;\n }\n\n // Leading zeroes\n if (val <= 0x7f) {\n return false;\n }\n\n p.place = off;\n return val;\n}\n\nfunction rmPadding(buf) {\n var i = 0;\n var len = buf.length - 1;\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n i++;\n }\n if (i === 0) {\n return buf;\n }\n return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n data = utils.toArray(data, enc);\n var p = new Position();\n if (data[p.place++] !== 0x30) {\n return false;\n }\n var len = getLength(data, p);\n if (len === false) {\n return false;\n }\n if ((len + p.place) !== data.length) {\n return false;\n }\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var rlen = getLength(data, p);\n if (rlen === false) {\n return false;\n }\n var r = data.slice(p.place, rlen + p.place);\n p.place += rlen;\n if (data[p.place++] !== 0x02) {\n return false;\n }\n var slen = getLength(data, p);\n if (slen === false) {\n return false;\n }\n if (data.length !== slen + p.place) {\n return false;\n }\n var s = data.slice(p.place, slen + p.place);\n if (r[0] === 0) {\n if (r[1] & 0x80) {\n r = r.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n if (s[0] === 0) {\n if (s[1] & 0x80) {\n s = s.slice(1);\n } else {\n // Leading zeroes\n return false;\n }\n }\n\n this.r = new BN(r);\n this.s = new BN(s);\n this.recoveryParam = null;\n\n return true;\n};\n\nfunction constructLength(arr, len) {\n if (len < 0x80) {\n arr.push(len);\n return;\n }\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n arr.push(octets | 0x80);\n while (--octets) {\n arr.push((len >>> (octets << 3)) & 0xff);\n }\n arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n var r = this.r.toArray();\n var s = this.s.toArray();\n\n // Pad values\n if (r[0] & 0x80)\n r = [ 0 ].concat(r);\n // Pad values\n if (s[0] & 0x80)\n s = [ 0 ].concat(s);\n\n r = rmPadding(r);\n s = rmPadding(s);\n\n while (!s[0] && !(s[1] & 0x80)) {\n s = s.slice(1);\n }\n var arr = [ 0x02 ];\n constructLength(arr, r.length);\n arr = arr.concat(r);\n arr.push(0x02);\n constructLength(arr, s.length);\n var backHalf = arr.concat(s);\n var res = [ 0x30 ];\n constructLength(res, backHalf.length);\n res = res.concat(backHalf);\n return utils.encode(res, enc);\n};\n","'use strict';\n\nvar hash = require('hash.js');\nvar curves = require('../curves');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar KeyPair = require('./key');\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\n\n if (!(this instanceof EDDSA))\n return new EDDSA(curve);\n\n curve = curves[curve].curve;\n this.curve = curve;\n this.g = curve.g;\n this.g.precompute(curve.n.bitLength() + 1);\n\n this.pointClass = curve.point().constructor;\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\nEDDSA.prototype.sign = function sign(message, secret) {\n message = parseBytes(message);\n var key = this.keyFromSecret(secret);\n var r = this.hashInt(key.messagePrefix(), message);\n var R = this.g.mul(r);\n var Rencoded = this.encodePoint(R);\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\n .mul(key.priv());\n var S = r.add(s_).umod(this.curve.n);\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\n};\n\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n message = parseBytes(message);\n sig = this.makeSignature(sig);\n var key = this.keyFromPublic(pub);\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n var SG = this.g.mul(sig.S());\n var RplusAh = sig.R().add(key.pub().mul(h));\n return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n var hash = this.hash();\n for (var i = 0; i < arguments.length; i++)\n hash.update(arguments[i]);\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n if (sig instanceof Signature)\n return sig;\n return new Signature(this, sig);\n};\n\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n var enc = point.getY().toArray('le', this.encodingLength);\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n bytes = utils.parseBytes(bytes);\n\n var lastIx = bytes.length - 1;\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n\n var y = utils.intFromLE(normed);\n return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n return val instanceof this.pointClass;\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\nfunction KeyPair(eddsa, params) {\n this.eddsa = eddsa;\n this._secret = parseBytes(params.secret);\n if (eddsa.isPoint(params.pub))\n this._pub = params.pub;\n else\n this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n if (pub instanceof KeyPair)\n return pub;\n return new KeyPair(eddsa, { pub: pub });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n if (secret instanceof KeyPair)\n return secret;\n return new KeyPair(eddsa, { secret: secret });\n};\n\nKeyPair.prototype.secret = function secret() {\n return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n return this.eddsa.encodePoint(this.pub());\n});\n\ncachedProperty(KeyPair, 'pub', function pub() {\n if (this._pubBytes)\n return this.eddsa.decodePoint(this._pubBytes);\n return this.eddsa.g.mul(this.priv());\n});\n\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n var eddsa = this.eddsa;\n var hash = this.hash();\n var lastIx = eddsa.encodingLength - 1;\n\n var a = hash.slice(0, eddsa.encodingLength);\n a[0] &= 248;\n a[lastIx] &= 127;\n a[lastIx] |= 64;\n\n return a;\n});\n\ncachedProperty(KeyPair, 'priv', function priv() {\n return this.eddsa.decodeInt(this.privBytes());\n});\n\ncachedProperty(KeyPair, 'hash', function hash() {\n return this.eddsa.hash().update(this.secret()).digest();\n});\n\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n assert(this._secret, 'KeyPair can only verify');\n return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n assert(this._secret, 'KeyPair is public only');\n return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;\n","'use strict';\n\nvar BN = require('bn.js');\nvar utils = require('../utils');\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\nfunction Signature(eddsa, sig) {\n this.eddsa = eddsa;\n\n if (typeof sig !== 'object')\n sig = parseBytes(sig);\n\n if (Array.isArray(sig)) {\n sig = {\n R: sig.slice(0, eddsa.encodingLength),\n S: sig.slice(eddsa.encodingLength),\n };\n }\n\n assert(sig.R && sig.S, 'Signature without R or S');\n\n if (eddsa.isPoint(sig.R))\n this._R = sig.R;\n if (sig.S instanceof BN)\n this._S = sig.S;\n\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n return this.eddsa.decodeInt(this.Sencoded());\n});\n\ncachedProperty(Signature, 'R', function R() {\n return this.eddsa.decodePoint(this.Rencoded());\n});\n\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n return this.eddsa.encodePoint(this.R());\n});\n\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;\n","module.exports = {\n doubles: {\n step: 4,\n points: [\n [\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821',\n ],\n [\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf',\n ],\n [\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695',\n ],\n [\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9',\n ],\n [\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36',\n ],\n [\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f',\n ],\n [\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999',\n ],\n [\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09',\n ],\n [\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d',\n ],\n [\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088',\n ],\n [\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d',\n ],\n [\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8',\n ],\n [\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a',\n ],\n [\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453',\n ],\n [\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160',\n ],\n [\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0',\n ],\n [\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6',\n ],\n [\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589',\n ],\n [\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17',\n ],\n [\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda',\n ],\n [\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd',\n ],\n [\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2',\n ],\n [\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6',\n ],\n [\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f',\n ],\n [\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01',\n ],\n [\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3',\n ],\n [\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f',\n ],\n [\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7',\n ],\n [\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78',\n ],\n [\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1',\n ],\n [\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150',\n ],\n [\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82',\n ],\n [\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc',\n ],\n [\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b',\n ],\n [\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51',\n ],\n [\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45',\n ],\n [\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120',\n ],\n [\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84',\n ],\n [\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d',\n ],\n [\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d',\n ],\n [\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8',\n ],\n [\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8',\n ],\n [\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac',\n ],\n [\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f',\n ],\n [\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962',\n ],\n [\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907',\n ],\n [\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec',\n ],\n [\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d',\n ],\n [\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414',\n ],\n [\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd',\n ],\n [\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0',\n ],\n [\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811',\n ],\n [\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1',\n ],\n [\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c',\n ],\n [\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73',\n ],\n [\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd',\n ],\n [\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405',\n ],\n [\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589',\n ],\n [\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e',\n ],\n [\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27',\n ],\n [\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1',\n ],\n [\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482',\n ],\n [\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945',\n ],\n [\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573',\n ],\n [\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82',\n ],\n ],\n },\n naf: {\n wnd: 7,\n points: [\n [\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672',\n ],\n [\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6',\n ],\n [\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da',\n ],\n [\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37',\n ],\n [\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b',\n ],\n [\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81',\n ],\n [\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58',\n ],\n [\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77',\n ],\n [\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a',\n ],\n [\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c',\n ],\n [\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67',\n ],\n [\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402',\n ],\n [\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55',\n ],\n [\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482',\n ],\n [\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82',\n ],\n [\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396',\n ],\n [\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49',\n ],\n [\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf',\n ],\n [\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a',\n ],\n [\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7',\n ],\n [\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933',\n ],\n [\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a',\n ],\n [\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6',\n ],\n [\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37',\n ],\n [\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e',\n ],\n [\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6',\n ],\n [\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476',\n ],\n [\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40',\n ],\n [\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61',\n ],\n [\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683',\n ],\n [\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5',\n ],\n [\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b',\n ],\n [\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417',\n ],\n [\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868',\n ],\n [\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a',\n ],\n [\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6',\n ],\n [\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996',\n ],\n [\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e',\n ],\n [\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d',\n ],\n [\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2',\n ],\n [\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e',\n ],\n [\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437',\n ],\n [\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311',\n ],\n [\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4',\n ],\n [\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575',\n ],\n [\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d',\n ],\n [\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d',\n ],\n [\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629',\n ],\n [\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06',\n ],\n [\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374',\n ],\n [\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee',\n ],\n [\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1',\n ],\n [\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b',\n ],\n [\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661',\n ],\n [\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6',\n ],\n [\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e',\n ],\n [\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d',\n ],\n [\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc',\n ],\n [\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4',\n ],\n [\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c',\n ],\n [\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b',\n ],\n [\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913',\n ],\n [\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154',\n ],\n [\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865',\n ],\n [\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc',\n ],\n [\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224',\n ],\n [\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e',\n ],\n [\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6',\n ],\n [\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511',\n ],\n [\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b',\n ],\n [\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2',\n ],\n [\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c',\n ],\n [\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3',\n ],\n [\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d',\n ],\n [\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700',\n ],\n [\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4',\n ],\n [\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196',\n ],\n [\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4',\n ],\n [\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257',\n ],\n [\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13',\n ],\n [\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096',\n ],\n [\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38',\n ],\n [\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f',\n ],\n [\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448',\n ],\n [\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a',\n ],\n [\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4',\n ],\n [\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437',\n ],\n [\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7',\n ],\n [\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d',\n ],\n [\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a',\n ],\n [\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54',\n ],\n [\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77',\n ],\n [\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517',\n ],\n [\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10',\n ],\n [\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125',\n ],\n [\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e',\n ],\n [\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1',\n ],\n [\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2',\n ],\n [\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423',\n ],\n [\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8',\n ],\n [\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758',\n ],\n [\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375',\n ],\n [\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d',\n ],\n [\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec',\n ],\n [\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0',\n ],\n [\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c',\n ],\n [\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4',\n ],\n [\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f',\n ],\n [\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649',\n ],\n [\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826',\n ],\n [\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5',\n ],\n [\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87',\n ],\n [\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b',\n ],\n [\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc',\n ],\n [\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c',\n ],\n [\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f',\n ],\n [\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a',\n ],\n [\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46',\n ],\n [\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f',\n ],\n [\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03',\n ],\n [\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08',\n ],\n [\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8',\n ],\n [\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373',\n ],\n [\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3',\n ],\n [\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8',\n ],\n [\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1',\n ],\n [\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9',\n ],\n ],\n },\n};\n","'use strict';\n\nvar utils = exports;\nvar BN = require('bn.js');\nvar minAssert = require('minimalistic-assert');\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode;\n\n// Represent num in a w-NAF form\nfunction getNAF(num, w, bits) {\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\n naf.fill(0);\n\n var ws = 1 << (w + 1);\n var k = num.clone();\n\n for (var i = 0; i < naf.length; i++) {\n var z;\n var mod = k.andln(ws - 1);\n if (k.isOdd()) {\n if (mod > (ws >> 1) - 1)\n z = (ws >> 1) - mod;\n else\n z = mod;\n k.isubn(z);\n } else {\n z = 0;\n }\n\n naf[i] = z;\n k.iushrn(1);\n }\n\n return naf;\n}\nutils.getNAF = getNAF;\n\n// Represent k1, k2 in a Joint Sparse Form\nfunction getJSF(k1, k2) {\n var jsf = [\n [],\n [],\n ];\n\n k1 = k1.clone();\n k2 = k2.clone();\n var d1 = 0;\n var d2 = 0;\n var m8;\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n // First phase\n var m14 = (k1.andln(3) + d1) & 3;\n var m24 = (k2.andln(3) + d2) & 3;\n if (m14 === 3)\n m14 = -1;\n if (m24 === 3)\n m24 = -1;\n var u1;\n if ((m14 & 1) === 0) {\n u1 = 0;\n } else {\n m8 = (k1.andln(7) + d1) & 7;\n if ((m8 === 3 || m8 === 5) && m24 === 2)\n u1 = -m14;\n else\n u1 = m14;\n }\n jsf[0].push(u1);\n\n var u2;\n if ((m24 & 1) === 0) {\n u2 = 0;\n } else {\n m8 = (k2.andln(7) + d2) & 7;\n if ((m8 === 3 || m8 === 5) && m14 === 2)\n u2 = -m24;\n else\n u2 = m24;\n }\n jsf[1].push(u2);\n\n // Second phase\n if (2 * d1 === u1 + 1)\n d1 = 1 - d1;\n if (2 * d2 === u2 + 1)\n d2 = 1 - d2;\n k1.iushrn(1);\n k2.iushrn(1);\n }\n\n return jsf;\n}\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n var key = '_' + name;\n obj.prototype[name] = function cachedProperty() {\n return this[key] !== undefined ? this[key] :\n this[key] = computer.call(this);\n };\n}\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\n bytes;\n}\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n return new BN(bytes, 'hex', 'le');\n}\nutils.intFromLE = intFromLE;\n\n","'use strict';\n\n/**\n * @typedef {{ [key: string]: any }} Extensions\n * @typedef {Error} Err\n * @property {string} message\n */\n\n/**\n *\n * @param {Error} obj\n * @param {Extensions} props\n * @returns {Error & Extensions}\n */\nfunction assign(obj, props) {\n for (const key in props) {\n Object.defineProperty(obj, key, {\n value: props[key],\n enumerable: true,\n configurable: true,\n });\n }\n\n return obj;\n}\n\n/**\n *\n * @param {any} err - An Error\n * @param {string|Extensions} code - A string code or props to set on the error\n * @param {Extensions} [props] - Props to set on the error\n * @returns {Error & Extensions}\n */\nfunction createError(err, code, props) {\n if (!err || typeof err === 'string') {\n throw new TypeError('Please pass an Error to err-code');\n }\n\n if (!props) {\n props = {};\n }\n\n if (typeof code === 'object') {\n props = code;\n code = '';\n }\n\n if (code) {\n props.code = code;\n }\n\n try {\n return assign(err, props);\n } catch (_) {\n props.message = err.message;\n props.stack = err.stack;\n\n const ErrClass = function () {};\n\n ErrClass.prototype = Object.create(Object.getPrototypeOf(err));\n\n // @ts-ignore\n const output = assign(new ErrClass(), props);\n\n return output;\n }\n}\n\nmodule.exports = createError;\n","/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0}),exports.promisify=promisify;var customArgumentsToken=\"__ES6-PROMISIFY--CUSTOM-ARGUMENTS__\";function promisify(a){if(\"function\"!=typeof a)throw new TypeError(\"Argument to promisify must be a function\");var b=a[customArgumentsToken],c=promisify.Promise||Promise;if(\"function\"!=typeof c)throw new Error(\"No Promise implementation found; do you need a polyfill?\");return function(){for(var d=this,e=arguments.length,f=Array(e),g=0;g<e;g++)f[g]=arguments[g];return new c(function(c,e){f.push(function(a){if(a)return e(a);for(var d=arguments.length,f=Array(1<d?d-1:0),g=1;g<d;g++)f[g-1]=arguments[g];if(1===f.length||!b)return c(f[0]);var h={};f.forEach(function(a,c){var d=b[c];d&&(h[d]=a)}),c(h)}),a.apply(d,f)})}}promisify.argumentNames=\"__ES6-PROMISIFY--CUSTOM-ARGUMENTS__\",promisify.Promise=void 0;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst event_iterator_1 = require(\"./event-iterator\");\nexports.EventIterator = event_iterator_1.EventIterator;\nfunction subscribe(event, options, evOptions) {\n return new event_iterator_1.EventIterator(({ push }) => {\n this.addEventListener(event, push, options);\n return () => this.removeEventListener(event, push, options);\n }, evOptions);\n}\nexports.subscribe = subscribe;\nexports.default = event_iterator_1.EventIterator;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass EventQueue {\n constructor() {\n this.pullQueue = [];\n this.pushQueue = [];\n this.eventHandlers = {};\n this.isPaused = false;\n this.isStopped = false;\n }\n push(value) {\n if (this.isStopped)\n return;\n const resolution = { value, done: false };\n if (this.pullQueue.length) {\n const placeholder = this.pullQueue.shift();\n if (placeholder)\n placeholder.resolve(resolution);\n }\n else {\n this.pushQueue.push(Promise.resolve(resolution));\n if (this.highWaterMark !== undefined &&\n this.pushQueue.length >= this.highWaterMark &&\n !this.isPaused) {\n this.isPaused = true;\n if (this.eventHandlers.highWater) {\n this.eventHandlers.highWater();\n }\n else if (console) {\n console.warn(`EventIterator queue reached ${this.pushQueue.length} items`);\n }\n }\n }\n }\n stop() {\n if (this.isStopped)\n return;\n this.isStopped = true;\n this.remove();\n for (const placeholder of this.pullQueue) {\n placeholder.resolve({ value: undefined, done: true });\n }\n this.pullQueue.length = 0;\n }\n fail(error) {\n if (this.isStopped)\n return;\n this.isStopped = true;\n this.remove();\n if (this.pullQueue.length) {\n for (const placeholder of this.pullQueue) {\n placeholder.reject(error);\n }\n this.pullQueue.length = 0;\n }\n else {\n const rejection = Promise.reject(error);\n /* Attach error handler to avoid leaking an unhandled promise rejection. */\n rejection.catch(() => { });\n this.pushQueue.push(rejection);\n }\n }\n remove() {\n Promise.resolve().then(() => {\n if (this.removeCallback)\n this.removeCallback();\n });\n }\n [Symbol.asyncIterator]() {\n return {\n next: (value) => {\n const result = this.pushQueue.shift();\n if (result) {\n if (this.lowWaterMark !== undefined &&\n this.pushQueue.length <= this.lowWaterMark &&\n this.isPaused) {\n this.isPaused = false;\n if (this.eventHandlers.lowWater) {\n this.eventHandlers.lowWater();\n }\n }\n return result;\n }\n else if (this.isStopped) {\n return Promise.resolve({ value: undefined, done: true });\n }\n else {\n return new Promise((resolve, reject) => {\n this.pullQueue.push({ resolve, reject });\n });\n }\n },\n return: () => {\n this.isStopped = true;\n this.pushQueue.length = 0;\n this.remove();\n return Promise.resolve({ value: undefined, done: true });\n },\n };\n }\n}\nclass EventIterator {\n constructor(listen, { highWaterMark = 100, lowWaterMark = 1 } = {}) {\n const queue = new EventQueue();\n queue.highWaterMark = highWaterMark;\n queue.lowWaterMark = lowWaterMark;\n queue.removeCallback =\n listen({\n push: value => queue.push(value),\n stop: () => queue.stop(),\n fail: error => queue.fail(error),\n on: (event, fn) => {\n queue.eventHandlers[event] = fn;\n },\n }) || (() => { });\n this[Symbol.asyncIterator] = () => queue[Symbol.asyncIterator]();\n Object.freeze(this);\n }\n}\nexports.EventIterator = EventIterator;\nexports.default = EventIterator;\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\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 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","module.exports = class FixedFIFO {\n constructor (hwm) {\n if (!(hwm > 0) || ((hwm - 1) & hwm) !== 0) throw new Error('Max size for a FixedFIFO should be a power of two')\n this.buffer = new Array(hwm)\n this.mask = hwm - 1\n this.top = 0\n this.btm = 0\n this.next = null\n }\n\n push (data) {\n if (this.buffer[this.top] !== undefined) return false\n this.buffer[this.top] = data\n this.top = (this.top + 1) & this.mask\n return true\n }\n\n shift () {\n const last = this.buffer[this.btm]\n if (last === undefined) return undefined\n this.buffer[this.btm] = undefined\n this.btm = (this.btm + 1) & this.mask\n return last\n }\n\n isEmpty () {\n return this.buffer[this.btm] === undefined\n }\n}\n","const FixedFIFO = require('./fixed-size')\n\nmodule.exports = class FastFIFO {\n constructor (hwm) {\n this.hwm = hwm || 16\n this.head = new FixedFIFO(this.hwm)\n this.tail = this.head\n }\n\n push (val) {\n if (!this.head.push(val)) {\n const prev = this.head\n this.head = prev.next = new FixedFIFO(2 * this.head.buffer.length)\n this.head.push(val)\n }\n }\n\n shift () {\n const val = this.tail.shift()\n if (val === undefined && this.tail.next) {\n const next = this.tail.next\n this.tail.next = null\n this.tail = next\n return this.tail.shift()\n }\n return val\n }\n\n isEmpty () {\n return this.head.isEmpty()\n }\n}\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ 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')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? 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([][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'%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([][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 ? 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 ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? 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\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) {\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('has');\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);\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\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","// If the passed object is an (async) iterable, then get the iterator\n// If it's probably an iterator already (i.e. has next function) return it\n// else throw\nmodule.exports = function getIterator (obj) {\n if (obj) {\n if (typeof obj[Symbol.iterator] === 'function') {\n return obj[Symbol.iterator]()\n }\n if (typeof obj[Symbol.asyncIterator] === 'function') {\n return obj[Symbol.asyncIterator]()\n }\n if (typeof obj.next === 'function') {\n return obj // probably an iterator\n }\n }\n throw new Error('argument is not an iterator or iterable')\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 bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","var hash = exports;\n\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac');\n\n// Proxy hash functions to the main object\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n this.pending = null;\n this.pendingTotal = 0;\n this.blockSize = this.constructor.blockSize;\n this.outSize = this.constructor.outSize;\n this.hmacStrength = this.constructor.hmacStrength;\n this.padLength = this.constructor.padLength / 8;\n this.endian = 'big';\n\n this._delta8 = this.blockSize / 8;\n this._delta32 = this.blockSize / 32;\n}\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n // Convert message to array, pad it, and join into 32bit blocks\n msg = utils.toArray(msg, enc);\n if (!this.pending)\n this.pending = msg;\n else\n this.pending = this.pending.concat(msg);\n this.pendingTotal += msg.length;\n\n // Enough data, try updating\n if (this.pending.length >= this._delta8) {\n msg = this.pending;\n\n // Process pending data in blocks\n var r = msg.length % this._delta8;\n this.pending = msg.slice(msg.length - r, msg.length);\n if (this.pending.length === 0)\n this.pending = null;\n\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\n for (var i = 0; i < msg.length; i += this._delta32)\n this._update(msg, i, i + this._delta32);\n }\n\n return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n this.update(this._pad());\n assert(this.pending === null);\n\n return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n var len = this.pendingTotal;\n var bytes = this._delta8;\n var k = bytes - ((len + this.padLength) % bytes);\n var res = new Array(k + this.padLength);\n res[0] = 0x80;\n for (var i = 1; i < k; i++)\n res[i] = 0;\n\n // Append length\n len <<= 3;\n if (this.endian === 'big') {\n for (var t = 8; t < this.padLength; t++)\n res[i++] = 0;\n\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = len & 0xff;\n } else {\n res[i++] = len & 0xff;\n res[i++] = (len >>> 8) & 0xff;\n res[i++] = (len >>> 16) & 0xff;\n res[i++] = (len >>> 24) & 0xff;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n res[i++] = 0;\n\n for (t = 8; t < this.padLength; t++)\n res[i++] = 0;\n }\n\n return res;\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n if (!(this instanceof Hmac))\n return new Hmac(hash, key, enc);\n this.Hash = hash;\n this.blockSize = hash.blockSize / 8;\n this.outSize = hash.outSize / 8;\n this.inner = null;\n this.outer = null;\n\n this._init(utils.toArray(key, enc));\n}\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n // Shorten key, if needed\n if (key.length > this.blockSize)\n key = new this.Hash().update(key).digest();\n assert(key.length <= this.blockSize);\n\n // Add padding to key\n for (var i = key.length; i < this.blockSize; i++)\n key.push(0);\n\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x36;\n this.inner = new this.Hash().update(key);\n\n // 0x36 ^ 0x5c = 0x6a\n for (i = 0; i < key.length; i++)\n key[i] ^= 0x6a;\n this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n this.inner.update(msg, enc);\n return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n this.outer.update(this.inner.digest());\n return this.outer.digest(enc);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n if (!(this instanceof RIPEMD160))\n return new RIPEMD160();\n\n BlockHash.call(this);\n\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\n this.endian = 'little';\n}\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\n\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n var A = this.h[0];\n var B = this.h[1];\n var C = this.h[2];\n var D = this.h[3];\n var E = this.h[4];\n var Ah = A;\n var Bh = B;\n var Ch = C;\n var Dh = D;\n var Eh = E;\n for (var j = 0; j < 80; j++) {\n var T = sum32(\n rotl32(\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\n s[j]),\n E);\n A = E;\n E = D;\n D = rotl32(C, 10);\n C = B;\n B = T;\n T = sum32(\n rotl32(\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\n sh[j]),\n Eh);\n Ah = Eh;\n Eh = Dh;\n Dh = rotl32(Ch, 10);\n Ch = Bh;\n Bh = T;\n }\n T = sum32_3(this.h[1], C, Dh);\n this.h[1] = sum32_3(this.h[2], D, Eh);\n this.h[2] = sum32_3(this.h[3], E, Ah);\n this.h[3] = sum32_3(this.h[4], A, Bh);\n this.h[4] = sum32_3(this.h[0], B, Ch);\n this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'little');\n else\n return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n if (j <= 15)\n return x ^ y ^ z;\n else if (j <= 31)\n return (x & y) | ((~x) & z);\n else if (j <= 47)\n return (x | (~y)) ^ z;\n else if (j <= 63)\n return (x & z) | (y & (~z));\n else\n return x ^ (y | (~z));\n}\n\nfunction K(j) {\n if (j <= 15)\n return 0x00000000;\n else if (j <= 31)\n return 0x5a827999;\n else if (j <= 47)\n return 0x6ed9eba1;\n else if (j <= 63)\n return 0x8f1bbcdc;\n else\n return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n if (j <= 15)\n return 0x50a28be6;\n else if (j <= 31)\n return 0x5c4dd124;\n else if (j <= 47)\n return 0x6d703ef3;\n else if (j <= 63)\n return 0x7a6d76e9;\n else\n return 0x00000000;\n}\n\nvar r = [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\n];\n\nvar rh = [\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\n];\n\nvar s = [\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\n];\n\nvar sh = [\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\n];\n","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\n\nvar sha1_K = [\n 0x5A827999, 0x6ED9EBA1,\n 0x8F1BBCDC, 0xCA62C1D6\n];\n\nfunction SHA1() {\n if (!(this instanceof SHA1))\n return new SHA1();\n\n BlockHash.call(this);\n this.h = [\n 0x67452301, 0xefcdab89, 0x98badcfe,\n 0x10325476, 0xc3d2e1f0 ];\n this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\n\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n\n for(; i < W.length; i++)\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n\n for (i = 0; i < W.length; i++) {\n var s = ~~(i / 20);\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n e = d;\n d = c;\n c = rotl32(b, 30);\n b = a;\n a = t;\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n if (!(this instanceof SHA224))\n return new SHA224();\n\n SHA256.call(this);\n this.h = [\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\n}\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\n\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n // Just truncate output\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 7), 'big');\n else\n return utils.split32(this.h.slice(0, 7), 'big');\n};\n\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar shaCommon = require('./common');\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\n\nvar BlockHash = common.BlockHash;\n\nvar sha256_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\nfunction SHA256() {\n if (!(this instanceof SHA256))\n return new SHA256();\n\n BlockHash.call(this);\n this.h = [\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n ];\n this.k = sha256_K;\n this.W = new Array(64);\n}\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\n\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n var W = this.W;\n\n for (var i = 0; i < 16; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i++)\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n\n var a = this.h[0];\n var b = this.h[1];\n var c = this.h[2];\n var d = this.h[3];\n var e = this.h[4];\n var f = this.h[5];\n var g = this.h[6];\n var h = this.h[7];\n\n assert(this.k.length === W.length);\n for (i = 0; i < W.length; i++) {\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n var T2 = sum32(s0_256(a), maj32(a, b, c));\n h = g;\n g = f;\n f = e;\n e = sum32(d, T1);\n d = c;\n c = b;\n b = a;\n a = sum32(T1, T2);\n }\n\n this.h[0] = sum32(this.h[0], a);\n this.h[1] = sum32(this.h[1], b);\n this.h[2] = sum32(this.h[2], c);\n this.h[3] = sum32(this.h[3], d);\n this.h[4] = sum32(this.h[4], e);\n this.h[5] = sum32(this.h[5], f);\n this.h[6] = sum32(this.h[6], g);\n this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n if (!(this instanceof SHA384))\n return new SHA384();\n\n SHA512.call(this);\n this.h = [\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}\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\n\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h.slice(0, 12), 'big');\n else\n return utils.split32(this.h.slice(0, 12), 'big');\n};\n","'use strict';\n\nvar utils = require('../utils');\nvar common = require('../common');\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\n\nvar BlockHash = common.BlockHash;\n\nvar sha512_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\nfunction SHA512() {\n if (!(this instanceof SHA512))\n return new SHA512();\n\n BlockHash.call(this);\n this.h = [\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 this.k = sha512_K;\n this.W = new Array(160);\n}\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\n\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n var W = this.W;\n\n // 32 x 32bit words\n for (var i = 0; i < 32; i++)\n W[i] = msg[start + i];\n for (; i < W.length; i += 2) {\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n var c1_hi = W[i - 14]; // i - 7\n var c1_lo = W[i - 13];\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n var c3_hi = W[i - 32]; // i - 16\n var c3_lo = W[i - 31];\n\n W[i] = sum64_4_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n W[i + 1] = sum64_4_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo);\n }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n this._prepareBlock(msg, start);\n\n var W = this.W;\n\n var ah = this.h[0];\n var al = this.h[1];\n var bh = this.h[2];\n var bl = this.h[3];\n var ch = this.h[4];\n var cl = this.h[5];\n var dh = this.h[6];\n var dl = this.h[7];\n var eh = this.h[8];\n var el = this.h[9];\n var fh = this.h[10];\n var fl = this.h[11];\n var gh = this.h[12];\n var gl = this.h[13];\n var hh = this.h[14];\n var hl = this.h[15];\n\n assert(this.k.length === W.length);\n for (var i = 0; i < W.length; i += 2) {\n var c0_hi = hh;\n var c0_lo = hl;\n var c1_hi = s1_512_hi(eh, el);\n var c1_lo = s1_512_lo(eh, el);\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n var c3_hi = this.k[i];\n var c3_lo = this.k[i + 1];\n var c4_hi = W[i];\n var c4_lo = W[i + 1];\n\n var T1_hi = sum64_5_hi(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n var T1_lo = sum64_5_lo(\n c0_hi, c0_lo,\n c1_hi, c1_lo,\n c2_hi, c2_lo,\n c3_hi, c3_lo,\n c4_hi, c4_lo);\n\n c0_hi = s0_512_hi(ah, al);\n c0_lo = s0_512_lo(ah, al);\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n\n hh = gh;\n hl = gl;\n\n gh = fh;\n gl = fl;\n\n fh = eh;\n fl = el;\n\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\n\n dh = ch;\n dl = cl;\n\n ch = bh;\n cl = bl;\n\n bh = ah;\n bl = al;\n\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n }\n\n sum64(this.h, 0, ah, al);\n sum64(this.h, 2, bh, bl);\n sum64(this.h, 4, ch, cl);\n sum64(this.h, 6, dh, dl);\n sum64(this.h, 8, eh, el);\n sum64(this.h, 10, fh, fl);\n sum64(this.h, 12, gh, gl);\n sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n if (enc === 'hex')\n return utils.toHex32(this.h, 'big');\n else\n return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ ((~xh) & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ ((~xl) & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 28);\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 28);\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 14);\n var c1_hi = rotr64_hi(xh, xl, 18);\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 14);\n var c1_lo = rotr64_lo(xh, xl, 18);\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 1);\n var c1_hi = rotr64_hi(xh, xl, 8);\n var c2_hi = shr64_hi(xh, xl, 7);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 1);\n var c1_lo = rotr64_lo(xh, xl, 8);\n var c2_lo = shr64_lo(xh, xl, 7);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n var c0_hi = rotr64_hi(xh, xl, 19);\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\n var c2_hi = shr64_hi(xh, xl, 6);\n\n var r = c0_hi ^ c1_hi ^ c2_hi;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n var c0_lo = rotr64_lo(xh, xl, 19);\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\n var c2_lo = shr64_lo(xh, xl, 6);\n\n var r = c0_lo ^ c1_lo ^ c2_lo;\n if (r < 0)\n r += 0x100000000;\n return r;\n}\n","'use strict';\n\nvar utils = require('../utils');\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n if (s === 0)\n return ch32(x, y, z);\n if (s === 1 || s === 3)\n return p32(x, y, z);\n if (s === 2)\n return maj32(x, y, z);\n}\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n return (x & y) ^ ((~x) & z);\n}\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n return (x & y) ^ (x & z) ^ (y & z);\n}\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n return x ^ y ^ z;\n}\nexports.p32 = p32;\n\nfunction s0_256(x) {\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\n}\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\n}\nexports.g1_256 = g1_256;\n","'use strict';\n\nvar assert = require('minimalistic-assert');\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n return false;\n }\n if (i < 0 || i + 1 >= msg.length) {\n return false;\n }\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg === 'string') {\n if (!enc) {\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n // Apache License 2.0\n // https://github.com/google/closure-library/blob/master/LICENSE\n var p = 0;\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n if (c < 128) {\n res[p++] = c;\n } else if (c < 2048) {\n res[p++] = (c >> 6) | 192;\n res[p++] = (c & 63) | 128;\n } else if (isSurrogatePair(msg, i)) {\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n res[p++] = (c >> 18) | 240;\n res[p++] = ((c >> 12) & 63) | 128;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n } else {\n res[p++] = (c >> 12) | 224;\n res[p++] = ((c >> 6) & 63) | 128;\n res[p++] = (c & 63) | 128;\n }\n }\n } else if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n }\n } else {\n for (i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n }\n return res;\n}\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nexports.toHex = toHex;\n\nfunction htonl(w) {\n var res = (w >>> 24) |\n ((w >>> 8) & 0xff00) |\n ((w << 8) & 0xff0000) |\n ((w & 0xff) << 24);\n return res >>> 0;\n}\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n var res = '';\n for (var i = 0; i < msg.length; i++) {\n var w = msg[i];\n if (endian === 'little')\n w = htonl(w);\n res += zero8(w.toString(16));\n }\n return res;\n}\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n if (word.length === 7)\n return '0' + word;\n else if (word.length === 6)\n return '00' + word;\n else if (word.length === 5)\n return '000' + word;\n else if (word.length === 4)\n return '0000' + word;\n else if (word.length === 3)\n return '00000' + word;\n else if (word.length === 2)\n return '000000' + word;\n else if (word.length === 1)\n return '0000000' + word;\n else\n return word;\n}\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n var len = end - start;\n assert(len % 4 === 0);\n var res = new Array(len / 4);\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\n var w;\n if (endian === 'big')\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\n else\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\n res[i] = w >>> 0;\n }\n return res;\n}\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n var res = new Array(msg.length * 4);\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n var m = msg[i];\n if (endian === 'big') {\n res[k] = m >>> 24;\n res[k + 1] = (m >>> 16) & 0xff;\n res[k + 2] = (m >>> 8) & 0xff;\n res[k + 3] = m & 0xff;\n } else {\n res[k + 3] = m >>> 24;\n res[k + 2] = (m >>> 16) & 0xff;\n res[k + 1] = (m >>> 8) & 0xff;\n res[k] = m & 0xff;\n }\n }\n return res;\n}\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n return (w >>> b) | (w << (32 - b));\n}\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n return (w << b) | (w >>> (32 - b));\n}\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n return (a + b) >>> 0;\n}\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n return (a + b + c) >>> 0;\n}\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n return (a + b + c + d) >>> 0;\n}\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n return (a + b + c + d + e) >>> 0;\n}\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n var bh = buf[pos];\n var bl = buf[pos + 1];\n\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n buf[pos] = hi >>> 0;\n buf[pos + 1] = lo;\n}\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n var lo = (al + bl) >>> 0;\n var hi = (lo < al ? 1 : 0) + ah + bh;\n return hi >>> 0;\n}\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n var lo = al + bl;\n return lo >>> 0;\n}\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n\n var hi = ah + bh + ch + dh + carry;\n return hi >>> 0;\n}\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n var lo = al + bl + cl + dl;\n return lo >>> 0;\n}\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var carry = 0;\n var lo = al;\n lo = (lo + bl) >>> 0;\n carry += lo < al ? 1 : 0;\n lo = (lo + cl) >>> 0;\n carry += lo < cl ? 1 : 0;\n lo = (lo + dl) >>> 0;\n carry += lo < dl ? 1 : 0;\n lo = (lo + el) >>> 0;\n carry += lo < el ? 1 : 0;\n\n var hi = ah + bh + ch + dh + eh + carry;\n return hi >>> 0;\n}\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n var lo = al + bl + cl + dl + el;\n\n return lo >>> 0;\n}\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n var r = (al << (32 - num)) | (ah >>> num);\n return r >>> 0;\n}\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n return ah >>> num;\n}\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n var r = (ah << (32 - num)) | (al >>> num);\n return r >>> 0;\n}\nexports.shr64_lo = shr64_lo;\n","module.exports = function (max) {\n\n if (!max) throw Error('hashlru must have a max value, of type number, greater than 0')\n\n var size = 0, cache = Object.create(null), _cache = Object.create(null)\n\n function update (key, value) {\n cache[key] = value\n size ++\n if(size >= max) {\n size = 0\n _cache = cache\n cache = Object.create(null)\n }\n }\n\n return {\n has: function (key) {\n return cache[key] !== undefined || _cache[key] !== undefined\n },\n remove: function (key) {\n if(cache[key] !== undefined)\n cache[key] = undefined\n if(_cache[key] !== undefined)\n _cache[key] = undefined\n },\n get: function (key) {\n var v = cache[key]\n if(v !== undefined) return v\n if((v = _cache[key]) !== undefined) {\n update(key, v)\n return v\n }\n },\n set: function (key, value) {\n if(cache[key] !== undefined) cache[key] = value\n else update(key, value)\n },\n clear: function () {\n cache = Object.create(null)\n _cache = Object.create(null)\n }\n }\n}\n\n\n\n\n\n\n\n","/*\n * [hi-base32]{@link https://github.com/emn178/hi-base32}\n *\n * @version 0.5.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var root = typeof window === 'object' ? window : {};\n var NODE_JS = !root.HI_BASE32_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n }\n var COMMON_JS = !root.HI_BASE32_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var BASE32_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'.split('');\n var BASE32_DECODE_CHAR = {\n 'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7, 'I': 8,\n 'J': 9, 'K': 10, 'L': 11, 'M': 12, 'N': 13, 'O': 14, 'P': 15, 'Q': 16,\n 'R': 17, 'S': 18, 'T': 19, 'U': 20, 'V': 21, 'W': 22, 'X': 23, 'Y': 24,\n 'Z': 25, '2': 26, '3': 27, '4': 28, '5': 29, '6': 30, '7': 31\n };\n\n var blocks = [0, 0, 0, 0, 0, 0, 0, 0];\n\n var throwInvalidUtf8 = function (position, partial) {\n if (partial.length > 10) {\n partial = '...' + partial.substr(-10);\n }\n var err = new Error('Decoded data is not valid UTF-8.'\n + ' Maybe try base32.decode.asBytes()?'\n + ' Partial data after reading ' + position + ' bytes: ' + partial + ' <-');\n err.position = position;\n throw err;\n };\n\n var toUtf8String = function (bytes) {\n var str = '', length = bytes.length, i = 0, followingChars = 0, b, c;\n while (i < length) {\n b = bytes[i++];\n if (b <= 0x7F) {\n str += String.fromCharCode(b);\n continue;\n } else if (b > 0xBF && b <= 0xDF) {\n c = b & 0x1F;\n followingChars = 1;\n } else if (b <= 0xEF) {\n c = b & 0x0F;\n followingChars = 2;\n } else if (b <= 0xF7) {\n c = b & 0x07;\n followingChars = 3;\n } else {\n throwInvalidUtf8(i, str);\n }\n\n for (var j = 0; j < followingChars; ++j) {\n b = bytes[i++];\n if (b < 0x80 || b > 0xBF) {\n throwInvalidUtf8(i, str);\n }\n c <<= 6;\n c += b & 0x3F;\n }\n if (c >= 0xD800 && c <= 0xDFFF) {\n throwInvalidUtf8(i, str);\n }\n if (c > 0x10FFFF) {\n throwInvalidUtf8(i, str);\n }\n\n if (c <= 0xFFFF) {\n str += String.fromCharCode(c);\n } else {\n c -= 0x10000;\n str += String.fromCharCode((c >> 10) + 0xD800);\n str += String.fromCharCode((c & 0x3FF) + 0xDC00);\n }\n }\n return str;\n };\n\n var decodeAsBytes = function (base32Str) {\n if (base32Str === '') {\n return [];\n } else if (!/^[A-Z2-7=]+$/.test(base32Str)) {\n throw new Error('Invalid base32 characters');\n }\n base32Str = base32Str.replace(/=/g, '');\n var v1, v2, v3, v4, v5, v6, v7, v8, bytes = [], index = 0, length = base32Str.length;\n\n // 4 char to 3 bytes\n for (var i = 0, count = length >> 3 << 3; i < count;) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v8 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n bytes[index++] = (v1 << 3 | v2 >>> 2) & 255;\n bytes[index++] = (v2 << 6 | v3 << 1 | v4 >>> 4) & 255;\n bytes[index++] = (v4 << 4 | v5 >>> 1) & 255;\n bytes[index++] = (v5 << 7 | v6 << 2 | v7 >>> 3) & 255;\n bytes[index++] = (v7 << 5 | v8) & 255;\n }\n\n // remain bytes\n var remain = length - count;\n if (remain === 2) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n bytes[index++] = (v1 << 3 | v2 >>> 2) & 255;\n } else if (remain === 4) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n bytes[index++] = (v1 << 3 | v2 >>> 2) & 255;\n bytes[index++] = (v2 << 6 | v3 << 1 | v4 >>> 4) & 255;\n } else if (remain === 5) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n bytes[index++] = (v1 << 3 | v2 >>> 2) & 255;\n bytes[index++] = (v2 << 6 | v3 << 1 | v4 >>> 4) & 255;\n bytes[index++] = (v4 << 4 | v5 >>> 1) & 255;\n } else if (remain === 7) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n bytes[index++] = (v1 << 3 | v2 >>> 2) & 255;\n bytes[index++] = (v2 << 6 | v3 << 1 | v4 >>> 4) & 255;\n bytes[index++] = (v4 << 4 | v5 >>> 1) & 255;\n bytes[index++] = (v5 << 7 | v6 << 2 | v7 >>> 3) & 255;\n }\n return bytes;\n };\n\n var encodeAscii = function (str) {\n var v1, v2, v3, v4, v5, base32Str = '', length = str.length;\n for (var i = 0, count = parseInt(length / 5) * 5; i < count;) {\n v1 = str.charCodeAt(i++);\n v2 = str.charCodeAt(i++);\n v3 = str.charCodeAt(i++);\n v4 = str.charCodeAt(i++);\n v5 = str.charCodeAt(i++);\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1 | v4 >>> 7) & 31] +\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\n BASE32_ENCODE_CHAR[(v4 << 3 | v5 >>> 5) & 31] +\n BASE32_ENCODE_CHAR[v5 & 31];\n }\n\n // remain char\n var remain = length - count;\n if (remain === 1) {\n v1 = str.charCodeAt(i);\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2) & 31] +\n '======';\n } else if (remain === 2) {\n v1 = str.charCodeAt(i++);\n v2 = str.charCodeAt(i);\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4) & 31] +\n '====';\n } else if (remain === 3) {\n v1 = str.charCodeAt(i++);\n v2 = str.charCodeAt(i++);\n v3 = str.charCodeAt(i);\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1) & 31] +\n '===';\n } else if (remain === 4) {\n v1 = str.charCodeAt(i++);\n v2 = str.charCodeAt(i++);\n v3 = str.charCodeAt(i++);\n v4 = str.charCodeAt(i);\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1 | v4 >>> 7) & 31] +\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\n BASE32_ENCODE_CHAR[(v4 << 3) & 31] +\n '=';\n }\n return base32Str;\n };\n\n var encodeUtf8 = function (str) {\n var v1, v2, v3, v4, v5, code, end = false, base32Str = '',\n index = 0, i, start = 0, bytes = 0, length = str.length;\n if (str === '') {\n return base32Str;\n }\n do {\n blocks[0] = blocks[5];\n blocks[1] = blocks[6];\n blocks[2] = blocks[7];\n for (i = start; index < length && i < 5; ++index) {\n code = str.charCodeAt(index);\n if (code < 0x80) {\n blocks[i++] = code;\n } else if (code < 0x800) {\n blocks[i++] = 0xc0 | (code >> 6);\n blocks[i++] = 0x80 | (code & 0x3f);\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i++] = 0xe0 | (code >> 12);\n blocks[i++] = 0x80 | ((code >> 6) & 0x3f);\n blocks[i++] = 0x80 | (code & 0x3f);\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++index) & 0x3ff));\n blocks[i++] = 0xf0 | (code >> 18);\n blocks[i++] = 0x80 | ((code >> 12) & 0x3f);\n blocks[i++] = 0x80 | ((code >> 6) & 0x3f);\n blocks[i++] = 0x80 | (code & 0x3f);\n }\n }\n bytes += i - start;\n start = i - 5;\n if (index === length) {\n ++index;\n }\n if (index > length && i < 6) {\n end = true;\n }\n v1 = blocks[0];\n if (i > 4) {\n v2 = blocks[1];\n v3 = blocks[2];\n v4 = blocks[3];\n v5 = blocks[4];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1 | v4 >>> 7) & 31] +\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\n BASE32_ENCODE_CHAR[(v4 << 3 | v5 >>> 5) & 31] +\n BASE32_ENCODE_CHAR[v5 & 31];\n } else if (i === 1) {\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2) & 31] +\n '======';\n } else if (i === 2) {\n v2 = blocks[1];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4) & 31] +\n '====';\n } else if (i === 3) {\n v2 = blocks[1];\n v3 = blocks[2];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1) & 31] +\n '===';\n } else {\n v2 = blocks[1];\n v3 = blocks[2];\n v4 = blocks[3];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1 | v4 >>> 7) & 31] +\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\n BASE32_ENCODE_CHAR[(v4 << 3) & 31] +\n '=';\n }\n } while (!end);\n return base32Str;\n };\n\n var encodeBytes = function (bytes) {\n var v1, v2, v3, v4, v5, base32Str = '', length = bytes.length;\n for (var i = 0, count = parseInt(length / 5) * 5; i < count;) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n v4 = bytes[i++];\n v5 = bytes[i++];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1 | v4 >>> 7) & 31] +\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\n BASE32_ENCODE_CHAR[(v4 << 3 | v5 >>> 5) & 31] +\n BASE32_ENCODE_CHAR[v5 & 31];\n }\n\n // remain char\n var remain = length - count;\n if (remain === 1) {\n v1 = bytes[i];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2) & 31] +\n '======';\n } else if (remain === 2) {\n v1 = bytes[i++];\n v2 = bytes[i];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4) & 31] +\n '====';\n } else if (remain === 3) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1) & 31] +\n '===';\n } else if (remain === 4) {\n v1 = bytes[i++];\n v2 = bytes[i++];\n v3 = bytes[i++];\n v4 = bytes[i];\n base32Str += BASE32_ENCODE_CHAR[v1 >>> 3] +\n BASE32_ENCODE_CHAR[(v1 << 2 | v2 >>> 6) & 31] +\n BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] +\n BASE32_ENCODE_CHAR[(v2 << 4 | v3 >>> 4) & 31] +\n BASE32_ENCODE_CHAR[(v3 << 1 | v4 >>> 7) & 31] +\n BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] +\n BASE32_ENCODE_CHAR[(v4 << 3) & 31] +\n '=';\n }\n return base32Str;\n };\n\n var encode = function (input, asciiOnly) {\n var notString = typeof(input) !== 'string';\n if (notString && input.constructor === ArrayBuffer) {\n input = new Uint8Array(input);\n }\n if (notString) {\n return encodeBytes(input);\n } else if (asciiOnly) {\n return encodeAscii(input);\n } else {\n return encodeUtf8(input);\n }\n };\n\n var decode = function (base32Str, asciiOnly) {\n if (!asciiOnly) {\n return toUtf8String(decodeAsBytes(base32Str));\n }\n if (base32Str === '') {\n return '';\n } else if (!/^[A-Z2-7=]+$/.test(base32Str)) {\n throw new Error('Invalid base32 characters');\n }\n var v1, v2, v3, v4, v5, v6, v7, v8, str = '', length = base32Str.indexOf('=');\n if (length === -1) {\n length = base32Str.length;\n }\n\n // 8 char to 5 bytes\n for (var i = 0, count = length >> 3 << 3; i < count;) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v8 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n str += String.fromCharCode((v1 << 3 | v2 >>> 2) & 255) +\n String.fromCharCode((v2 << 6 | v3 << 1 | v4 >>> 4) & 255) +\n String.fromCharCode((v4 << 4 | v5 >>> 1) & 255) +\n String.fromCharCode((v5 << 7 | v6 << 2 | v7 >>> 3) & 255) +\n String.fromCharCode((v7 << 5 | v8) & 255);\n }\n\n // remain bytes\n var remain = length - count;\n if (remain === 2) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n str += String.fromCharCode((v1 << 3 | v2 >>> 2) & 255);\n } else if (remain === 4) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n str += String.fromCharCode((v1 << 3 | v2 >>> 2) & 255) +\n String.fromCharCode((v2 << 6 | v3 << 1 | v4 >>> 4) & 255);\n } else if (remain === 5) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n str += String.fromCharCode((v1 << 3 | v2 >>> 2) & 255) +\n String.fromCharCode((v2 << 6 | v3 << 1 | v4 >>> 4) & 255) +\n String.fromCharCode((v4 << 4 | v5 >>> 1) & 255);\n } else if (remain === 7) {\n v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)];\n str += String.fromCharCode((v1 << 3 | v2 >>> 2) & 255) +\n String.fromCharCode((v2 << 6 | v3 << 1 | v4 >>> 4) & 255) +\n String.fromCharCode((v4 << 4 | v5 >>> 1) & 255) +\n String.fromCharCode((v5 << 7 | v6 << 2 | v7 >>> 3) & 255);\n }\n return str;\n };\n\n var exports = {\n encode: encode,\n decode: decode\n };\n decode.asBytes = decodeAsBytes;\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.base32 = exports;\n if (AMD) {\n define(function() {\n return exports;\n });\n }\n }\n})();\n","'use strict';\n\nvar hash = require('hash.js');\nvar utils = require('minimalistic-crypto-utils');\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n if (!(this instanceof HmacDRBG))\n return new HmacDRBG(options);\n this.hash = options.hash;\n this.predResist = !!options.predResist;\n\n this.outLen = this.hash.outSize;\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n\n this._reseed = null;\n this.reseedInterval = null;\n this.K = null;\n this.V = null;\n\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n this._init(entropy, nonce, pers);\n}\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n var seed = entropy.concat(nonce).concat(pers);\n\n this.K = new Array(this.outLen / 8);\n this.V = new Array(this.outLen / 8);\n for (var i = 0; i < this.V.length; i++) {\n this.K[i] = 0x00;\n this.V[i] = 0x01;\n }\n\n this._update(seed);\n this._reseed = 1;\n this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n var kmac = this._hmac()\n .update(this.V)\n .update([ 0x00 ]);\n if (seed)\n kmac = kmac.update(seed);\n this.K = kmac.digest();\n this.V = this._hmac().update(this.V).digest();\n if (!seed)\n return;\n\n this.K = this._hmac()\n .update(this.V)\n .update([ 0x01 ])\n .update(seed)\n .digest();\n this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n // Optional entropy enc\n if (typeof entropyEnc !== 'string') {\n addEnc = add;\n add = entropyEnc;\n entropyEnc = null;\n }\n\n entropy = utils.toArray(entropy, entropyEnc);\n add = utils.toArray(add, addEnc);\n\n assert(entropy.length >= (this.minEntropy / 8),\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n this._update(entropy.concat(add || []));\n this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n if (this._reseed > this.reseedInterval)\n throw new Error('Reseed is required');\n\n // Optional encoding\n if (typeof enc !== 'string') {\n addEnc = add;\n add = enc;\n enc = null;\n }\n\n // Optional additional data\n if (add) {\n add = utils.toArray(add, addEnc || 'hex');\n this._update(add);\n }\n\n var temp = [];\n while (temp.length < len) {\n this.V = this._hmac().update(this.V).digest();\n temp = temp.concat(this.V);\n }\n\n var res = temp.slice(0, len);\n this._update(add);\n this._reseed++;\n return utils.encode(res, enc);\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\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","'use strict';\n\nmodule.exports = (string, count = 1, options) => {\n\toptions = {\n\t\tindent: ' ',\n\t\tincludeEmptyLines: false,\n\t\t...options\n\t};\n\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`input\\` to be a \\`string\\`, got \\`${typeof string}\\``\n\t\t);\n\t}\n\n\tif (typeof count !== 'number') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`count\\` to be a \\`number\\`, got \\`${typeof count}\\``\n\t\t);\n\t}\n\n\tif (typeof options.indent !== 'string') {\n\t\tthrow new TypeError(\n\t\t\t`Expected \\`options.indent\\` to be a \\`string\\`, got \\`${typeof options.indent}\\``\n\t\t);\n\t}\n\n\tif (count === 0) {\n\t\treturn string;\n\t}\n\n\tconst regex = options.includeEmptyLines ? /^/gm : /^(?!\\s*$)/gm;\n\n\treturn string.replace(regex, options.indent.repeat(count));\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","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.v6 = exports.AddressError = exports.Address6 = exports.Address4 = void 0;\nvar ipv4_1 = require(\"./lib/ipv4\");\nObject.defineProperty(exports, \"Address4\", { enumerable: true, get: function () { return ipv4_1.Address4; } });\nvar ipv6_1 = require(\"./lib/ipv6\");\nObject.defineProperty(exports, \"Address6\", { enumerable: true, get: function () { return ipv6_1.Address6; } });\nvar address_error_1 = require(\"./lib/address-error\");\nObject.defineProperty(exports, \"AddressError\", { enumerable: true, get: function () { return address_error_1.AddressError; } });\nvar helpers = __importStar(require(\"./lib/v6/helpers\"));\nexports.v6 = { helpers: helpers };\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AddressError = void 0;\nvar AddressError = /** @class */ (function (_super) {\n __extends(AddressError, _super);\n function AddressError(message, parseMessage) {\n var _this = _super.call(this, message) || this;\n _this.name = 'AddressError';\n if (parseMessage !== null) {\n _this.parseMessage = parseMessage;\n }\n return _this;\n }\n return AddressError;\n}(Error));\nexports.AddressError = AddressError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isCorrect = exports.isInSubnet = void 0;\nfunction isInSubnet(address) {\n if (this.subnetMask < address.subnetMask) {\n return false;\n }\n if (this.mask(address.subnetMask) === address.mask()) {\n return true;\n }\n return false;\n}\nexports.isInSubnet = isInSubnet;\nfunction isCorrect(defaultBits) {\n return function () {\n if (this.addressMinusSuffix !== this.correctForm()) {\n return false;\n }\n if (this.subnetMask === defaultBits && !this.parsedSubnet) {\n return true;\n }\n return this.parsedSubnet === String(this.subnetMask);\n };\n}\nexports.isCorrect = isCorrect;\n","\"use strict\";\n/* eslint-disable no-param-reassign */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Address4 = void 0;\nvar common = __importStar(require(\"./common\"));\nvar constants = __importStar(require(\"./v4/constants\"));\nvar address_error_1 = require(\"./address-error\");\nvar jsbn_1 = require(\"jsbn\");\nvar sprintf_js_1 = require(\"sprintf-js\");\n/**\n * Represents an IPv4 address\n * @class Address4\n * @param {string} address - An IPv4 address string\n */\nvar Address4 = /** @class */ (function () {\n function Address4(address) {\n this.groups = constants.GROUPS;\n this.parsedAddress = [];\n this.parsedSubnet = '';\n this.subnet = '/32';\n this.subnetMask = 32;\n this.v4 = true;\n /**\n * Returns true if the address is correct, false otherwise\n * @memberof Address4\n * @instance\n * @returns {Boolean}\n */\n this.isCorrect = common.isCorrect(constants.BITS);\n /**\n * Returns true if the given address is in the subnet of the current address\n * @memberof Address4\n * @instance\n * @returns {boolean}\n */\n this.isInSubnet = common.isInSubnet;\n this.address = address;\n var subnet = constants.RE_SUBNET_STRING.exec(address);\n if (subnet) {\n this.parsedSubnet = subnet[0].replace('/', '');\n this.subnetMask = parseInt(this.parsedSubnet, 10);\n this.subnet = \"/\" + this.subnetMask;\n if (this.subnetMask < 0 || this.subnetMask > constants.BITS) {\n throw new address_error_1.AddressError('Invalid subnet mask.');\n }\n address = address.replace(constants.RE_SUBNET_STRING, '');\n }\n this.addressMinusSuffix = address;\n this.parsedAddress = this.parse(address);\n }\n Address4.isValid = function (address) {\n try {\n // eslint-disable-next-line no-new\n new Address4(address);\n return true;\n }\n catch (e) {\n return false;\n }\n };\n /*\n * Parses a v4 address\n */\n Address4.prototype.parse = function (address) {\n var groups = address.split('.');\n if (!address.match(constants.RE_ADDRESS)) {\n throw new address_error_1.AddressError('Invalid IPv4 address.');\n }\n return groups;\n };\n /**\n * Returns the correct form of an address\n * @memberof Address4\n * @instance\n * @returns {String}\n */\n Address4.prototype.correctForm = function () {\n return this.parsedAddress.map(function (part) { return parseInt(part, 10); }).join('.');\n };\n /**\n * Converts a hex string to an IPv4 address object\n * @memberof Address4\n * @static\n * @param {string} hex - a hex string to convert\n * @returns {Address4}\n */\n Address4.fromHex = function (hex) {\n var padded = hex.replace(/:/g, '').padStart(8, '0');\n var groups = [];\n var i;\n for (i = 0; i < 8; i += 2) {\n var h = padded.slice(i, i + 2);\n groups.push(parseInt(h, 16));\n }\n return new Address4(groups.join('.'));\n };\n /**\n * Converts an integer into a IPv4 address object\n * @memberof Address4\n * @static\n * @param {integer} integer - a number to convert\n * @returns {Address4}\n */\n Address4.fromInteger = function (integer) {\n return Address4.fromHex(integer.toString(16));\n };\n /**\n * Return an address from in-addr.arpa form\n * @memberof Address4\n * @static\n * @param {string} arpaFormAddress - an 'in-addr.arpa' form ipv4 address\n * @returns {Adress4}\n * @example\n * var address = Address4.fromArpa(42.2.0.192.in-addr.arpa.)\n * address.correctForm(); // '192.0.2.42'\n */\n Address4.fromArpa = function (arpaFormAddress) {\n // remove ending \".in-addr.arpa.\" or just \".\"\n var leader = arpaFormAddress.replace(/(\\.in-addr\\.arpa)?\\.$/, '');\n var address = leader.split('.').reverse().join('.');\n return new Address4(address);\n };\n /**\n * Converts an IPv4 address object to a hex string\n * @memberof Address4\n * @instance\n * @returns {String}\n */\n Address4.prototype.toHex = function () {\n return this.parsedAddress.map(function (part) { return sprintf_js_1.sprintf('%02x', parseInt(part, 10)); }).join(':');\n };\n /**\n * Converts an IPv4 address object to an array of bytes\n * @memberof Address4\n * @instance\n * @returns {Array}\n */\n Address4.prototype.toArray = function () {\n return this.parsedAddress.map(function (part) { return parseInt(part, 10); });\n };\n /**\n * Converts an IPv4 address object to an IPv6 address group\n * @memberof Address4\n * @instance\n * @returns {String}\n */\n Address4.prototype.toGroup6 = function () {\n var output = [];\n var i;\n for (i = 0; i < constants.GROUPS; i += 2) {\n var hex = sprintf_js_1.sprintf('%02x%02x', parseInt(this.parsedAddress[i], 10), parseInt(this.parsedAddress[i + 1], 10));\n output.push(sprintf_js_1.sprintf('%x', parseInt(hex, 16)));\n }\n return output.join(':');\n };\n /**\n * Returns the address as a BigInteger\n * @memberof Address4\n * @instance\n * @returns {BigInteger}\n */\n Address4.prototype.bigInteger = function () {\n return new jsbn_1.BigInteger(this.parsedAddress.map(function (n) { return sprintf_js_1.sprintf('%02x', parseInt(n, 10)); }).join(''), 16);\n };\n /**\n * Helper function getting start address.\n * @memberof Address4\n * @instance\n * @returns {BigInteger}\n */\n Address4.prototype._startAddress = function () {\n return new jsbn_1.BigInteger(this.mask() + '0'.repeat(constants.BITS - this.subnetMask), 2);\n };\n /**\n * The first address in the range given by this address' subnet.\n * Often referred to as the Network Address.\n * @memberof Address4\n * @instance\n * @returns {Address4}\n */\n Address4.prototype.startAddress = function () {\n return Address4.fromBigInteger(this._startAddress());\n };\n /**\n * The first host address in the range given by this address's subnet ie\n * the first address after the Network Address\n * @memberof Address4\n * @instance\n * @returns {Address4}\n */\n Address4.prototype.startAddressExclusive = function () {\n var adjust = new jsbn_1.BigInteger('1');\n return Address4.fromBigInteger(this._startAddress().add(adjust));\n };\n /**\n * Helper function getting end address.\n * @memberof Address4\n * @instance\n * @returns {BigInteger}\n */\n Address4.prototype._endAddress = function () {\n return new jsbn_1.BigInteger(this.mask() + '1'.repeat(constants.BITS - this.subnetMask), 2);\n };\n /**\n * The last address in the range given by this address' subnet\n * Often referred to as the Broadcast\n * @memberof Address4\n * @instance\n * @returns {Address4}\n */\n Address4.prototype.endAddress = function () {\n return Address4.fromBigInteger(this._endAddress());\n };\n /**\n * The last host address in the range given by this address's subnet ie\n * the last address prior to the Broadcast Address\n * @memberof Address4\n * @instance\n * @returns {Address4}\n */\n Address4.prototype.endAddressExclusive = function () {\n var adjust = new jsbn_1.BigInteger('1');\n return Address4.fromBigInteger(this._endAddress().subtract(adjust));\n };\n /**\n * Converts a BigInteger to a v4 address object\n * @memberof Address4\n * @static\n * @param {BigInteger} bigInteger - a BigInteger to convert\n * @returns {Address4}\n */\n Address4.fromBigInteger = function (bigInteger) {\n return Address4.fromInteger(parseInt(bigInteger.toString(), 10));\n };\n /**\n * Returns the first n bits of the address, defaulting to the\n * subnet mask\n * @memberof Address4\n * @instance\n * @returns {String}\n */\n Address4.prototype.mask = function (mask) {\n if (mask === undefined) {\n mask = this.subnetMask;\n }\n return this.getBitsBase2(0, mask);\n };\n /**\n * Returns the bits in the given range as a base-2 string\n * @memberof Address4\n * @instance\n * @returns {string}\n */\n Address4.prototype.getBitsBase2 = function (start, end) {\n return this.binaryZeroPad().slice(start, end);\n };\n /**\n * Return the reversed ip6.arpa form of the address\n * @memberof Address4\n * @param {Object} options\n * @param {boolean} options.omitSuffix - omit the \"in-addr.arpa\" suffix\n * @instance\n * @returns {String}\n */\n Address4.prototype.reverseForm = function (options) {\n if (!options) {\n options = {};\n }\n var reversed = this.correctForm().split('.').reverse().join('.');\n if (options.omitSuffix) {\n return reversed;\n }\n return sprintf_js_1.sprintf('%s.in-addr.arpa.', reversed);\n };\n /**\n * Returns true if the given address is a multicast address\n * @memberof Address4\n * @instance\n * @returns {boolean}\n */\n Address4.prototype.isMulticast = function () {\n return this.isInSubnet(new Address4('224.0.0.0/4'));\n };\n /**\n * Returns a zero-padded base-2 string representation of the address\n * @memberof Address4\n * @instance\n * @returns {string}\n */\n Address4.prototype.binaryZeroPad = function () {\n return this.bigInteger().toString(2).padStart(constants.BITS, '0');\n };\n /**\n * Groups an IPv4 address for inclusion at the end of an IPv6 address\n * @returns {String}\n */\n Address4.prototype.groupForV6 = function () {\n var segments = this.parsedAddress;\n return this.address.replace(constants.RE_ADDRESS, sprintf_js_1.sprintf('<span class=\"hover-group group-v4 group-6\">%s</span>.<span class=\"hover-group group-v4 group-7\">%s</span>', segments.slice(0, 2).join('.'), segments.slice(2, 4).join('.')));\n };\n return Address4;\n}());\nexports.Address4 = Address4;\n","\"use strict\";\n/* eslint-disable prefer-destructuring */\n/* eslint-disable no-param-reassign */\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from) {\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\n to[j] = from[i];\n return to;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Address6 = void 0;\nvar common = __importStar(require(\"./common\"));\nvar constants4 = __importStar(require(\"./v4/constants\"));\nvar constants6 = __importStar(require(\"./v6/constants\"));\nvar helpers = __importStar(require(\"./v6/helpers\"));\nvar ipv4_1 = require(\"./ipv4\");\nvar regular_expressions_1 = require(\"./v6/regular-expressions\");\nvar address_error_1 = require(\"./address-error\");\nvar jsbn_1 = require(\"jsbn\");\nvar sprintf_js_1 = require(\"sprintf-js\");\nfunction assert(condition) {\n if (!condition) {\n throw new Error('Assertion failed.');\n }\n}\nfunction addCommas(number) {\n var r = /(\\d+)(\\d{3})/;\n while (r.test(number)) {\n number = number.replace(r, '$1,$2');\n }\n return number;\n}\nfunction spanLeadingZeroes4(n) {\n n = n.replace(/^(0{1,})([1-9]+)$/, '<span class=\"parse-error\">$1</span>$2');\n n = n.replace(/^(0{1,})(0)$/, '<span class=\"parse-error\">$1</span>$2');\n return n;\n}\n/*\n * A helper function to compact an array\n */\nfunction compact(address, slice) {\n var s1 = [];\n var s2 = [];\n var i;\n for (i = 0; i < address.length; i++) {\n if (i < slice[0]) {\n s1.push(address[i]);\n }\n else if (i > slice[1]) {\n s2.push(address[i]);\n }\n }\n return s1.concat(['compact']).concat(s2);\n}\nfunction paddedHex(octet) {\n return sprintf_js_1.sprintf('%04x', parseInt(octet, 16));\n}\nfunction unsignByte(b) {\n // eslint-disable-next-line no-bitwise\n return b & 0xff;\n}\n/**\n * Represents an IPv6 address\n * @class Address6\n * @param {string} address - An IPv6 address string\n * @param {number} [groups=8] - How many octets to parse\n * @example\n * var address = new Address6('2001::/32');\n */\nvar Address6 = /** @class */ (function () {\n function Address6(address, optionalGroups) {\n this.addressMinusSuffix = '';\n this.parsedSubnet = '';\n this.subnet = '/128';\n this.subnetMask = 128;\n this.v4 = false;\n this.zone = '';\n // #region Attributes\n /**\n * Returns true if the given address is in the subnet of the current address\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n this.isInSubnet = common.isInSubnet;\n /**\n * Returns true if the address is correct, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n this.isCorrect = common.isCorrect(constants6.BITS);\n if (optionalGroups === undefined) {\n this.groups = constants6.GROUPS;\n }\n else {\n this.groups = optionalGroups;\n }\n this.address = address;\n var subnet = constants6.RE_SUBNET_STRING.exec(address);\n if (subnet) {\n this.parsedSubnet = subnet[0].replace('/', '');\n this.subnetMask = parseInt(this.parsedSubnet, 10);\n this.subnet = \"/\" + this.subnetMask;\n if (Number.isNaN(this.subnetMask) ||\n this.subnetMask < 0 ||\n this.subnetMask > constants6.BITS) {\n throw new address_error_1.AddressError('Invalid subnet mask.');\n }\n address = address.replace(constants6.RE_SUBNET_STRING, '');\n }\n else if (/\\//.test(address)) {\n throw new address_error_1.AddressError('Invalid subnet mask.');\n }\n var zone = constants6.RE_ZONE_STRING.exec(address);\n if (zone) {\n this.zone = zone[0];\n address = address.replace(constants6.RE_ZONE_STRING, '');\n }\n this.addressMinusSuffix = address;\n this.parsedAddress = this.parse(this.addressMinusSuffix);\n }\n Address6.isValid = function (address) {\n try {\n // eslint-disable-next-line no-new\n new Address6(address);\n return true;\n }\n catch (e) {\n return false;\n }\n };\n /**\n * Convert a BigInteger to a v6 address object\n * @memberof Address6\n * @static\n * @param {BigInteger} bigInteger - a BigInteger to convert\n * @returns {Address6}\n * @example\n * var bigInteger = new BigInteger('1000000000000');\n * var address = Address6.fromBigInteger(bigInteger);\n * address.correctForm(); // '::e8:d4a5:1000'\n */\n Address6.fromBigInteger = function (bigInteger) {\n var hex = bigInteger.toString(16).padStart(32, '0');\n var groups = [];\n var i;\n for (i = 0; i < constants6.GROUPS; i++) {\n groups.push(hex.slice(i * 4, (i + 1) * 4));\n }\n return new Address6(groups.join(':'));\n };\n /**\n * Convert a URL (with optional port number) to an address object\n * @memberof Address6\n * @static\n * @param {string} url - a URL with optional port number\n * @example\n * var addressAndPort = Address6.fromURL('http://[ffff::]:8080/foo/');\n * addressAndPort.address.correctForm(); // 'ffff::'\n * addressAndPort.port; // 8080\n */\n Address6.fromURL = function (url) {\n var host;\n var port = null;\n var result;\n // If we have brackets parse them and find a port\n if (url.indexOf('[') !== -1 && url.indexOf(']:') !== -1) {\n result = constants6.RE_URL_WITH_PORT.exec(url);\n if (result === null) {\n return {\n error: 'failed to parse address with port',\n address: null,\n port: null,\n };\n }\n host = result[1];\n port = result[2];\n // If there's a URL extract the address\n }\n else if (url.indexOf('/') !== -1) {\n // Remove the protocol prefix\n url = url.replace(/^[a-z0-9]+:\\/\\//, '');\n // Parse the address\n result = constants6.RE_URL.exec(url);\n if (result === null) {\n return {\n error: 'failed to parse address from URL',\n address: null,\n port: null,\n };\n }\n host = result[1];\n // Otherwise just assign the URL to the host and let the library parse it\n }\n else {\n host = url;\n }\n // If there's a port convert it to an integer\n if (port) {\n port = parseInt(port, 10);\n // squelch out of range ports\n if (port < 0 || port > 65536) {\n port = null;\n }\n }\n else {\n // Standardize `undefined` to `null`\n port = null;\n }\n return {\n address: new Address6(host),\n port: port,\n };\n };\n /**\n * Create an IPv6-mapped address given an IPv4 address\n * @memberof Address6\n * @static\n * @param {string} address - An IPv4 address string\n * @returns {Address6}\n * @example\n * var address = Address6.fromAddress4('192.168.0.1');\n * address.correctForm(); // '::ffff:c0a8:1'\n * address.to4in6(); // '::ffff:192.168.0.1'\n */\n Address6.fromAddress4 = function (address) {\n var address4 = new ipv4_1.Address4(address);\n var mask6 = constants6.BITS - (constants4.BITS - address4.subnetMask);\n return new Address6(\"::ffff:\" + address4.correctForm() + \"/\" + mask6);\n };\n /**\n * Return an address from ip6.arpa form\n * @memberof Address6\n * @static\n * @param {string} arpaFormAddress - an 'ip6.arpa' form address\n * @returns {Adress6}\n * @example\n * var address = Address6.fromArpa(e.f.f.f.3.c.2.6.f.f.f.e.6.6.8.e.1.0.6.7.9.4.e.c.0.0.0.0.1.0.0.2.ip6.arpa.)\n * address.correctForm(); // '2001:0:ce49:7601:e866:efff:62c3:fffe'\n */\n Address6.fromArpa = function (arpaFormAddress) {\n // remove ending \".ip6.arpa.\" or just \".\"\n var address = arpaFormAddress.replace(/(\\.ip6\\.arpa)?\\.$/, '');\n var semicolonAmount = 7;\n // correct ip6.arpa form with ending removed will be 63 characters\n if (address.length !== 63) {\n throw new address_error_1.AddressError(\"Invalid 'ip6.arpa' form.\");\n }\n var parts = address.split('.').reverse();\n for (var i = semicolonAmount; i > 0; i--) {\n var insertIndex = i * 4;\n parts.splice(insertIndex, 0, ':');\n }\n address = parts.join('');\n return new Address6(address);\n };\n /**\n * Return the Microsoft UNC transcription of the address\n * @memberof Address6\n * @instance\n * @returns {String} the Microsoft UNC transcription of the address\n */\n Address6.prototype.microsoftTranscription = function () {\n return sprintf_js_1.sprintf('%s.ipv6-literal.net', this.correctForm().replace(/:/g, '-'));\n };\n /**\n * Return the first n bits of the address, defaulting to the subnet mask\n * @memberof Address6\n * @instance\n * @param {number} [mask=subnet] - the number of bits to mask\n * @returns {String} the first n bits of the address as a string\n */\n Address6.prototype.mask = function (mask) {\n if (mask === void 0) { mask = this.subnetMask; }\n return this.getBitsBase2(0, mask);\n };\n /**\n * Return the number of possible subnets of a given size in the address\n * @memberof Address6\n * @instance\n * @param {number} [size=128] - the subnet size\n * @returns {String}\n */\n // TODO: probably useful to have a numeric version of this too\n Address6.prototype.possibleSubnets = function (subnetSize) {\n if (subnetSize === void 0) { subnetSize = 128; }\n var availableBits = constants6.BITS - this.subnetMask;\n var subnetBits = Math.abs(subnetSize - constants6.BITS);\n var subnetPowers = availableBits - subnetBits;\n if (subnetPowers < 0) {\n return '0';\n }\n return addCommas(new jsbn_1.BigInteger('2', 10).pow(subnetPowers).toString(10));\n };\n /**\n * Helper function getting start address.\n * @memberof Address6\n * @instance\n * @returns {BigInteger}\n */\n Address6.prototype._startAddress = function () {\n return new jsbn_1.BigInteger(this.mask() + '0'.repeat(constants6.BITS - this.subnetMask), 2);\n };\n /**\n * The first address in the range given by this address' subnet\n * Often referred to as the Network Address.\n * @memberof Address6\n * @instance\n * @returns {Address6}\n */\n Address6.prototype.startAddress = function () {\n return Address6.fromBigInteger(this._startAddress());\n };\n /**\n * The first host address in the range given by this address's subnet ie\n * the first address after the Network Address\n * @memberof Address6\n * @instance\n * @returns {Address6}\n */\n Address6.prototype.startAddressExclusive = function () {\n var adjust = new jsbn_1.BigInteger('1');\n return Address6.fromBigInteger(this._startAddress().add(adjust));\n };\n /**\n * Helper function getting end address.\n * @memberof Address6\n * @instance\n * @returns {BigInteger}\n */\n Address6.prototype._endAddress = function () {\n return new jsbn_1.BigInteger(this.mask() + '1'.repeat(constants6.BITS - this.subnetMask), 2);\n };\n /**\n * The last address in the range given by this address' subnet\n * Often referred to as the Broadcast\n * @memberof Address6\n * @instance\n * @returns {Address6}\n */\n Address6.prototype.endAddress = function () {\n return Address6.fromBigInteger(this._endAddress());\n };\n /**\n * The last host address in the range given by this address's subnet ie\n * the last address prior to the Broadcast Address\n * @memberof Address6\n * @instance\n * @returns {Address6}\n */\n Address6.prototype.endAddressExclusive = function () {\n var adjust = new jsbn_1.BigInteger('1');\n return Address6.fromBigInteger(this._endAddress().subtract(adjust));\n };\n /**\n * Return the scope of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.getScope = function () {\n var scope = constants6.SCOPES[this.getBits(12, 16).intValue()];\n if (this.getType() === 'Global unicast' && scope !== 'Link local') {\n scope = 'Global';\n }\n return scope || 'Unknown';\n };\n /**\n * Return the type of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.getType = function () {\n for (var _i = 0, _a = Object.keys(constants6.TYPES); _i < _a.length; _i++) {\n var subnet = _a[_i];\n if (this.isInSubnet(new Address6(subnet))) {\n return constants6.TYPES[subnet];\n }\n }\n return 'Global unicast';\n };\n /**\n * Return the bits in the given range as a BigInteger\n * @memberof Address6\n * @instance\n * @returns {BigInteger}\n */\n Address6.prototype.getBits = function (start, end) {\n return new jsbn_1.BigInteger(this.getBitsBase2(start, end), 2);\n };\n /**\n * Return the bits in the given range as a base-2 string\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.getBitsBase2 = function (start, end) {\n return this.binaryZeroPad().slice(start, end);\n };\n /**\n * Return the bits in the given range as a base-16 string\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.getBitsBase16 = function (start, end) {\n var length = end - start;\n if (length % 4 !== 0) {\n throw new Error('Length of bits to retrieve must be divisible by four');\n }\n return this.getBits(start, end)\n .toString(16)\n .padStart(length / 4, '0');\n };\n /**\n * Return the bits that are set past the subnet mask length\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.getBitsPastSubnet = function () {\n return this.getBitsBase2(this.subnetMask, constants6.BITS);\n };\n /**\n * Return the reversed ip6.arpa form of the address\n * @memberof Address6\n * @param {Object} options\n * @param {boolean} options.omitSuffix - omit the \"ip6.arpa\" suffix\n * @instance\n * @returns {String}\n */\n Address6.prototype.reverseForm = function (options) {\n if (!options) {\n options = {};\n }\n var characters = Math.floor(this.subnetMask / 4);\n var reversed = this.canonicalForm()\n .replace(/:/g, '')\n .split('')\n .slice(0, characters)\n .reverse()\n .join('.');\n if (characters > 0) {\n if (options.omitSuffix) {\n return reversed;\n }\n return sprintf_js_1.sprintf('%s.ip6.arpa.', reversed);\n }\n if (options.omitSuffix) {\n return '';\n }\n return 'ip6.arpa.';\n };\n /**\n * Return the correct form of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.correctForm = function () {\n var i;\n var groups = [];\n var zeroCounter = 0;\n var zeroes = [];\n for (i = 0; i < this.parsedAddress.length; i++) {\n var value = parseInt(this.parsedAddress[i], 16);\n if (value === 0) {\n zeroCounter++;\n }\n if (value !== 0 && zeroCounter > 0) {\n if (zeroCounter > 1) {\n zeroes.push([i - zeroCounter, i - 1]);\n }\n zeroCounter = 0;\n }\n }\n // Do we end with a string of zeroes?\n if (zeroCounter > 1) {\n zeroes.push([this.parsedAddress.length - zeroCounter, this.parsedAddress.length - 1]);\n }\n var zeroLengths = zeroes.map(function (n) { return n[1] - n[0] + 1; });\n if (zeroes.length > 0) {\n var index = zeroLengths.indexOf(Math.max.apply(Math, zeroLengths));\n groups = compact(this.parsedAddress, zeroes[index]);\n }\n else {\n groups = this.parsedAddress;\n }\n for (i = 0; i < groups.length; i++) {\n if (groups[i] !== 'compact') {\n groups[i] = parseInt(groups[i], 16).toString(16);\n }\n }\n var correct = groups.join(':');\n correct = correct.replace(/^compact$/, '::');\n correct = correct.replace(/^compact|compact$/, ':');\n correct = correct.replace(/compact/, '');\n return correct;\n };\n /**\n * Return a zero-padded base-2 string representation of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n * @example\n * var address = new Address6('2001:4860:4001:803::1011');\n * address.binaryZeroPad();\n * // '0010000000000001010010000110000001000000000000010000100000000011\n * // 0000000000000000000000000000000000000000000000000001000000010001'\n */\n Address6.prototype.binaryZeroPad = function () {\n return this.bigInteger().toString(2).padStart(constants6.BITS, '0');\n };\n // TODO: Improve the semantics of this helper function\n Address6.prototype.parse4in6 = function (address) {\n var groups = address.split(':');\n var lastGroup = groups.slice(-1)[0];\n var address4 = lastGroup.match(constants4.RE_ADDRESS);\n if (address4) {\n this.parsedAddress4 = address4[0];\n this.address4 = new ipv4_1.Address4(this.parsedAddress4);\n for (var i = 0; i < this.address4.groups; i++) {\n if (/^0[0-9]+/.test(this.address4.parsedAddress[i])) {\n throw new address_error_1.AddressError(\"IPv4 addresses can't have leading zeroes.\", address.replace(constants4.RE_ADDRESS, this.address4.parsedAddress.map(spanLeadingZeroes4).join('.')));\n }\n }\n this.v4 = true;\n groups[groups.length - 1] = this.address4.toGroup6();\n address = groups.join(':');\n }\n return address;\n };\n // TODO: Make private?\n Address6.prototype.parse = function (address) {\n address = this.parse4in6(address);\n var badCharacters = address.match(constants6.RE_BAD_CHARACTERS);\n if (badCharacters) {\n throw new address_error_1.AddressError(sprintf_js_1.sprintf('Bad character%s detected in address: %s', badCharacters.length > 1 ? 's' : '', badCharacters.join('')), address.replace(constants6.RE_BAD_CHARACTERS, '<span class=\"parse-error\">$1</span>'));\n }\n var badAddress = address.match(constants6.RE_BAD_ADDRESS);\n if (badAddress) {\n throw new address_error_1.AddressError(sprintf_js_1.sprintf('Address failed regex: %s', badAddress.join('')), address.replace(constants6.RE_BAD_ADDRESS, '<span class=\"parse-error\">$1</span>'));\n }\n var groups = [];\n var halves = address.split('::');\n if (halves.length === 2) {\n var first = halves[0].split(':');\n var last = halves[1].split(':');\n if (first.length === 1 && first[0] === '') {\n first = [];\n }\n if (last.length === 1 && last[0] === '') {\n last = [];\n }\n var remaining = this.groups - (first.length + last.length);\n if (!remaining) {\n throw new address_error_1.AddressError('Error parsing groups');\n }\n this.elidedGroups = remaining;\n this.elisionBegin = first.length;\n this.elisionEnd = first.length + this.elidedGroups;\n groups = groups.concat(first);\n for (var i = 0; i < remaining; i++) {\n groups.push('0');\n }\n groups = groups.concat(last);\n }\n else if (halves.length === 1) {\n groups = address.split(':');\n this.elidedGroups = 0;\n }\n else {\n throw new address_error_1.AddressError('Too many :: groups found');\n }\n groups = groups.map(function (group) { return sprintf_js_1.sprintf('%x', parseInt(group, 16)); });\n if (groups.length !== this.groups) {\n throw new address_error_1.AddressError('Incorrect number of groups found');\n }\n return groups;\n };\n /**\n * Return the canonical form of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.canonicalForm = function () {\n return this.parsedAddress.map(paddedHex).join(':');\n };\n /**\n * Return the decimal form of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.decimal = function () {\n return this.parsedAddress.map(function (n) { return sprintf_js_1.sprintf('%05d', parseInt(n, 16)); }).join(':');\n };\n /**\n * Return the address as a BigInteger\n * @memberof Address6\n * @instance\n * @returns {BigInteger}\n */\n Address6.prototype.bigInteger = function () {\n return new jsbn_1.BigInteger(this.parsedAddress.map(paddedHex).join(''), 16);\n };\n /**\n * Return the last two groups of this address as an IPv4 address string\n * @memberof Address6\n * @instance\n * @returns {Address4}\n * @example\n * var address = new Address6('2001:4860:4001::1825:bf11');\n * address.to4().correctForm(); // '24.37.191.17'\n */\n Address6.prototype.to4 = function () {\n var binary = this.binaryZeroPad().split('');\n return ipv4_1.Address4.fromHex(new jsbn_1.BigInteger(binary.slice(96, 128).join(''), 2).toString(16));\n };\n /**\n * Return the v4-in-v6 form of the address\n * @memberof Address6\n * @instance\n * @returns {String}\n */\n Address6.prototype.to4in6 = function () {\n var address4 = this.to4();\n var address6 = new Address6(this.parsedAddress.slice(0, 6).join(':'), 6);\n var correct = address6.correctForm();\n var infix = '';\n if (!/:$/.test(correct)) {\n infix = ':';\n }\n return correct + infix + address4.address;\n };\n /**\n * Return an object containing the Teredo properties of the address\n * @memberof Address6\n * @instance\n * @returns {Object}\n */\n Address6.prototype.inspectTeredo = function () {\n /*\n - Bits 0 to 31 are set to the Teredo prefix (normally 2001:0000::/32).\n - Bits 32 to 63 embed the primary IPv4 address of the Teredo server that\n is used.\n - Bits 64 to 79 can be used to define some flags. Currently only the\n higher order bit is used; it is set to 1 if the Teredo client is\n located behind a cone NAT, 0 otherwise. For Microsoft's Windows Vista\n and Windows Server 2008 implementations, more bits are used. In those\n implementations, the format for these 16 bits is \"CRAAAAUG AAAAAAAA\",\n where \"C\" remains the \"Cone\" flag. The \"R\" bit is reserved for future\n use. The \"U\" bit is for the Universal/Local flag (set to 0). The \"G\" bit\n is Individual/Group flag (set to 0). The A bits are set to a 12-bit\n randomly generated number chosen by the Teredo client to introduce\n additional protection for the Teredo node against IPv6-based scanning\n attacks.\n - Bits 80 to 95 contains the obfuscated UDP port number. This is the\n port number that is mapped by the NAT to the Teredo client with all\n bits inverted.\n - Bits 96 to 127 contains the obfuscated IPv4 address. This is the\n public IPv4 address of the NAT with all bits inverted.\n */\n var prefix = this.getBitsBase16(0, 32);\n var udpPort = this.getBits(80, 96).xor(new jsbn_1.BigInteger('ffff', 16)).toString();\n var server4 = ipv4_1.Address4.fromHex(this.getBitsBase16(32, 64));\n var client4 = ipv4_1.Address4.fromHex(this.getBits(96, 128).xor(new jsbn_1.BigInteger('ffffffff', 16)).toString(16));\n var flags = this.getBits(64, 80);\n var flagsBase2 = this.getBitsBase2(64, 80);\n var coneNat = flags.testBit(15);\n var reserved = flags.testBit(14);\n var groupIndividual = flags.testBit(8);\n var universalLocal = flags.testBit(9);\n var nonce = new jsbn_1.BigInteger(flagsBase2.slice(2, 6) + flagsBase2.slice(8, 16), 2).toString(10);\n return {\n prefix: sprintf_js_1.sprintf('%s:%s', prefix.slice(0, 4), prefix.slice(4, 8)),\n server4: server4.address,\n client4: client4.address,\n flags: flagsBase2,\n coneNat: coneNat,\n microsoft: {\n reserved: reserved,\n universalLocal: universalLocal,\n groupIndividual: groupIndividual,\n nonce: nonce,\n },\n udpPort: udpPort,\n };\n };\n /**\n * Return an object containing the 6to4 properties of the address\n * @memberof Address6\n * @instance\n * @returns {Object}\n */\n Address6.prototype.inspect6to4 = function () {\n /*\n - Bits 0 to 15 are set to the 6to4 prefix (2002::/16).\n - Bits 16 to 48 embed the IPv4 address of the 6to4 gateway that is used.\n */\n var prefix = this.getBitsBase16(0, 16);\n var gateway = ipv4_1.Address4.fromHex(this.getBitsBase16(16, 48));\n return {\n prefix: sprintf_js_1.sprintf('%s', prefix.slice(0, 4)),\n gateway: gateway.address,\n };\n };\n /**\n * Return a v6 6to4 address from a v6 v4inv6 address\n * @memberof Address6\n * @instance\n * @returns {Address6}\n */\n Address6.prototype.to6to4 = function () {\n if (!this.is4()) {\n return null;\n }\n var addr6to4 = [\n '2002',\n this.getBitsBase16(96, 112),\n this.getBitsBase16(112, 128),\n '',\n '/16',\n ].join(':');\n return new Address6(addr6to4);\n };\n /**\n * Return a byte array\n * @memberof Address6\n * @instance\n * @returns {Array}\n */\n Address6.prototype.toByteArray = function () {\n var byteArray = this.bigInteger().toByteArray();\n // work around issue where `toByteArray` returns a leading 0 element\n if (byteArray.length === 17 && byteArray[0] === 0) {\n return byteArray.slice(1);\n }\n return byteArray;\n };\n /**\n * Return an unsigned byte array\n * @memberof Address6\n * @instance\n * @returns {Array}\n */\n Address6.prototype.toUnsignedByteArray = function () {\n return this.toByteArray().map(unsignByte);\n };\n /**\n * Convert a byte array to an Address6 object\n * @memberof Address6\n * @static\n * @returns {Address6}\n */\n Address6.fromByteArray = function (bytes) {\n return this.fromUnsignedByteArray(bytes.map(unsignByte));\n };\n /**\n * Convert an unsigned byte array to an Address6 object\n * @memberof Address6\n * @static\n * @returns {Address6}\n */\n Address6.fromUnsignedByteArray = function (bytes) {\n var BYTE_MAX = new jsbn_1.BigInteger('256', 10);\n var result = new jsbn_1.BigInteger('0', 10);\n var multiplier = new jsbn_1.BigInteger('1', 10);\n for (var i = bytes.length - 1; i >= 0; i--) {\n result = result.add(multiplier.multiply(new jsbn_1.BigInteger(bytes[i].toString(10), 10)));\n multiplier = multiplier.multiply(BYTE_MAX);\n }\n return Address6.fromBigInteger(result);\n };\n /**\n * Returns true if the address is in the canonical form, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.isCanonical = function () {\n return this.addressMinusSuffix === this.canonicalForm();\n };\n /**\n * Returns true if the address is a link local address, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.isLinkLocal = function () {\n // Zeroes are required, i.e. we can't check isInSubnet with 'fe80::/10'\n if (this.getBitsBase2(0, 64) ===\n '1111111010000000000000000000000000000000000000000000000000000000') {\n return true;\n }\n return false;\n };\n /**\n * Returns true if the address is a multicast address, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.isMulticast = function () {\n return this.getType() === 'Multicast';\n };\n /**\n * Returns true if the address is a v4-in-v6 address, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.is4 = function () {\n return this.v4;\n };\n /**\n * Returns true if the address is a Teredo address, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.isTeredo = function () {\n return this.isInSubnet(new Address6('2001::/32'));\n };\n /**\n * Returns true if the address is a 6to4 address, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.is6to4 = function () {\n return this.isInSubnet(new Address6('2002::/16'));\n };\n /**\n * Returns true if the address is a loopback address, false otherwise\n * @memberof Address6\n * @instance\n * @returns {boolean}\n */\n Address6.prototype.isLoopback = function () {\n return this.getType() === 'Loopback';\n };\n // #endregion\n // #region HTML\n /**\n * @returns {String} the address in link form with a default port of 80\n */\n Address6.prototype.href = function (optionalPort) {\n if (optionalPort === undefined) {\n optionalPort = '';\n }\n else {\n optionalPort = sprintf_js_1.sprintf(':%s', optionalPort);\n }\n return sprintf_js_1.sprintf('http://[%s]%s/', this.correctForm(), optionalPort);\n };\n /**\n * @returns {String} a link suitable for conveying the address via a URL hash\n */\n Address6.prototype.link = function (options) {\n if (!options) {\n options = {};\n }\n if (options.className === undefined) {\n options.className = '';\n }\n if (options.prefix === undefined) {\n options.prefix = '/#address=';\n }\n if (options.v4 === undefined) {\n options.v4 = false;\n }\n var formFunction = this.correctForm;\n if (options.v4) {\n formFunction = this.to4in6;\n }\n if (options.className) {\n return sprintf_js_1.sprintf('<a href=\"%1$s%2$s\" class=\"%3$s\">%2$s</a>', options.prefix, formFunction.call(this), options.className);\n }\n return sprintf_js_1.sprintf('<a href=\"%1$s%2$s\">%2$s</a>', options.prefix, formFunction.call(this));\n };\n /**\n * Groups an address\n * @returns {String}\n */\n Address6.prototype.group = function () {\n if (this.elidedGroups === 0) {\n // The simple case\n return helpers.simpleGroup(this.address).join(':');\n }\n assert(typeof this.elidedGroups === 'number');\n assert(typeof this.elisionBegin === 'number');\n // The elided case\n var output = [];\n var _a = this.address.split('::'), left = _a[0], right = _a[1];\n if (left.length) {\n output.push.apply(output, helpers.simpleGroup(left));\n }\n else {\n output.push('');\n }\n var classes = ['hover-group'];\n for (var i = this.elisionBegin; i < this.elisionBegin + this.elidedGroups; i++) {\n classes.push(sprintf_js_1.sprintf('group-%d', i));\n }\n output.push(sprintf_js_1.sprintf('<span class=\"%s\"></span>', classes.join(' ')));\n if (right.length) {\n output.push.apply(output, helpers.simpleGroup(right, this.elisionEnd));\n }\n else {\n output.push('');\n }\n if (this.is4()) {\n assert(this.address4 instanceof ipv4_1.Address4);\n output.pop();\n output.push(this.address4.groupForV6());\n }\n return output.join(':');\n };\n // #endregion\n // #region Regular expressions\n /**\n * Generate a regular expression string that can be used to find or validate\n * all variations of this address\n * @memberof Address6\n * @instance\n * @param {boolean} substringSearch\n * @returns {string}\n */\n Address6.prototype.regularExpressionString = function (substringSearch) {\n if (substringSearch === void 0) { substringSearch = false; }\n var output = [];\n // TODO: revisit why this is necessary\n var address6 = new Address6(this.correctForm());\n if (address6.elidedGroups === 0) {\n // The simple case\n output.push(regular_expressions_1.simpleRegularExpression(address6.parsedAddress));\n }\n else if (address6.elidedGroups === constants6.GROUPS) {\n // A completely elided address\n output.push(regular_expressions_1.possibleElisions(constants6.GROUPS));\n }\n else {\n // A partially elided address\n var halves = address6.address.split('::');\n if (halves[0].length) {\n output.push(regular_expressions_1.simpleRegularExpression(halves[0].split(':')));\n }\n assert(typeof address6.elidedGroups === 'number');\n output.push(regular_expressions_1.possibleElisions(address6.elidedGroups, halves[0].length !== 0, halves[1].length !== 0));\n if (halves[1].length) {\n output.push(regular_expressions_1.simpleRegularExpression(halves[1].split(':')));\n }\n output = [output.join(':')];\n }\n if (!substringSearch) {\n output = __spreadArray(__spreadArray([\n '(?=^|',\n regular_expressions_1.ADDRESS_BOUNDARY,\n '|[^\\\\w\\\\:])('\n ], output), [\n ')(?=[^\\\\w\\\\:]|',\n regular_expressions_1.ADDRESS_BOUNDARY,\n '|$)',\n ]);\n }\n return output.join('');\n };\n /**\n * Generate a regular expression that can be used to find or validate all\n * variations of this address.\n * @memberof Address6\n * @instance\n * @param {boolean} substringSearch\n * @returns {RegExp}\n */\n Address6.prototype.regularExpression = function (substringSearch) {\n if (substringSearch === void 0) { substringSearch = false; }\n return new RegExp(this.regularExpressionString(substringSearch), 'i');\n };\n return Address6;\n}());\nexports.Address6 = Address6;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RE_SUBNET_STRING = exports.RE_ADDRESS = exports.GROUPS = exports.BITS = void 0;\nexports.BITS = 32;\nexports.GROUPS = 4;\nexports.RE_ADDRESS = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g;\nexports.RE_SUBNET_STRING = /\\/\\d{1,2}$/;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RE_URL_WITH_PORT = exports.RE_URL = exports.RE_ZONE_STRING = exports.RE_SUBNET_STRING = exports.RE_BAD_ADDRESS = exports.RE_BAD_CHARACTERS = exports.TYPES = exports.SCOPES = exports.GROUPS = exports.BITS = void 0;\nexports.BITS = 128;\nexports.GROUPS = 8;\n/**\n * Represents IPv6 address scopes\n * @memberof Address6\n * @static\n */\nexports.SCOPES = {\n 0: 'Reserved',\n 1: 'Interface local',\n 2: 'Link local',\n 4: 'Admin local',\n 5: 'Site local',\n 8: 'Organization local',\n 14: 'Global',\n 15: 'Reserved',\n};\n/**\n * Represents IPv6 address types\n * @memberof Address6\n * @static\n */\nexports.TYPES = {\n 'ff01::1/128': 'Multicast (All nodes on this interface)',\n 'ff01::2/128': 'Multicast (All routers on this interface)',\n 'ff02::1/128': 'Multicast (All nodes on this link)',\n 'ff02::2/128': 'Multicast (All routers on this link)',\n 'ff05::2/128': 'Multicast (All routers in this site)',\n 'ff02::5/128': 'Multicast (OSPFv3 AllSPF routers)',\n 'ff02::6/128': 'Multicast (OSPFv3 AllDR routers)',\n 'ff02::9/128': 'Multicast (RIP routers)',\n 'ff02::a/128': 'Multicast (EIGRP routers)',\n 'ff02::d/128': 'Multicast (PIM routers)',\n 'ff02::16/128': 'Multicast (MLDv2 reports)',\n 'ff01::fb/128': 'Multicast (mDNSv6)',\n 'ff02::fb/128': 'Multicast (mDNSv6)',\n 'ff05::fb/128': 'Multicast (mDNSv6)',\n 'ff02::1:2/128': 'Multicast (All DHCP servers and relay agents on this link)',\n 'ff05::1:2/128': 'Multicast (All DHCP servers and relay agents in this site)',\n 'ff02::1:3/128': 'Multicast (All DHCP servers on this link)',\n 'ff05::1:3/128': 'Multicast (All DHCP servers in this site)',\n '::/128': 'Unspecified',\n '::1/128': 'Loopback',\n 'ff00::/8': 'Multicast',\n 'fe80::/10': 'Link-local unicast',\n};\n/**\n * A regular expression that matches bad characters in an IPv6 address\n * @memberof Address6\n * @static\n */\nexports.RE_BAD_CHARACTERS = /([^0-9a-f:/%])/gi;\n/**\n * A regular expression that matches an incorrect IPv6 address\n * @memberof Address6\n * @static\n */\nexports.RE_BAD_ADDRESS = /([0-9a-f]{5,}|:{3,}|[^:]:$|^:[^:]|\\/$)/gi;\n/**\n * A regular expression that matches an IPv6 subnet\n * @memberof Address6\n * @static\n */\nexports.RE_SUBNET_STRING = /\\/\\d{1,3}(?=%|$)/;\n/**\n * A regular expression that matches an IPv6 zone\n * @memberof Address6\n * @static\n */\nexports.RE_ZONE_STRING = /%.*$/;\nexports.RE_URL = new RegExp(/^\\[{0,1}([0-9a-f:]+)\\]{0,1}/);\nexports.RE_URL_WITH_PORT = new RegExp(/\\[([0-9a-f:]+)\\]:([0-9]{1,5})/);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.simpleGroup = exports.spanLeadingZeroes = exports.spanAll = exports.spanAllZeroes = void 0;\nvar sprintf_js_1 = require(\"sprintf-js\");\n/**\n * @returns {String} the string with all zeroes contained in a <span>\n */\nfunction spanAllZeroes(s) {\n return s.replace(/(0+)/g, '<span class=\"zero\">$1</span>');\n}\nexports.spanAllZeroes = spanAllZeroes;\n/**\n * @returns {String} the string with each character contained in a <span>\n */\nfunction spanAll(s, offset) {\n if (offset === void 0) { offset = 0; }\n var letters = s.split('');\n return letters\n .map(function (n, i) {\n return sprintf_js_1.sprintf('<span class=\"digit value-%s position-%d\">%s</span>', n, i + offset, spanAllZeroes(n));\n } // XXX Use #base-2 .value-0 instead?\n )\n .join('');\n}\nexports.spanAll = spanAll;\nfunction spanLeadingZeroesSimple(group) {\n return group.replace(/^(0+)/, '<span class=\"zero\">$1</span>');\n}\n/**\n * @returns {String} the string with leading zeroes contained in a <span>\n */\nfunction spanLeadingZeroes(address) {\n var groups = address.split(':');\n return groups.map(function (g) { return spanLeadingZeroesSimple(g); }).join(':');\n}\nexports.spanLeadingZeroes = spanLeadingZeroes;\n/**\n * Groups an address\n * @returns {String} a grouped address\n */\nfunction simpleGroup(addressString, offset) {\n if (offset === void 0) { offset = 0; }\n var groups = addressString.split(':');\n return groups.map(function (g, i) {\n if (/group-v4/.test(g)) {\n return g;\n }\n return sprintf_js_1.sprintf('<span class=\"hover-group group-%d\">%s</span>', i + offset, spanLeadingZeroesSimple(g));\n });\n}\nexports.simpleGroup = simpleGroup;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.possibleElisions = exports.simpleRegularExpression = exports.ADDRESS_BOUNDARY = exports.padGroup = exports.groupPossibilities = void 0;\nvar v6 = __importStar(require(\"./constants\"));\nvar sprintf_js_1 = require(\"sprintf-js\");\nfunction groupPossibilities(possibilities) {\n return sprintf_js_1.sprintf('(%s)', possibilities.join('|'));\n}\nexports.groupPossibilities = groupPossibilities;\nfunction padGroup(group) {\n if (group.length < 4) {\n return sprintf_js_1.sprintf('0{0,%d}%s', 4 - group.length, group);\n }\n return group;\n}\nexports.padGroup = padGroup;\nexports.ADDRESS_BOUNDARY = '[^A-Fa-f0-9:]';\nfunction simpleRegularExpression(groups) {\n var zeroIndexes = [];\n groups.forEach(function (group, i) {\n var groupInteger = parseInt(group, 16);\n if (groupInteger === 0) {\n zeroIndexes.push(i);\n }\n });\n // You can technically elide a single 0, this creates the regular expressions\n // to match that eventuality\n var possibilities = zeroIndexes.map(function (zeroIndex) {\n return groups\n .map(function (group, i) {\n if (i === zeroIndex) {\n var elision = i === 0 || i === v6.GROUPS - 1 ? ':' : '';\n return groupPossibilities([padGroup(group), elision]);\n }\n return padGroup(group);\n })\n .join(':');\n });\n // The simplest case\n possibilities.push(groups.map(padGroup).join(':'));\n return groupPossibilities(possibilities);\n}\nexports.simpleRegularExpression = simpleRegularExpression;\nfunction possibleElisions(elidedGroups, moreLeft, moreRight) {\n var left = moreLeft ? '' : ':';\n var right = moreRight ? '' : ':';\n var possibilities = [];\n // 1. elision of everything (::)\n if (!moreLeft && !moreRight) {\n possibilities.push('::');\n }\n // 2. complete elision of the middle\n if (moreLeft && moreRight) {\n possibilities.push('');\n }\n if ((moreRight && !moreLeft) || (!moreRight && moreLeft)) {\n // 3. complete elision of one side\n possibilities.push(':');\n }\n // 4. elision from the left side\n possibilities.push(sprintf_js_1.sprintf('%s(:0{1,4}){1,%d}', left, elidedGroups - 1));\n // 5. elision from the right side\n possibilities.push(sprintf_js_1.sprintf('(0{1,4}:){1,%d}%s', elidedGroups - 1, right));\n // 6. no elision\n possibilities.push(sprintf_js_1.sprintf('(0{1,4}:){%d}0{1,4}', elidedGroups - 1));\n // 7. elision (including sloppy elision) from the middle\n for (var groups = 1; groups < elidedGroups - 1; groups++) {\n for (var position = 1; position < elidedGroups - groups; position++) {\n possibilities.push(sprintf_js_1.sprintf('(0{1,4}:){%d}:(0{1,4}:){%d}0{1,4}', position, elidedGroups - position - groups - 1));\n }\n }\n return groupPossibilities(possibilities);\n}\nexports.possibleElisions = possibleElisions;\n","/* global window, exports, define */\n\n!function() {\n 'use strict'\n\n var re = {\n not_string: /[^s]/,\n not_bool: /[^t]/,\n not_type: /[^T]/,\n not_primitive: /[^v]/,\n number: /[diefg]/,\n numeric_arg: /[bcdiefguxX]/,\n json: /[j]/,\n not_json: /[^j]/,\n text: /^[^\\x25]+/,\n modulo: /^\\x25{2}/,\n placeholder: /^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|'[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,\n key: /^([a-z_][a-z_\\d]*)/i,\n key_access: /^\\.([a-z_][a-z_\\d]*)/i,\n index_access: /^\\[(\\d+)\\]/,\n sign: /^[+-]/\n }\n\n function sprintf(key) {\n // `arguments` is not an array, but should be fine for this call\n return sprintf_format(sprintf_parse(key), arguments)\n }\n\n function vsprintf(fmt, argv) {\n return sprintf.apply(null, [fmt].concat(argv || []))\n }\n\n function sprintf_format(parse_tree, argv) {\n var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, ph, pad, pad_character, pad_length, is_positive, sign\n for (i = 0; i < tree_length; i++) {\n if (typeof parse_tree[i] === 'string') {\n output += parse_tree[i]\n }\n else if (typeof parse_tree[i] === 'object') {\n ph = parse_tree[i] // convenience purposes only\n if (ph.keys) { // keyword argument\n arg = argv[cursor]\n for (k = 0; k < ph.keys.length; k++) {\n if (arg == undefined) {\n throw new Error(sprintf('[sprintf] Cannot access property \"%s\" of undefined value \"%s\"', ph.keys[k], ph.keys[k-1]))\n }\n arg = arg[ph.keys[k]]\n }\n }\n else if (ph.param_no) { // positional argument (explicit)\n arg = argv[ph.param_no]\n }\n else { // positional argument (implicit)\n arg = argv[cursor++]\n }\n\n if (re.not_type.test(ph.type) && re.not_primitive.test(ph.type) && arg instanceof Function) {\n arg = arg()\n }\n\n if (re.numeric_arg.test(ph.type) && (typeof arg !== 'number' && isNaN(arg))) {\n throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))\n }\n\n if (re.number.test(ph.type)) {\n is_positive = arg >= 0\n }\n\n switch (ph.type) {\n case 'b':\n arg = parseInt(arg, 10).toString(2)\n break\n case 'c':\n arg = String.fromCharCode(parseInt(arg, 10))\n break\n case 'd':\n case 'i':\n arg = parseInt(arg, 10)\n break\n case 'j':\n arg = JSON.stringify(arg, null, ph.width ? parseInt(ph.width) : 0)\n break\n case 'e':\n arg = ph.precision ? parseFloat(arg).toExponential(ph.precision) : parseFloat(arg).toExponential()\n break\n case 'f':\n arg = ph.precision ? parseFloat(arg).toFixed(ph.precision) : parseFloat(arg)\n break\n case 'g':\n arg = ph.precision ? String(Number(arg.toPrecision(ph.precision))) : parseFloat(arg)\n break\n case 'o':\n arg = (parseInt(arg, 10) >>> 0).toString(8)\n break\n case 's':\n arg = String(arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 't':\n arg = String(!!arg)\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'T':\n arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'u':\n arg = parseInt(arg, 10) >>> 0\n break\n case 'v':\n arg = arg.valueOf()\n arg = (ph.precision ? arg.substring(0, ph.precision) : arg)\n break\n case 'x':\n arg = (parseInt(arg, 10) >>> 0).toString(16)\n break\n case 'X':\n arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase()\n break\n }\n if (re.json.test(ph.type)) {\n output += arg\n }\n else {\n if (re.number.test(ph.type) && (!is_positive || ph.sign)) {\n sign = is_positive ? '+' : '-'\n arg = arg.toString().replace(re.sign, '')\n }\n else {\n sign = ''\n }\n pad_character = ph.pad_char ? ph.pad_char === '0' ? '0' : ph.pad_char.charAt(1) : ' '\n pad_length = ph.width - (sign + arg).length\n pad = ph.width ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : ''\n output += ph.align ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg)\n }\n }\n }\n return output\n }\n\n var sprintf_cache = Object.create(null)\n\n function sprintf_parse(fmt) {\n if (sprintf_cache[fmt]) {\n return sprintf_cache[fmt]\n }\n\n var _fmt = fmt, match, parse_tree = [], arg_names = 0\n while (_fmt) {\n if ((match = re.text.exec(_fmt)) !== null) {\n parse_tree.push(match[0])\n }\n else if ((match = re.modulo.exec(_fmt)) !== null) {\n parse_tree.push('%')\n }\n else if ((match = re.placeholder.exec(_fmt)) !== null) {\n if (match[2]) {\n arg_names |= 1\n var field_list = [], replacement_field = match[2], field_match = []\n if ((field_match = re.key.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {\n if ((field_match = re.key_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else if ((field_match = re.index_access.exec(replacement_field)) !== null) {\n field_list.push(field_match[1])\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n }\n }\n else {\n throw new SyntaxError('[sprintf] failed to parse named argument key')\n }\n match[2] = field_list\n }\n else {\n arg_names |= 2\n }\n if (arg_names === 3) {\n throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')\n }\n\n parse_tree.push(\n {\n placeholder: match[0],\n param_no: match[1],\n keys: match[2],\n sign: match[3],\n pad_char: match[4],\n align: match[5],\n width: match[6],\n precision: match[7],\n type: match[8]\n }\n )\n }\n else {\n throw new SyntaxError('[sprintf] unexpected placeholder')\n }\n _fmt = _fmt.substring(match[0].length)\n }\n return sprintf_cache[fmt] = parse_tree\n }\n\n /**\n * export to either browser or node.js\n */\n /* eslint-disable quote-props */\n if (typeof exports !== 'undefined') {\n exports['sprintf'] = sprintf\n exports['vsprintf'] = vsprintf\n }\n if (typeof window !== 'undefined') {\n window['sprintf'] = sprintf\n window['vsprintf'] = vsprintf\n\n if (typeof define === 'function' && define['amd']) {\n define(function() {\n return {\n 'sprintf': sprintf,\n 'vsprintf': vsprintf\n }\n })\n }\n }\n /* eslint-enable quote-props */\n}(); // eslint-disable-line\n","'use strict';\n\nconst word = '[a-fA-F\\\\d:]';\nconst b = options => options && options.includeBoundaries ?\n\t`(?:(?<=\\\\s|^)(?=${word})|(?<=${word})(?=\\\\s|$))` :\n\t'';\n\nconst v4 = '(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\\\d|1\\\\d\\\\d|[1-9]\\\\d|\\\\d)){3}';\n\nconst v6seg = '[a-fA-F\\\\d]{1,4}';\nconst v6 = `\n(?:\n(?:${v6seg}:){7}(?:${v6seg}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:${v6seg}:){6}(?:${v4}|:${v6seg}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:${v6seg}:){5}(?::${v4}|(?::${v6seg}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:${v6seg}:){4}(?:(?::${v6seg}){0,1}:${v4}|(?::${v6seg}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:${v6seg}:){3}(?:(?::${v6seg}){0,2}:${v4}|(?::${v6seg}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:${v6seg}:){2}(?:(?::${v6seg}){0,3}:${v4}|(?::${v6seg}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:${v6seg}:){1}(?:(?::${v6seg}){0,4}:${v4}|(?::${v6seg}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::${v6seg}){0,5}:${v4}|(?::${v6seg}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n`.replace(/\\s*\\/\\/.*$/gm, '').replace(/\\n/g, '').trim();\n\n// Pre-compile only the exact regexes because adding a global flag make regexes stateful\nconst v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);\nconst v4exact = new RegExp(`^${v4}$`);\nconst v6exact = new RegExp(`^${v6}$`);\n\nconst ip = options => options && options.exact ?\n\tv46Exact :\n\tnew RegExp(`(?:${b(options)}${v4}${b(options)})|(?:${b(options)}${v6}${b(options)})`, 'g');\n\nip.v4 = options => options && options.exact ? v4exact : new RegExp(`${b(options)}${v4}${b(options)}`, 'g');\nip.v6 = options => options && options.exact ? v6exact : new RegExp(`${b(options)}${v6}${b(options)}`, 'g');\n\nmodule.exports = ip;\n","'use strict'\nconst isElectron = require('is-electron')\n\nconst IS_ENV_WITH_DOM = typeof window === 'object' && typeof document === 'object' && document.nodeType === 9\n// @ts-ignore\nconst IS_ELECTRON = isElectron()\nconst IS_BROWSER = IS_ENV_WITH_DOM && !IS_ELECTRON\nconst IS_ELECTRON_MAIN = IS_ELECTRON && !IS_ENV_WITH_DOM\nconst IS_ELECTRON_RENDERER = IS_ELECTRON && IS_ENV_WITH_DOM\nconst IS_NODE = typeof require === 'function' && typeof process !== 'undefined' && typeof process.release !== 'undefined' && process.release.name === 'node' && !IS_ELECTRON\n// @ts-ignore - we either ignore worker scope or dom scope\nconst IS_WEBWORKER = typeof importScripts === 'function' && typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\nconst IS_TEST = typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.NODE_ENV === 'test'\nconst IS_REACT_NATIVE = typeof navigator !== 'undefined' && navigator.product === 'ReactNative'\n\nmodule.exports = {\n isTest: IS_TEST,\n isElectron: IS_ELECTRON,\n isElectronMain: IS_ELECTRON_MAIN,\n isElectronRenderer: IS_ELECTRON_RENDERER,\n isNode: IS_NODE,\n /**\n * Detects browser main thread **NOT** web worker or service worker\n */\n isBrowser: IS_BROWSER,\n isWebWorker: IS_WEBWORKER,\n isEnvWithDom: IS_ENV_WITH_DOM,\n isReactNative: IS_REACT_NATIVE\n}\n","'use strict';\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\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","// https://github.com/electron/electron/issues/2288\nfunction isElectron() {\n // Renderer process\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\n return true;\n }\n\n // Main process\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\n return true;\n }\n\n // Detect the user agent when the `nodeIntegration` option is set to true\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\n return true;\n }\n\n return false;\n}\n\nmodule.exports = isElectron;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\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';\nconst ipRegex = require('ip-regex');\n\nconst isIp = string => ipRegex({exact: true}).test(string);\nisIp.v4 = string => ipRegex.v4({exact: true}).test(string);\nisIp.v6 = string => ipRegex.v6({exact: true}).test(string);\nisIp.version = string => isIp(string) ? (isIp.v4(string) ? 4 : 6) : undefined;\n\nmodule.exports = isIp;\n","'use strict'\n\n/**\n * Check if a given ip address is a loopback address\n *\n * @param {string} ip - ip address to check\n * @returns {boolean}\n */\nfunction isLoopbackAddr (ip) {\n return /^127\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/i.test(ip) ||\n /^::1$/.test(ip)\n}\n\nmodule.exports = isLoopbackAddr\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\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 $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new global[typedArray]();\n\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t}\n\t\tvar proto = getPrototypeOf(arr);\n\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\tif (!descriptor) {\n\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t}\n\t\ttoStrTags[typedArray] = descriptor.get;\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict'\n\n// limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\nconst MAX_BYTES = 65536\n\n/**\n * @param {number} size\n */\nfunction randomBytes(size) {\n const bytes = new Uint8Array(size)\n let generated = 0\n\n if (size > 0) {\n // getRandomValues fails on IE if size == 0\n if (size > MAX_BYTES) {\n while (generated < size) {\n if (generated + MAX_BYTES > size) {\n crypto.getRandomValues(\n bytes.subarray(generated, generated + (size - generated))\n )\n generated += size - generated\n } else {\n crypto.getRandomValues(\n bytes.subarray(generated, generated + MAX_BYTES)\n )\n generated += MAX_BYTES\n }\n }\n } else {\n crypto.getRandomValues(bytes)\n }\n }\n\n return bytes\n}\n\nmodule.exports = randomBytes\n","'use strict'\n\nconst {\n URLWithLegacySupport,\n format,\n URLSearchParams,\n defaultBase\n} = require('./src/url')\nconst relative = require('./src/relative')\n\nmodule.exports = {\n URL: URLWithLegacySupport,\n URLSearchParams,\n format,\n relative,\n defaultBase\n}\n","'use strict'\n\nconst { URLWithLegacySupport, format } = require('./url')\n\n/**\n * @param {string | undefined} url\n * @param {any} [location]\n * @param {any} [protocolMap]\n * @param {any} [defaultProtocol]\n */\nmodule.exports = (url, location = {}, protocolMap = {}, defaultProtocol) => {\n let protocol = location.protocol\n ? location.protocol.replace(':', '')\n : 'http'\n\n // Check protocol map\n protocol = (protocolMap[protocol] || defaultProtocol || protocol) + ':'\n let urlParsed\n\n try {\n urlParsed = new URLWithLegacySupport(url)\n } catch (err) {\n urlParsed = {}\n }\n\n const base = Object.assign({}, location, {\n protocol: protocol || urlParsed.protocol,\n host: location.host || urlParsed.host\n })\n\n return new URLWithLegacySupport(url, format(base)).toString()\n}\n","'use strict'\n\nconst isReactNative =\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative'\n\nfunction getDefaultBase () {\n if (isReactNative) {\n return 'http://localhost'\n }\n\n return self.location.protocol + '//' + self.location.host\n}\n\nconst URL = self.URL\nconst defaultBase = getDefaultBase()\n\nclass URLWithLegacySupport {\n constructor (url = '', base = defaultBase) {\n this.super = new URL(url, base)\n this.path = this.pathname + this.search\n this.auth =\n this.username && this.password\n ? this.username + ':' + this.password\n : null\n\n this.query =\n this.search && this.search.startsWith('?')\n ? this.search.slice(1)\n : null\n }\n\n get hash () {\n return this.super.hash\n }\n\n get host () {\n return this.super.host\n }\n\n get hostname () {\n return this.super.hostname\n }\n\n get href () {\n return this.super.href\n }\n\n get origin () {\n return this.super.origin\n }\n\n get password () {\n return this.super.password\n }\n\n get pathname () {\n return this.super.pathname\n }\n\n get port () {\n return this.super.port\n }\n\n get protocol () {\n return this.super.protocol\n }\n\n get search () {\n return this.super.search\n }\n\n get searchParams () {\n return this.super.searchParams\n }\n\n get username () {\n return this.super.username\n }\n\n set hash (hash) {\n this.super.hash = hash\n }\n\n set host (host) {\n this.super.host = host\n }\n\n set hostname (hostname) {\n this.super.hostname = hostname\n }\n\n set href (href) {\n this.super.href = href\n }\n\n set password (password) {\n this.super.password = password\n }\n\n set pathname (pathname) {\n this.super.pathname = pathname\n }\n\n set port (port) {\n this.super.port = port\n }\n\n set protocol (protocol) {\n this.super.protocol = protocol\n }\n\n set search (search) {\n this.super.search = search\n }\n\n set username (username) {\n this.super.username = username\n }\n\n /**\n * @param {any} o\n */\n static createObjectURL (o) {\n return URL.createObjectURL(o)\n }\n\n /**\n * @param {string} o\n */\n static revokeObjectURL (o) {\n URL.revokeObjectURL(o)\n }\n\n toJSON () {\n return this.super.toJSON()\n }\n\n toString () {\n return this.super.toString()\n }\n\n format () {\n return this.toString()\n }\n}\n\n/**\n * @param {string | import('url').UrlObject} obj\n */\nfunction format (obj) {\n if (typeof obj === 'string') {\n const url = new URL(obj)\n\n return url.toString()\n }\n\n if (!(obj instanceof URL)) {\n const userPass =\n // @ts-ignore its not supported in node but we normalise\n obj.username && obj.password\n // @ts-ignore its not supported in node but we normalise\n ? `${obj.username}:${obj.password}@`\n : ''\n const auth = obj.auth ? obj.auth + '@' : ''\n const port = obj.port ? ':' + obj.port : ''\n const protocol = obj.protocol ? obj.protocol + '//' : ''\n const host = obj.host || ''\n const hostname = obj.hostname || ''\n const search = obj.search || (obj.query ? '?' + obj.query : '')\n const hash = obj.hash || ''\n const pathname = obj.pathname || ''\n // @ts-ignore - path is not supported in node but we normalise\n const path = obj.path || pathname + search\n\n return `${protocol}${userPass || auth}${\n host || hostname + port\n }${path}${hash}`\n }\n}\n\nmodule.exports = {\n URLWithLegacySupport,\n URLSearchParams: self.URLSearchParams,\n defaultBase,\n format\n}\n","'use strict'\n\n/**\n * Collects all values from an (async) iterable into an array and returns it.\n *\n * @template T\n * @param {AsyncIterable<T>|Iterable<T>} source\n */\nconst all = async (source) => {\n const arr = []\n\n for await (const entry of source) {\n arr.push(entry)\n }\n\n return arr\n}\n\nmodule.exports = all\n","'use strict'\n\nconst { Buffer } = require('buffer')\nconst BufferList = require('bl/BufferList')\n\nmodule.exports = async function * (source) {\n for await (const b of source) {\n if (Buffer.isBuffer(b)) {\n yield b\n } else if (BufferList.isBufferList(b)) {\n yield b.slice()\n } else {\n yield Buffer.from(b)\n }\n }\n}\n\nmodule.exports.toBuffer = module.exports\n\nmodule.exports.toList = async function * (source) {\n for await (const b of source) {\n if (Buffer.isBuffer(b)) {\n yield new BufferList().append(b)\n } else if (BufferList.isBufferList(b)) {\n yield b\n } else {\n yield new BufferList().append(Buffer.from(b))\n }\n }\n}\n","const BufferList = require('bl/BufferList')\n\nconst TypeDefault = {\n string: () => '',\n buffer: () => BufferList()\n}\n\nmodule.exports = async (source, options) => {\n options = options || {}\n\n if (options.type && !TypeDefault[options.type]) {\n throw new Error(`invalid type \"${options.type}\"`)\n }\n\n let res, type\n for await (const chunk of source) {\n if (!res) {\n type = options.type || (typeof chunk === 'string' ? 'string' : 'buffer')\n res = TypeDefault[type]()\n }\n\n if (type === 'string') {\n res += chunk\n } else {\n res.append(chunk)\n }\n }\n\n return res || TypeDefault[options.type || 'buffer']()\n}\n","'use strict'\n\n/**\n * Drains an (async) iterable discarding its' content and does not return\n * anything.\n *\n * @template T\n * @param {AsyncIterable<T>|Iterable<T>} source\n * @returns {Promise<void>}\n */\nconst drain = async (source) => {\n for await (const _ of source) { } // eslint-disable-line no-unused-vars,no-empty\n}\n\nmodule.exports = drain\n","'use strict'\n\n/**\n * Filters the passed (async) iterable by using the filter function\n *\n * @template T\n * @param {AsyncIterable<T>|Iterable<T>} source\n * @param {function(T):boolean|Promise<boolean>} fn\n */\nconst filter = async function * (source, fn) {\n for await (const entry of source) {\n if (await fn(entry)) {\n yield entry\n }\n }\n}\n\nmodule.exports = filter\n","'use strict'\n\n/**\n * Returns the first result from an (async) iterable, unless empty, in which\n * case returns `undefined`.\n *\n * @template T\n * @param {AsyncIterable<T>|Iterable<T>} source\n */\nconst first = async (source) => {\n for await (const entry of source) { // eslint-disable-line no-unreachable-loop\n return entry\n }\n\n return undefined\n}\n\nmodule.exports = first\n","'use strict'\n\n/**\n * Invokes the passed function for each item in an iterable\n *\n * @template T\n * @param {AsyncIterable<T>|Iterable<T>} source\n * @param {(thing: T) => void | Promise<void>} fn\n */\nconst each = async function * (source, fn) {\n for await (const thing of source) {\n await fn(thing)\n yield thing\n }\n}\n\nmodule.exports = each\n","'use strict'\n\nconst Reader = require('it-reader')\nconst Writer = require('it-pushable')\nconst defer = require('p-defer')\n\n// Convert a duplex stream into a reader and writer and rest stream\nmodule.exports = stream => {\n const writer = Writer() // Write bytes on demand to the sink\n const reader = Reader(stream.source) // Read bytes on demand from the source\n\n // Waits for a source to be passed to the rest stream's sink\n const sourcePromise = defer()\n let sinkErr\n\n const sinkPromise = stream.sink((async function * () {\n yield * writer\n const source = await sourcePromise.promise\n yield * source\n })())\n\n sinkPromise.catch(err => {\n sinkErr = err\n })\n\n const rest = {\n sink: source => {\n if (sinkErr) {\n return Promise.reject(sinkErr)\n }\n\n sourcePromise.resolve(source)\n return sinkPromise\n },\n source: reader\n }\n\n return {\n reader,\n writer,\n stream: rest,\n rest: () => writer.end(),\n write: writer.push,\n read: async () => {\n return (await reader.next()).value\n }\n }\n}\n","'use strict'\n\nconst { Buffer } = require('buffer')\n// @ts-ignore\nconst BufferList = require('bl/BufferList')\nconst varintDecode = require('./varint-decode')\n\n// Maximum length of the length section of the message\nconst MAX_LENGTH_LENGTH = 8 // Varint.encode(Number.MAX_SAFE_INTEGER).length\n// Maximum length of the data section of the message\nconst MAX_DATA_LENGTH = 1024 * 1024 * 4\n\nconst Empty = Buffer.alloc(0)\nconst ReadModes = { LENGTH: 'readLength', DATA: 'readData' }\n\nconst ReadHandlers = {\n /**\n * @param {BufferList} chunk\n * @param {BufferList} buffer\n * @param {import('./types').ReadState | undefined} state\n * @param {import('./types').DecoderOptions} options\n * @returns {import('./types').ReadResult}\n */\n [ReadModes.LENGTH]: (chunk, buffer, state, options) => {\n // console.log(ReadModes.LENGTH, chunk.length)\n buffer = buffer.append(chunk)\n\n let dataLength\n try {\n dataLength = options.lengthDecoder(buffer)\n } catch (err) {\n if (buffer.length > options.maxLengthLength) {\n throw Object.assign(err, { message: 'message length too long', code: 'ERR_MSG_LENGTH_TOO_LONG' })\n }\n if (err instanceof RangeError) {\n return { mode: ReadModes.LENGTH, buffer, chunk: undefined, state: undefined, data: undefined }\n }\n throw err\n }\n\n if (dataLength > options.maxDataLength) {\n throw Object.assign(new Error('message data too long'), { code: 'ERR_MSG_DATA_TOO_LONG' })\n }\n\n chunk = buffer.shallowSlice(options.lengthDecoder.bytes)\n buffer = new BufferList()\n\n if (options.onLength) options.onLength(dataLength)\n\n if (dataLength <= 0) {\n if (options.onData) options.onData(Empty)\n return { mode: ReadModes.LENGTH, chunk, buffer, data: Empty }\n }\n\n return { mode: ReadModes.DATA, chunk, buffer, state: { dataLength }, data: undefined }\n },\n\n /**\n * @param {BufferList} chunk\n * @param {BufferList} buffer\n * @param {import('./types').ReadState | undefined} state\n * @param {import('./types').DecoderOptions} options\n * @returns {import('./types').ReadResult}\n */\n [ReadModes.DATA]: (chunk, buffer, state, options) => {\n // console.log(ReadModes.DATA, chunk.length)\n buffer = buffer.append(chunk)\n\n if (!state) {\n throw new Error('state is required')\n }\n\n if (buffer.length < state.dataLength) {\n return { mode: ReadModes.DATA, buffer, state, chunk: undefined, data: undefined }\n }\n\n const { dataLength } = state\n const data = buffer.shallowSlice(0, dataLength)\n\n const nextChunk = buffer.length > dataLength ? buffer.shallowSlice(dataLength) : undefined\n buffer = new BufferList()\n\n if (options.onData) options.onData(data)\n return { mode: ReadModes.LENGTH, chunk: nextChunk, buffer, state: undefined, data }\n }\n}\n\n/**\n * @param {any} [options]\n */\nfunction decode (options) {\n options = options || {}\n\n /**\n * @type {import('./types').DecoderOptions}\n */\n const opts = {\n lengthDecoder: options.lengthDecoder || varintDecode,\n maxLengthLength: options.maxLengthLength || MAX_LENGTH_LENGTH,\n maxDataLength: options.maxDataLength || MAX_DATA_LENGTH,\n onLength: options.onLength,\n onData: options.onData\n }\n\n /**\n * @param {AsyncIterable<BufferList>} source\n */\n const decoder = async function * (source) {\n let buffer = new BufferList()\n let mode = ReadModes.LENGTH // current parsing mode\n let state // accumulated state for the current mode\n\n for await (const chunk of source) {\n /** @type {BufferList | undefined} */\n let nextChunk = chunk\n\n // Each chunk may contain multiple messages - keep calling handler for the\n // current parsing mode until all handlers have consumed the chunk.\n while (nextChunk) {\n const result = ReadHandlers[mode](nextChunk, buffer, state, opts)\n\n mode = result.mode\n nextChunk = result.chunk\n buffer = result.buffer\n state = result.state\n\n if (result.data) {\n yield result.data\n }\n }\n }\n\n if (buffer.length) {\n throw Object.assign(new Error('unexpected end of input'), { code: 'ERR_UNEXPECTED_EOF' })\n }\n }\n\n return decoder\n}\n\n/**\n * @param {*} reader\n * @param {import('./types').DecoderOptions} [options]\n * @returns\n */\ndecode.fromReader = (reader, options) => {\n let byteLength = 1 // Read single byte chunks until the length is known\n\n const varByteSource = {\n [Symbol.asyncIterator] () { return this },\n next: async () => {\n try {\n return await reader.next(byteLength)\n } catch (err) {\n if (err.code === 'ERR_UNDER_READ') {\n return { done: true, value: null }\n }\n throw err\n } finally {\n // Reset the byteLength so we continue to check for varints\n byteLength = 1\n }\n }\n }\n\n /**\n * Once the length has been parsed, read chunk for that length\n *\n * @param {number} l\n */\n const onLength = l => { byteLength = l }\n return decode({\n ...(options || {}),\n onLength\n })(varByteSource)\n}\n\nmodule.exports = decode\nmodule.exports.MAX_LENGTH_LENGTH = MAX_LENGTH_LENGTH\nmodule.exports.MAX_DATA_LENGTH = MAX_DATA_LENGTH\n","'use strict'\n\nconst { Buffer } = require('buffer')\n// @ts-ignore\nconst BufferList = require('bl/BufferList')\nconst varintEncode = require('./varint-encode')\n\nconst MIN_POOL_SIZE = 8 // Varint.encode(Number.MAX_SAFE_INTEGER).length\nconst DEFAULT_POOL_SIZE = 10 * 1024\n\n/**\n * @param {import('./types').EncoderOptions} [options]\n */\nfunction encode (options) {\n options = options || {}\n\n const poolSize = Math.max(options.poolSize || DEFAULT_POOL_SIZE, options.minPoolSize || MIN_POOL_SIZE)\n const encodeLength = options.lengthEncoder || varintEncode\n\n /**\n * @param {AsyncIterable<BufferList>} source\n */\n const encoder = async function * (source) {\n let pool = Buffer.alloc(poolSize)\n let poolOffset = 0\n\n for await (const chunk of source) {\n encodeLength(chunk.length, pool, poolOffset)\n const encodedLength = pool.slice(poolOffset, poolOffset + encodeLength.bytes)\n poolOffset += encodeLength.bytes\n\n if (pool.length - poolOffset < MIN_POOL_SIZE) {\n pool = Buffer.alloc(poolSize)\n poolOffset = 0\n }\n\n yield new BufferList().append(encodedLength).append(chunk)\n // yield Buffer.concat([encodedLength, chunk])\n }\n }\n\n return encoder\n}\n\n/**\n * @param {BufferList | Buffer} chunk\n * @param {import('./types').EncoderOptions} [options]\n */\nencode.single = (chunk, options) => {\n options = options || {}\n const encodeLength = options.lengthEncoder || varintEncode\n return new BufferList([encodeLength(chunk.length), chunk.slice()])\n}\n\nmodule.exports = encode\nmodule.exports.MIN_POOL_SIZE = MIN_POOL_SIZE\nmodule.exports.DEFAULT_POOL_SIZE = DEFAULT_POOL_SIZE\n","'use strict'\n\n/**\n * @typedef {import('./types').EncoderOptions} EncoderOptions\n * @typedef {import('./types').DecoderOptions} DecoderOptions\n */\n\nexports.encode = require('./encode')\nexports.decode = require('./decode')\n\nexports.varintEncode = require('./varint-encode')\nexports.varintDecode = require('./varint-decode')\n\nexports.int32BEEncode = require('./int32BE-encode')\nexports.int32BEDecode = require('./int32BE-decode')\n","'use strict'\n\n/**\n * @param {import('buffer').Buffer} data\n */\nconst int32BEDecode = data => {\n if (data.length < 4) throw RangeError('Could not decode int32BE')\n return data.readInt32BE(0)\n}\n\nint32BEDecode.bytes = 4 // Always because fixed length\n\nmodule.exports = int32BEDecode\n","'use strict'\n\nconst { Buffer } = require('buffer')\n\n/**\n * @param {number} value\n * @param {Buffer} target\n * @param {number} offset\n */\nconst int32BEEncode = (value, target, offset) => {\n target = target || Buffer.allocUnsafe(4)\n target.writeInt32BE(value, offset)\n return target\n}\n\nint32BEEncode.bytes = 4 // Always because fixed length\n\nmodule.exports = int32BEEncode\n","'use strict'\n\n// @ts-ignore no types\nconst Varint = require('varint')\nconst { Buffer } = require('buffer')\n\n/**\n * @param {any} bl\n */\nconst toBufferProxy = bl => new Proxy({}, {\n get: (_, prop) => {\n // @ts-ignore magic\n return prop[0] === 'l' ? bl[prop] : bl.get(parseInt(prop))\n }\n})\n\n/**\n * @type {import('./types').LengthDecoderFunction}\n */\n// @ts-ignore cannot declare expected bytes property\nconst varintDecode = data => {\n const len = Varint.decode(Buffer.isBuffer(data) ? data : toBufferProxy(data))\n varintDecode.bytes = Varint.decode.bytes\n return len\n}\n\nmodule.exports = varintDecode\n","'use strict'\n\n// @ts-ignore no types\nconst Varint = require('varint')\nconst { Buffer } = require('buffer')\n\n/**\n * Encode the passed length `value` to the `target` buffer at the given `offset`\n *\n * @type {import('./types').LengthEncoderFunction}\n */\n// @ts-ignore cannot declare expected bytes property\nconst varintEncode = (value, target, offset) => {\n const ret = Varint.encode(value, target, offset)\n varintEncode.bytes = Varint.encode.bytes\n // If no target, create Buffer from returned array\n return target || Buffer.from(ret)\n}\n\nmodule.exports = varintEncode\n","'use strict'\n\n/**\n * Takes an (async) iterable and returns one with each item mapped by the passed\n * function.\n *\n * @template I,O\n * @param {AsyncIterable<I>|Iterable<I>} source\n * @param {function(I):O|Promise<O>} func\n * @returns {AsyncIterable<O>}\n */\nconst map = async function * (source, func) {\n for await (const val of source) {\n yield func(val)\n }\n}\n\nmodule.exports = map\n","'use strict'\n\nconst pushable = require('it-pushable')\n\n/**\n * Treat one or more iterables as a single iterable.\n *\n * Nb. sources are iterated over in parallel so the\n * order of emitted items is not guaranteed.\n *\n * @template T\n * @param {...AsyncIterable<T>|Iterable<T>} sources\n * @returns {AsyncIterable<T>}\n */\nconst merge = async function * (...sources) {\n const output = pushable()\n\n setTimeout(async () => {\n try {\n await Promise.all(\n sources.map(async (source) => {\n for await (const item of source) {\n output.push(item)\n }\n })\n )\n\n output.end()\n } catch (/** @type {any} */ err) {\n output.end(err)\n }\n }, 0)\n\n yield * output\n}\n\nmodule.exports = merge\n","\nvar Pair = require('./')\nmodule.exports = function () {\n var a = Pair()\n var b = Pair()\n return [\n {\n source: a.source,\n sink: b.sink\n },\n {\n source: b.source,\n sink: a.sink\n }\n ]\n}\n","'use strict'\n\nconst getIterator = require('get-iterator')\n\n// a pair of streams where one drains from the other\nmodule.exports = function pair () {\n let _source, onSource\n\n const sink = async source => {\n if (_source) throw new Error('already piped')\n _source = getIterator(source)\n if (onSource) onSource(_source)\n }\n\n const source = {\n [Symbol.asyncIterator] () {\n return this\n },\n next () {\n if (_source) return _source.next()\n return new Promise(resolve => {\n onSource = source => {\n onSource = null\n resolve(source.next())\n }\n })\n }\n }\n\n return { sink, source }\n}\n","'use strict'\n\nconst Shake = require('it-handshake')\nconst lp = require('it-length-prefixed')\n\nmodule.exports = (duplex, opts = {}) => {\n const shake = Shake(duplex)\n const lpReader = lp.decode.fromReader(\n shake.reader,\n opts\n )\n\n let isDone = false\n\n const W = {\n read: async (bytes) => {\n // just read\n\n const { value, done } = await shake.reader.next(bytes)\n\n if (done && value.length < bytes) {\n throw new Error('Couldn\\'t read enough bytes')\n }\n\n isDone = done\n\n if (!value) { throw new Error('Value is null') }\n return value\n },\n readLP: async () => {\n // read, decode\n const { value, done } = await lpReader.next()\n\n isDone = done\n\n if (!value) { throw new Error('Value is null') }\n return value\n },\n readPB: async (proto) => {\n // readLP, decode\n const value = await W.readLP()\n\n if (!value) { throw new Error('Value is null') }\n\n // Is this a Uint8Array?\n const buf = value instanceof Uint8Array ? value : value.slice()\n\n return proto.decode(buf)\n },\n write: (data) => {\n // just write\n shake.writer.push(data)\n },\n writeLP: (data) => {\n // encode, write\n W.write(lp.encode.single(data, opts))\n },\n writePB: (data, proto) => {\n // encode, writeLP\n W.writeLP(proto.encode(data))\n },\n\n pb: (proto) => {\n return {\n read: () => W.readPB(proto),\n write: (d) => W.writePB(d, proto)\n }\n },\n\n unwrap: () => {\n // returns vanilla duplex again, terminates all reads/writes from this object\n shake.rest()\n return shake.stream\n }\n }\n\n return W\n}\n","const rawPipe = (...fns) => {\n let res\n while (fns.length) {\n res = fns.shift()(res)\n }\n return res\n}\n\nconst isIterable = obj => obj && (\n typeof obj[Symbol.asyncIterator] === 'function' ||\n typeof obj[Symbol.iterator] === 'function' ||\n typeof obj.next === 'function' // Probably, right?\n)\n\nconst isDuplex = obj => obj && typeof obj.sink === 'function' && isIterable(obj.source)\n\nconst duplexPipelineFn = duplex => source => {\n duplex.sink(source) // TODO: error on sink side is unhandled rejection - this is the same as pull streams\n return duplex.source\n}\n\nconst pipe = (...fns) => {\n // Duplex at start: wrap in function and return duplex source\n if (isDuplex(fns[0])) {\n const duplex = fns[0]\n fns[0] = () => duplex.source\n // Iterable at start: wrap in function\n } else if (isIterable(fns[0])) {\n const source = fns[0]\n fns[0] = () => source\n }\n\n if (fns.length > 1) {\n // Duplex at end: use duplex sink\n if (isDuplex(fns[fns.length - 1])) {\n fns[fns.length - 1] = fns[fns.length - 1].sink\n }\n }\n\n if (fns.length > 2) {\n // Duplex in the middle, consume source with duplex sink and return duplex source\n for (let i = 1; i < fns.length - 1; i++) {\n if (isDuplex(fns[i])) {\n fns[i] = duplexPipelineFn(fns[i])\n }\n }\n }\n\n return rawPipe(...fns)\n}\n\nmodule.exports = pipe\nmodule.exports.pipe = pipe\nmodule.exports.rawPipe = rawPipe\nmodule.exports.isIterable = isIterable\nmodule.exports.isDuplex = isDuplex\n","const FIFO = require('fast-fifo')\n\nmodule.exports = (options) => {\n options = options || {}\n let onEnd\n\n if (typeof options === 'function') {\n onEnd = options\n options = {}\n } else {\n onEnd = options.onEnd\n }\n\n let buffer = new FIFO()\n let pushable, onNext, ended\n\n const waitNext = () => {\n if (!buffer.isEmpty()) {\n if (options.writev) {\n let next\n const values = []\n while (!buffer.isEmpty()) {\n next = buffer.shift()\n if (next.error) throw next.error\n values.push(next.value)\n }\n return { done: next.done, value: values }\n }\n\n const next = buffer.shift()\n if (next.error) throw next.error\n return next\n }\n\n if (ended) return { done: true }\n\n return new Promise((resolve, reject) => {\n onNext = next => {\n onNext = null\n if (next.error) {\n reject(next.error)\n } else {\n if (options.writev && !next.done) {\n resolve({ done: next.done, value: [next.value] })\n } else {\n resolve(next)\n }\n }\n return pushable\n }\n })\n }\n\n const bufferNext = next => {\n if (onNext) return onNext(next)\n buffer.push(next)\n return pushable\n }\n\n const bufferError = err => {\n buffer = new FIFO()\n if (onNext) return onNext({ error: err })\n buffer.push({ error: err })\n return pushable\n }\n\n const push = value => {\n if (ended) return pushable\n return bufferNext({ done: false, value })\n }\n const end = err => {\n if (ended) return pushable\n ended = true\n return err ? bufferError(err) : bufferNext({ done: true })\n }\n const _return = () => {\n buffer = new FIFO()\n end()\n return { done: true }\n }\n const _throw = err => {\n end(err)\n return { done: true }\n }\n\n pushable = {\n [Symbol.asyncIterator] () { return this },\n next: waitNext,\n return: _return,\n throw: _throw,\n push,\n end\n }\n\n if (!onEnd) return pushable\n\n const _pushable = pushable\n\n pushable = {\n [Symbol.asyncIterator] () { return this },\n next () {\n return _pushable.next()\n },\n throw (err) {\n _pushable.throw(err)\n if (onEnd) {\n onEnd(err)\n onEnd = null\n }\n return { done: true }\n },\n return () {\n _pushable.return()\n if (onEnd) {\n onEnd()\n onEnd = null\n }\n return { done: true }\n },\n push,\n end (err) {\n _pushable.end(err)\n if (onEnd) {\n onEnd(err)\n onEnd = null\n }\n return pushable\n }\n }\n\n return pushable\n}\n","const BufferList = require('bl/BufferList')\n\nmodule.exports = source => {\n const reader = (async function * () {\n let bytes = yield // Allows us to receive 8 when reader.next(8) is called\n let bl = new BufferList()\n\n for await (const chunk of source) {\n if (!bytes) {\n bytes = yield bl.append(chunk)\n bl = new BufferList()\n continue\n }\n\n bl.append(chunk)\n\n while (bl.length >= bytes) {\n const data = bl.shallowSlice(0, bytes)\n bl.consume(bytes)\n bytes = yield data\n\n // If we no longer want a specific byte length, we yield the rest now\n if (!bytes) {\n if (bl.length) {\n bytes = yield bl\n bl = new BufferList()\n }\n break // bytes is null and/or no more buffer to yield\n }\n }\n }\n\n // Consumer wants more bytes but the source has ended and our buffer\n // is not big enough to satisfy.\n if (bytes) {\n throw Object.assign(\n new Error(`stream ended before ${bytes} bytes became available`),\n { code: 'ERR_UNDER_READ', buffer: bl }\n )\n }\n })()\n\n reader.next()\n return reader\n}\n","'use strict'\n\nconst all = require('it-all')\n\n/**\n * Collects all values from an async iterator, sorts them\n * using the passed function and yields them\n *\n * @template T\n * @param {AsyncIterable<T> | Iterable<T>} source\n * @param {(a: T, b: T) => -1 | 0 | 1} sorter\n */\nconst sort = async function * (source, sorter) {\n const arr = await all(source)\n\n yield * arr.sort(sorter)\n}\n\nmodule.exports = sort\n","'use strict'\n\n/**\n * Stop iteration after n items have been received.\n *\n * @template T\n * @param {AsyncIterable<T>|Iterable<T>} source\n * @param {number} limit\n * @returns {AsyncIterable<T>}\n */\nconst take = async function * (source, limit) {\n let items = 0\n\n if (limit < 1) {\n return\n }\n\n for await (const entry of source) {\n yield entry\n\n items++\n\n if (items === limit) {\n return\n }\n }\n}\n\nmodule.exports = take\n","'use strict'\n\n// load websocket library if we are not in the browser\nvar WebSocket = require('./web-socket')\nvar duplex = require('./duplex')\nvar wsurl = require('./ws-url')\n\nmodule.exports = function (addr, opts = {}) {\n const location = typeof window === 'undefined' ? {} : window.location\n\n const url = wsurl(addr, location)\n const socket = new WebSocket(url, opts.websocket)\n\n const stream = duplex(socket, opts)\n stream.remoteAddress = url\n stream.close = () => new Promise((resolve, reject) => {\n socket.addEventListener('close', resolve)\n socket.close()\n })\n stream.destroy = () => {\n if (socket.terminate) {\n socket.terminate()\n } else {\n socket.close()\n }\n }\n stream.socket = socket\n\n return stream\n}\n\nmodule.exports.connect = module.exports\n","const source = require('./source')\nconst sink = require('./sink')\n\nmodule.exports = (socket, options) => {\n options = options || {}\n\n if (options.binaryType) {\n socket.binaryType = options.binaryType\n } else if (options.binary) {\n socket.binaryType = 'arraybuffer'\n }\n\n const duplex = {\n sink: sink(socket, options),\n source: source(socket, options),\n connected: () => duplex.source.connected()\n }\n\n return duplex\n}\n","module.exports = async socket => {\n // if the socket is closing or closed, return end\n if (socket.readyState >= 2) {\n throw new Error('socket closed')\n }\n\n // if open, return\n if (socket.readyState === 1) {\n return\n }\n\n return new Promise((resolve, reject) => {\n const remove = socket && (socket.removeEventListener || socket.removeListener)\n\n function cleanup () {\n if (typeof remove === 'function') {\n remove.call(socket, 'open', handleOpen)\n remove.call(socket, 'error', handleErr)\n }\n }\n\n function handleOpen () {\n cleanup(); resolve()\n }\n\n function handleErr (evt) {\n cleanup(); reject(evt)\n }\n\n socket.addEventListener('open', handleOpen)\n socket.addEventListener('error', handleErr)\n })\n}\n","const ready = require('./ready')\n\nmodule.exports = (socket, options) => {\n options = options || {}\n options.closeOnEnd = options.closeOnEnd !== false\n\n return async source => {\n for await (const data of source) {\n try {\n await ready(socket)\n } catch (err) {\n if (err.message === 'socket closed') break\n throw err\n }\n\n socket.send(data)\n }\n\n if (options.closeOnEnd && socket.readyState <= 1) {\n return new Promise((resolve, reject) => {\n socket.addEventListener('close', event => {\n if (event.wasClean || event.code === 1006) {\n resolve()\n } else {\n const err = Object.assign(new Error('ws error'), { event })\n reject(err)\n }\n })\n\n setTimeout(() => socket.close())\n })\n }\n }\n}\n","const { Buffer } = require('buffer')\nconst { EventIterator } = require('event-iterator')\n\n// copied from github.com/feross/buffer\n// Some ArrayBuffers are not passing the instanceof check, so we need to do a bit more work :(\nfunction isArrayBuffer (obj) {\n return obj instanceof ArrayBuffer ||\n (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&\n typeof obj.byteLength === 'number')\n}\n\nmodule.exports = socket => {\n const removeListener = socket.removeEventListener || socket.removeListener\n\n const source = (async function * () {\n const messages = new EventIterator(\n ({ push, stop, fail }) => {\n socket.addEventListener('message', push)\n socket.addEventListener('error', fail)\n socket.addEventListener('close', stop)\n\n return () => {\n removeListener.call(socket, 'message', push)\n removeListener.call(socket, 'error', fail)\n removeListener.call(socket, 'close', stop)\n }\n },\n { highWaterMark: Infinity }\n )\n\n for await (const { data } of messages) {\n yield isArrayBuffer(data) ? Buffer.from(data) : data\n }\n })()\n\n let connected = socket.readyState === 1\n let connError\n\n socket.addEventListener('open', () => {\n connected = true\n connError = null\n })\n\n socket.addEventListener('close', () => {\n connected = false\n connError = null\n })\n\n socket.addEventListener('error', err => {\n if (!connected) connError = err\n })\n\n source.connected = () => new Promise((resolve, reject) => {\n if (connected) return resolve()\n if (connError) return reject(connError)\n\n const cleanUp = cont => {\n removeListener.call(socket, 'open', onOpen)\n removeListener.call(socket, 'error', onError)\n cont()\n }\n\n const onOpen = () => cleanUp(resolve)\n const onError = err => cleanUp(() => reject(err))\n\n socket.addEventListener('open', onOpen)\n socket.addEventListener('error', onError)\n })\n\n return source\n}\n","/* eslint-env browser */\nmodule.exports = typeof WebSocket === 'undefined' ? require('ws') : WebSocket\n","const { relative } = require('iso-url')\nconst map = { http: 'ws', https: 'wss' }\nconst def = 'ws'\n\nmodule.exports = (url, location) => relative(url, location, map, def)\n","/**\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\n *\n * @version 0.8.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2015-2018\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var INPUT_ERROR = 'input is invalid type';\n var FINALIZE_ERROR = 'finalize already called';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA3_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\n var PADDING = [6, 1536, 393216, 100663296];\n var SHIFT = [0, 8, 16, 24];\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\n var BITS = [224, 256, 384, 512];\n var SHAKE_BITS = [128, 256];\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\n var CSHAKE_BYTEPAD = {\n '128': 168,\n '256': 136\n };\n\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (bits, padding, outputType) {\n return function (message) {\n return new Keccak(bits, padding, bits).update(message)[outputType]();\n };\n };\n\n var createShakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits) {\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\n };\n };\n\n var createCshakeOutputMethod = function (bits, padding, outputType) {\n return function (message, outputBits, n, s) {\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\n };\n };\n\n var createKmacOutputMethod = function (bits, padding, outputType) {\n return function (key, message, outputBits, s) {\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\n };\n };\n\n var createOutputMethods = function (method, createMethod, bits, padding) {\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createMethod(bits, padding, type);\n }\n return method;\n };\n\n var createMethod = function (bits, padding) {\n var method = createOutputMethod(bits, padding, 'hex');\n method.create = function () {\n return new Keccak(bits, padding, bits);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n return createOutputMethods(method, createOutputMethod, bits, padding);\n };\n\n var createShakeMethod = function (bits, padding) {\n var method = createShakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits) {\n return new Keccak(bits, padding, outputBits);\n };\n method.update = function (message, outputBits) {\n return method.create(outputBits).update(message);\n };\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\n };\n\n var createCshakeMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createCshakeOutputMethod(bits, padding, 'hex');\n method.create = function (outputBits, n, s) {\n if (!n && !s) {\n return methods['shake' + bits].create(outputBits);\n } else {\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\n }\n };\n method.update = function (message, outputBits, n, s) {\n return method.create(outputBits, n, s).update(message);\n };\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\n };\n\n var createKmacMethod = function (bits, padding) {\n var w = CSHAKE_BYTEPAD[bits];\n var method = createKmacOutputMethod(bits, padding, 'hex');\n method.create = function (key, outputBits, s) {\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\n };\n method.update = function (key, message, outputBits, s) {\n return method.create(key, outputBits, s).update(message);\n };\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\n };\n\n var algorithms = [\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\n ];\n\n var methods = {}, methodNames = [];\n\n for (var i = 0; i < algorithms.length; ++i) {\n var algorithm = algorithms[i];\n var bits = algorithm.bits;\n for (var j = 0; j < bits.length; ++j) {\n var methodName = algorithm.name + '_' + bits[j];\n methodNames.push(methodName);\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\n if (algorithm.name !== 'sha3') {\n var newMethodName = algorithm.name + bits[j];\n methodNames.push(newMethodName);\n methods[newMethodName] = methods[methodName];\n }\n }\n }\n\n function Keccak(bits, padding, outputBits) {\n this.blocks = [];\n this.s = [];\n this.padding = padding;\n this.outputBits = outputBits;\n this.reset = true;\n this.finalized = false;\n this.block = 0;\n this.start = 0;\n this.blockCount = (1600 - (bits << 1)) >> 5;\n this.byteCount = this.blockCount << 2;\n this.outputBlocks = outputBits >> 5;\n this.extraBytes = (outputBits & 31) >> 3;\n\n for (var i = 0; i < 50; ++i) {\n this.s[i] = 0;\n }\n }\n\n Keccak.prototype.update = function (message) {\n if (this.finalized) {\n throw new Error(FINALIZE_ERROR);\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\n\n while (index < length) {\n if (this.reset) {\n this.reset = false;\n blocks[0] = this.block;\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n if (notString) {\n for (i = this.start; index < length && i < byteCount; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < byteCount; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n this.lastByteIndex = i;\n if (i >= byteCount) {\n this.start = i - byteCount;\n this.block = blocks[blockCount];\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n this.reset = true;\n } else {\n this.start = i;\n }\n }\n return this;\n };\n\n Keccak.prototype.encode = function (x, right) {\n var o = x & 255, n = 1;\n var bytes = [o];\n x = x >> 8;\n o = x & 255;\n while (o > 0) {\n bytes.unshift(o);\n x = x >> 8;\n o = x & 255;\n ++n;\n }\n if (right) {\n bytes.push(n);\n } else {\n bytes.unshift(n);\n }\n this.update(bytes);\n return bytes.length;\n };\n\n Keccak.prototype.encodeString = function (str) {\n var notString, type = typeof str;\n if (type !== 'string') {\n if (type === 'object') {\n if (str === null) {\n throw new Error(INPUT_ERROR);\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\n str = new Uint8Array(str);\n } else if (!Array.isArray(str)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\n throw new Error(INPUT_ERROR);\n }\n }\n } else {\n throw new Error(INPUT_ERROR);\n }\n notString = true;\n }\n var bytes = 0, length = str.length;\n if (notString) {\n bytes = length;\n } else {\n for (var i = 0; i < str.length; ++i) {\n var code = str.charCodeAt(i);\n if (code < 0x80) {\n bytes += 1;\n } else if (code < 0x800) {\n bytes += 2;\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes += 3;\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\n bytes += 4;\n }\n }\n }\n bytes += this.encode(bytes * 8);\n this.update(str);\n return bytes;\n };\n\n Keccak.prototype.bytepad = function (strs, w) {\n var bytes = this.encode(w);\n for (var i = 0; i < strs.length; ++i) {\n bytes += this.encodeString(strs[i]);\n }\n var paddingBytes = w - bytes % w;\n var zeros = [];\n zeros.length = paddingBytes;\n this.update(zeros);\n return this;\n };\n\n Keccak.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\n blocks[i >> 2] |= this.padding[i & 3];\n if (this.lastByteIndex === this.byteCount) {\n blocks[0] = blocks[blockCount];\n for (i = 1; i < blockCount + 1; ++i) {\n blocks[i] = 0;\n }\n }\n blocks[blockCount - 1] |= 0x80000000;\n for (i = 0; i < blockCount; ++i) {\n s[i] ^= blocks[i];\n }\n f(s);\n };\n\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var hex = '', block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\n }\n if (j % blockCount === 0) {\n f(s);\n i = 0;\n }\n }\n if (extraBytes) {\n block = s[i];\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\n if (extraBytes > 1) {\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\n }\n if (extraBytes > 2) {\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\n }\n }\n return hex;\n };\n\n Keccak.prototype.arrayBuffer = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var bytes = this.outputBits >> 3;\n var buffer;\n if (extraBytes) {\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\n } else {\n buffer = new ArrayBuffer(bytes);\n }\n var array = new Uint32Array(buffer);\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n array[j] = s[i];\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n array[i] = s[i];\n buffer = buffer.slice(0, bytes);\n }\n return buffer;\n };\n\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\n\n Keccak.prototype.digest = Keccak.prototype.array = function () {\n this.finalize();\n\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\n extraBytes = this.extraBytes, i = 0, j = 0;\n var array = [], offset, block;\n while (j < outputBlocks) {\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n array[offset + 1] = (block >> 8) & 0xFF;\n array[offset + 2] = (block >> 16) & 0xFF;\n array[offset + 3] = (block >> 24) & 0xFF;\n }\n if (j % blockCount === 0) {\n f(s);\n }\n }\n if (extraBytes) {\n offset = j << 2;\n block = s[i];\n array[offset] = block & 0xFF;\n if (extraBytes > 1) {\n array[offset + 1] = (block >> 8) & 0xFF;\n }\n if (extraBytes > 2) {\n array[offset + 2] = (block >> 16) & 0xFF;\n }\n }\n return array;\n };\n\n function Kmac(bits, padding, outputBits) {\n Keccak.call(this, bits, padding, outputBits);\n }\n\n Kmac.prototype = new Keccak();\n\n Kmac.prototype.finalize = function () {\n this.encode(this.outputBits, true);\n return Keccak.prototype.finalize.call(this);\n };\n\n var f = function (s) {\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\n for (n = 0; n < 48; n += 2) {\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\n\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\n s[0] ^= h;\n s[1] ^= l;\n s[10] ^= h;\n s[11] ^= l;\n s[20] ^= h;\n s[21] ^= l;\n s[30] ^= h;\n s[31] ^= l;\n s[40] ^= h;\n s[41] ^= l;\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\n s[2] ^= h;\n s[3] ^= l;\n s[12] ^= h;\n s[13] ^= l;\n s[22] ^= h;\n s[23] ^= l;\n s[32] ^= h;\n s[33] ^= l;\n s[42] ^= h;\n s[43] ^= l;\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\n s[4] ^= h;\n s[5] ^= l;\n s[14] ^= h;\n s[15] ^= l;\n s[24] ^= h;\n s[25] ^= l;\n s[34] ^= h;\n s[35] ^= l;\n s[44] ^= h;\n s[45] ^= l;\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\n s[6] ^= h;\n s[7] ^= l;\n s[16] ^= h;\n s[17] ^= l;\n s[26] ^= h;\n s[27] ^= l;\n s[36] ^= h;\n s[37] ^= l;\n s[46] ^= h;\n s[47] ^= l;\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\n s[8] ^= h;\n s[9] ^= l;\n s[18] ^= h;\n s[19] ^= l;\n s[28] ^= h;\n s[29] ^= l;\n s[38] ^= h;\n s[39] ^= l;\n s[48] ^= h;\n s[49] ^= l;\n\n b0 = s[0];\n b1 = s[1];\n b32 = (s[11] << 4) | (s[10] >>> 28);\n b33 = (s[10] << 4) | (s[11] >>> 28);\n b14 = (s[20] << 3) | (s[21] >>> 29);\n b15 = (s[21] << 3) | (s[20] >>> 29);\n b46 = (s[31] << 9) | (s[30] >>> 23);\n b47 = (s[30] << 9) | (s[31] >>> 23);\n b28 = (s[40] << 18) | (s[41] >>> 14);\n b29 = (s[41] << 18) | (s[40] >>> 14);\n b20 = (s[2] << 1) | (s[3] >>> 31);\n b21 = (s[3] << 1) | (s[2] >>> 31);\n b2 = (s[13] << 12) | (s[12] >>> 20);\n b3 = (s[12] << 12) | (s[13] >>> 20);\n b34 = (s[22] << 10) | (s[23] >>> 22);\n b35 = (s[23] << 10) | (s[22] >>> 22);\n b16 = (s[33] << 13) | (s[32] >>> 19);\n b17 = (s[32] << 13) | (s[33] >>> 19);\n b48 = (s[42] << 2) | (s[43] >>> 30);\n b49 = (s[43] << 2) | (s[42] >>> 30);\n b40 = (s[5] << 30) | (s[4] >>> 2);\n b41 = (s[4] << 30) | (s[5] >>> 2);\n b22 = (s[14] << 6) | (s[15] >>> 26);\n b23 = (s[15] << 6) | (s[14] >>> 26);\n b4 = (s[25] << 11) | (s[24] >>> 21);\n b5 = (s[24] << 11) | (s[25] >>> 21);\n b36 = (s[34] << 15) | (s[35] >>> 17);\n b37 = (s[35] << 15) | (s[34] >>> 17);\n b18 = (s[45] << 29) | (s[44] >>> 3);\n b19 = (s[44] << 29) | (s[45] >>> 3);\n b10 = (s[6] << 28) | (s[7] >>> 4);\n b11 = (s[7] << 28) | (s[6] >>> 4);\n b42 = (s[17] << 23) | (s[16] >>> 9);\n b43 = (s[16] << 23) | (s[17] >>> 9);\n b24 = (s[26] << 25) | (s[27] >>> 7);\n b25 = (s[27] << 25) | (s[26] >>> 7);\n b6 = (s[36] << 21) | (s[37] >>> 11);\n b7 = (s[37] << 21) | (s[36] >>> 11);\n b38 = (s[47] << 24) | (s[46] >>> 8);\n b39 = (s[46] << 24) | (s[47] >>> 8);\n b30 = (s[8] << 27) | (s[9] >>> 5);\n b31 = (s[9] << 27) | (s[8] >>> 5);\n b12 = (s[18] << 20) | (s[19] >>> 12);\n b13 = (s[19] << 20) | (s[18] >>> 12);\n b44 = (s[29] << 7) | (s[28] >>> 25);\n b45 = (s[28] << 7) | (s[29] >>> 25);\n b26 = (s[38] << 8) | (s[39] >>> 24);\n b27 = (s[39] << 8) | (s[38] >>> 24);\n b8 = (s[48] << 14) | (s[49] >>> 18);\n b9 = (s[49] << 14) | (s[48] >>> 18);\n\n s[0] = b0 ^ (~b2 & b4);\n s[1] = b1 ^ (~b3 & b5);\n s[10] = b10 ^ (~b12 & b14);\n s[11] = b11 ^ (~b13 & b15);\n s[20] = b20 ^ (~b22 & b24);\n s[21] = b21 ^ (~b23 & b25);\n s[30] = b30 ^ (~b32 & b34);\n s[31] = b31 ^ (~b33 & b35);\n s[40] = b40 ^ (~b42 & b44);\n s[41] = b41 ^ (~b43 & b45);\n s[2] = b2 ^ (~b4 & b6);\n s[3] = b3 ^ (~b5 & b7);\n s[12] = b12 ^ (~b14 & b16);\n s[13] = b13 ^ (~b15 & b17);\n s[22] = b22 ^ (~b24 & b26);\n s[23] = b23 ^ (~b25 & b27);\n s[32] = b32 ^ (~b34 & b36);\n s[33] = b33 ^ (~b35 & b37);\n s[42] = b42 ^ (~b44 & b46);\n s[43] = b43 ^ (~b45 & b47);\n s[4] = b4 ^ (~b6 & b8);\n s[5] = b5 ^ (~b7 & b9);\n s[14] = b14 ^ (~b16 & b18);\n s[15] = b15 ^ (~b17 & b19);\n s[24] = b24 ^ (~b26 & b28);\n s[25] = b25 ^ (~b27 & b29);\n s[34] = b34 ^ (~b36 & b38);\n s[35] = b35 ^ (~b37 & b39);\n s[44] = b44 ^ (~b46 & b48);\n s[45] = b45 ^ (~b47 & b49);\n s[6] = b6 ^ (~b8 & b0);\n s[7] = b7 ^ (~b9 & b1);\n s[16] = b16 ^ (~b18 & b10);\n s[17] = b17 ^ (~b19 & b11);\n s[26] = b26 ^ (~b28 & b20);\n s[27] = b27 ^ (~b29 & b21);\n s[36] = b36 ^ (~b38 & b30);\n s[37] = b37 ^ (~b39 & b31);\n s[46] = b46 ^ (~b48 & b40);\n s[47] = b47 ^ (~b49 & b41);\n s[8] = b8 ^ (~b0 & b2);\n s[9] = b9 ^ (~b1 & b3);\n s[18] = b18 ^ (~b10 & b12);\n s[19] = b19 ^ (~b11 & b13);\n s[28] = b28 ^ (~b20 & b22);\n s[29] = b29 ^ (~b21 & b23);\n s[38] = b38 ^ (~b30 & b32);\n s[39] = b39 ^ (~b31 & b33);\n s[48] = b48 ^ (~b40 & b42);\n s[49] = b49 ^ (~b41 & b43);\n\n s[0] ^= RC[n];\n s[1] ^= RC[n + 1];\n }\n };\n\n if (COMMON_JS) {\n module.exports = methods;\n } else {\n for (i = 0; i < methodNames.length; ++i) {\n root[methodNames[i]] = methods[methodNames[i]];\n }\n if (AMD) {\n define(function () {\n return methods;\n });\n }\n }\n})();\n","(function(){\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 // Bits per digit\n var dbits;\n\n // JavaScript engine analysis\n var canary = 0xdeadbeefcafe;\n var j_lm = ((canary&0xffffff)==0xefcafe);\n\n // (public) Constructor\n function BigInteger(a,b,c) {\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 }\n\n // return new, unset BigInteger\n function 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)\n function am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this[i++]+w[j]+c;\n c = Math.floor(v/0x4000000);\n w[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)\n function am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this[i]&0x7fff;\n var h = this[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w[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.\n function am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this[i]&0x3fff;\n var h = this[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w[j++] = l&0xfffffff;\n }\n return c;\n }\n var inBrowser = typeof navigator !== \"undefined\";\n if(inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n }\n else if(inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n }\n else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n }\n\n BigInteger.prototype.DB = dbits;\n BigInteger.prototype.DM = ((1<<dbits)-1);\n BigInteger.prototype.DV = (1<<dbits);\n\n var BI_FP = 52;\n BigInteger.prototype.FV = Math.pow(2,BI_FP);\n BigInteger.prototype.F1 = BI_FP-dbits;\n BigInteger.prototype.F2 = 2*dbits-BI_FP;\n\n // Digit conversions\n var BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\n var BI_RC = new Array();\n var rr,vv;\n rr = \"0\".charCodeAt(0);\n for(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\n rr = \"a\".charCodeAt(0);\n for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n rr = \"A\".charCodeAt(0);\n for(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n\n function int2char(n) { return BI_RM.charAt(n); }\n function intAt(s,i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c==null)?-1:c;\n }\n\n // (protected) copy this to r\n function bnpCopyTo(r) {\n for(var i = this.t-1; i >= 0; --i) r[i] = this[i];\n r.t = this.t;\n r.s = this.s;\n }\n\n // (protected) set from integer value x, -DV <= x < DV\n function bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this[0] = x;\n else if(x < -1) this[0] = x+this.DV;\n else this.t = 0;\n }\n\n // return bigint initialized to value\n function nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n // (protected) set from string and radix\n function 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[this.t++] = x;\n else if(sh+k > this.DB) {\n this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<<sh;\n this[this.t++] = (x>>(this.DB-sh));\n }\n else\n this[this.t-1] |= x<<sh;\n sh += k;\n if(sh >= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)<<sh;\n }\n this.clamp();\n if(mi) BigInteger.ZERO.subTo(this,this);\n }\n\n // (protected) clamp off excess high words\n function bnpClamp() {\n var c = this.s&this.DM;\n while(this.t > 0 && this[this.t-1] == c) --this.t;\n }\n\n // (public) return string representation in given radix\n function 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<<k)-1, d, m = false, r = \"\", i = this.t;\n var p = this.DB-(i*this.DB)%k;\n if(i-- > 0) {\n if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this[i]&((1<<p)-1))<<(k-p);\n d |= this[--i]>>(p+=this.DB-k);\n }\n else {\n d = (this[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\n function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n // (public) |this|\n function bnAbs() { return (this.s<0)?this.negate():this; }\n\n // (public) return + if this > a, - if this < a, 0 if equal\n function 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[i]-a[i]) != 0) return r;\n return 0;\n }\n\n // returns bit length of the integer x\n function 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\"\n function bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));\n }\n\n // (protected) r = this << n*DB\n function bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];\n for(i = n-1; i >= 0; --i) r[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n }\n\n // (protected) r = this >> n*DB\n function bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r[i-n] = this[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n }\n\n // (protected) r = this << n\n function bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<<cbs)-1;\n var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;\n for(i = this.t-1; i >= 0; --i) {\n r[i+ds+1] = (this[i]>>cbs)|c;\n c = (this[i]&bm)<<bs;\n }\n for(i = ds-1; i >= 0; --i) r[i] = 0;\n r[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n }\n\n // (protected) r = this >> n\n function 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)-1;\n r[0] = this[ds]>>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r[i-ds-1] |= (this[i]&bm)<<cbs;\n r[i-ds] = this[i]>>bs;\n }\n if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<<cbs;\n r.t = this.t-ds;\n r.clamp();\n }\n\n // (protected) r = this - a\n function bnpSubTo(a,r) {\n var i = 0, c = 0, m = Math.min(a.t,this.t);\n while(i < m) {\n c += this[i]-a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c -= a[i];\n r[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[i++] = this.DV+c;\n else if(c > 0) r[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.\n function 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[i] = 0;\n for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[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)\n function bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x[i],r,2*i,0,1);\n if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r[i+x.t] -= x.DV;\n r[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r[r.t-1] += x.am(i,x[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.\n function 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[pm.t-1]); // normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }\n else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;\n var i = r.t, j = i-ys, t = (q==null)?nbi():q;\n y.dlShiftTo(j,t);\n if(r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y); // \"negative\" y so we can replace sub with am later\n while(y.t < ys) y[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);\n if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r[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); // Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n }\n\n // (public) this mod a\n function 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\n function Classic(m) { this.m = m; }\n function cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n }\n function cRevert(x) { return x; }\n function cReduce(x) { x.divRemTo(this.m,null,x); }\n function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n Classic.prototype.convert = cConvert;\n Classic.prototype.revert = cRevert;\n Classic.prototype.reduce = cReduce;\n Classic.prototype.mulTo = cMulTo;\n Classic.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.\n function bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this[0];\n if((x&1) == 0) return 0;\n var y = x&3; // y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // 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; // 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\n function 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\n function 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\n function 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)\n function montReduce(x) {\n while(x.t <= this.mt2) // pad x so am has enough room later\n x[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x[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[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x[j] >= x.DV) { x[j] -= x.DV; x[++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\n function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n // r = \"xy/R mod m\"; x,y != r\n function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n Montgomery.prototype.convert = montConvert;\n Montgomery.prototype.revert = montRevert;\n Montgomery.prototype.reduce = montReduce;\n Montgomery.prototype.mulTo = montMulTo;\n Montgomery.prototype.sqrTo = montSqrTo;\n\n // (protected) true iff this is even\n function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }\n\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n function 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<<i)) > 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\n function 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\n BigInteger.prototype.copyTo = bnpCopyTo;\n BigInteger.prototype.fromInt = bnpFromInt;\n BigInteger.prototype.fromString = bnpFromString;\n BigInteger.prototype.clamp = bnpClamp;\n BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n BigInteger.prototype.lShiftTo = bnpLShiftTo;\n BigInteger.prototype.rShiftTo = bnpRShiftTo;\n BigInteger.prototype.subTo = bnpSubTo;\n BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n BigInteger.prototype.squareTo = bnpSquareTo;\n BigInteger.prototype.divRemTo = bnpDivRemTo;\n BigInteger.prototype.invDigit = bnpInvDigit;\n BigInteger.prototype.isEven = bnpIsEven;\n BigInteger.prototype.exp = bnpExp;\n\n // public\n BigInteger.prototype.toString = bnToString;\n BigInteger.prototype.negate = bnNegate;\n BigInteger.prototype.abs = bnAbs;\n BigInteger.prototype.compareTo = bnCompareTo;\n BigInteger.prototype.bitLength = bnBitLength;\n BigInteger.prototype.mod = bnMod;\n BigInteger.prototype.modPowInt = bnModPowInt;\n\n // \"constants\"\n BigInteger.ZERO = nbv(0);\n BigInteger.ONE = nbv(1);\n\n // Copyright (c) 2005-2009 Tom Wu\n // All Rights Reserved.\n // See \"LICENSE\" for details.\n\n // Extended JavaScript BN functions, required for RSA private ops.\n\n // Version 1.1: new BigInteger(\"0\", 10) returns \"proper\" zero\n // Version 1.2: square() API, isProbablePrime fix\n\n // (public)\n function bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n // (public) return value as integer\n function bnIntValue() {\n if(this.s < 0) {\n if(this.t == 1) return this[0]-this.DV;\n else if(this.t == 0) return -1;\n }\n else if(this.t == 1) return this[0];\n else if(this.t == 0) return 0;\n // assumes 16 < DB < 32\n return ((this[1]&((1<<(32-this.DB))-1))<<this.DB)|this[0];\n }\n\n // (public) return value as byte\n function bnByteValue() { return (this.t==0)?this.s:(this[0]<<24)>>24; }\n\n // (public) return value as short (assumes DB>=16)\n function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }\n\n // (protected) return x s.t. r^x < DV\n function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n // (public) 0 if this == 0, 1 if this > 0\n function bnSigNum() {\n if(this.s < 0) return -1;\n else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n else return 1;\n }\n\n // (protected) convert to radix string\n function bnpToRadix(b) {\n if(b == null) b = 10;\n if(this.signum() == 0 || b < 2 || b > 36) return \"0\";\n var cs = this.chunkSize(b);\n var a = Math.pow(b,cs);\n var d = nbv(a), y = nbi(), z = nbi(), r = \"\";\n this.divRemTo(d,y,z);\n while(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n }\n return z.intValue().toString(b) + r;\n }\n\n // (protected) convert from radix string\n function bnpFromRadix(s,b) {\n this.fromInt(0);\n if(b == null) b = 10;\n var cs = this.chunkSize(b);\n var d = Math.pow(b,cs), mi = false, j = 0, w = 0;\n for(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 }\n if(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n }\n if(mi) BigInteger.ZERO.subTo(this,this);\n }\n\n // (protected) alternate constructor\n function bnpFromNumber(a,b,c) {\n if(\"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 }\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<<t)-1); else x[0] = 0;\n this.fromString(x,256);\n }\n }\n\n // (public) convert to bigendian byte array\n function bnToByteArray() {\n var i = this.t, r = new Array();\n r[0] = this.s;\n var p = this.DB-(i*this.DB)%8, d, k = 0;\n if(i-- > 0) {\n if(p < this.DB && (d = this[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[i]&((1<<p)-1))<<(8-p);\n d |= this[--i]>>(p+=this.DB-8);\n }\n else {\n d = (this[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 }\n return r;\n }\n\n function bnEquals(a) { return(this.compareTo(a)==0); }\n function bnMin(a) { return(this.compareTo(a)<0)?this:a; }\n function bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n // (protected) r = this op a (bitwise)\n function bnpBitwiseTo(a,op,r) {\n var i, f, m = Math.min(a.t,this.t);\n for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);\n if(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r[i] = op(this[i],f);\n r.t = this.t;\n }\n else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);\n r.t = a.t;\n }\n r.s = op(this.s,a.s);\n r.clamp();\n }\n\n // (public) this & a\n function op_and(x,y) { return x&y; }\n function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n // (public) this | a\n function op_or(x,y) { return x|y; }\n function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n // (public) this ^ a\n function op_xor(x,y) { return x^y; }\n function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n // (public) this & ~a\n function op_andnot(x,y) { return x&~y; }\n function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n // (public) ~this\n function bnNot() {\n var r = nbi();\n for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];\n r.t = this.t;\n r.s = ~this.s;\n return r;\n }\n\n // (public) this << n\n function bnShiftLeft(n) {\n var r = nbi();\n if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\n return r;\n }\n\n // (public) this >> n\n function bnShiftRight(n) {\n var r = nbi();\n if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\n return r;\n }\n\n // return index of lowest 1-bit in x, x < 2^31\n function lbit(x) {\n if(x == 0) return -1;\n var r = 0;\n if((x&0xffff) == 0) { x >>= 16; r += 16; }\n if((x&0xff) == 0) { x >>= 8; r += 8; }\n if((x&0xf) == 0) { x >>= 4; r += 4; }\n if((x&3) == 0) { x >>= 2; r += 2; }\n if((x&1) == 0) ++r;\n return r;\n }\n\n // (public) returns index of lowest 1-bit (or -1 if none)\n function bnGetLowestSetBit() {\n for(var i = 0; i < this.t; ++i)\n if(this[i] != 0) return i*this.DB+lbit(this[i]);\n if(this.s < 0) return this.t*this.DB;\n return -1;\n }\n\n // return number of 1 bits in x\n function cbit(x) {\n var r = 0;\n while(x != 0) { x &= x-1; ++r; }\n return r;\n }\n\n // (public) return number of set bits\n function bnBitCount() {\n var r = 0, x = this.s&this.DM;\n for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);\n return r;\n }\n\n // (public) true iff nth bit is set\n function bnTestBit(n) {\n var j = Math.floor(n/this.DB);\n if(j >= this.t) return(this.s!=0);\n return((this[j]&(1<<(n%this.DB)))!=0);\n }\n\n // (protected) this op (1<<n)\n function bnpChangeBit(n,op) {\n var r = BigInteger.ONE.shiftLeft(n);\n this.bitwiseTo(r,op,r);\n return r;\n }\n\n // (public) this | (1<<n)\n function bnSetBit(n) { return this.changeBit(n,op_or); }\n\n // (public) this & ~(1<<n)\n function bnClearBit(n) { return this.changeBit(n,op_andnot); }\n\n // (public) this ^ (1<<n)\n function bnFlipBit(n) { return this.changeBit(n,op_xor); }\n\n // (protected) r = this + a\n function bnpAddTo(a,r) {\n var i = 0, c = 0, m = Math.min(a.t,this.t);\n while(i < m) {\n c += this[i]+a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n if(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c += a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c<0)?-1:0;\n if(c > 0) r[i++] = c;\n else if(c < -1) r[i++] = this.DV+c;\n r.t = i;\n r.clamp();\n }\n\n // (public) this + a\n function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n // (public) this - a\n function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n // (public) this * a\n function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n // (public) this^2\n function bnSquare() { var r = nbi(); this.squareTo(r); return r; }\n\n // (public) this / a\n function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n // (public) this % a\n function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n // (public) [this/a,this%a]\n function bnDivideAndRemainder(a) {\n var q = nbi(), r = nbi();\n this.divRemTo(a,q,r);\n return new Array(q,r);\n }\n\n // (protected) this *= n, this >= 0, 1 < n < DV\n function bnpDMultiply(n) {\n this[this.t] = this.am(0,n-1,this,0,0,this.t);\n ++this.t;\n this.clamp();\n }\n\n // (protected) this += n << w words, this >= 0\n function bnpDAddOffset(n,w) {\n if(n == 0) return;\n while(this.t <= w) this[this.t++] = 0;\n this[w] += n;\n while(this[w] >= this.DV) {\n this[w] -= this.DV;\n if(++w >= this.t) this[this.t++] = 0;\n ++this[w];\n }\n }\n\n // A \"null\" reducer\n function NullExp() {}\n function nNop(x) { return x; }\n function nMulTo(x,y,r) { x.multiplyTo(y,r); }\n function nSqrTo(x,r) { x.squareTo(r); }\n\n NullExp.prototype.convert = nNop;\n NullExp.prototype.revert = nNop;\n NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.sqrTo = nSqrTo;\n\n // (public) this^e\n function 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.\n function bnpMultiplyLowerTo(a,n,r) {\n var i = Math.min(this.t+a.t,n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while(i > 0) r[--i] = 0;\n var j;\n for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);\n for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);\n r.clamp();\n }\n\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n function bnpMultiplyUpperTo(a,n,r) {\n --n;\n var i = r.t = this.t+a.t-n;\n r.s = 0; // assumes a,this >= 0\n while(--i >= 0) r[i] = 0;\n for(i = Math.max(n-this.t,0); i < a.t; ++i)\n r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);\n r.clamp();\n r.drShiftTo(1,r);\n }\n\n // Barrett modular reduction\n function 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\n function 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\n function barrettRevert(x) { return x; }\n\n // x = x mod m (HAC 14.42)\n function barrettReduce(x) {\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\n function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n // r = x*y mod m; x,y != r\n function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.reduce = barrettReduce;\n Barrett.prototype.mulTo = barrettMulTo;\n Barrett.prototype.sqrTo = barrettSqrTo;\n\n // (public) this^e % m (HAC 14.85)\n function bnModPow(e,m) {\n var i = e.bitLength(), k, r = nbv(1), z;\n if(i <= 0) return r;\n else if(i < 18) k = 1;\n else if(i < 48) k = 3;\n else if(i < 144) k = 4;\n else if(i < 768) k = 5;\n else k = 6;\n if(i < 8)\n z = new Classic(m);\n else if(m.isEven())\n z = new Barrett(m);\n else\n z = new Montgomery(m);\n\n // precomputation\n var g = new Array(), n = 3, k1 = k-1, km = (1<<k)-1;\n g[1] = z.convert(this);\n if(k > 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\n var j = e.t-1, w, is1 = true, r2 = nbi(), t;\n i = nbits(e[j])-1;\n while(j >= 0) {\n if(i >= k1) w = (e[j]>>(i-k1))&km;\n else {\n w = (e[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e[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 }\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[j]&(1<<i)) == 0) {\n z.sqrTo(r,r2); t = r; r = r2; r2 = t;\n if(--i < 0) { i = this.DB-1; --j; }\n }\n }\n return z.revert(r);\n }\n\n // (public) gcd(this,a) (HAC 14.54)\n function bnGCD(a) {\n var x = (this.s<0)?this.negate():this.clone();\n var y = (a.s<0)?a.negate():a.clone();\n if(x.compareTo(y) < 0) { var t = x; x = y; y = t; }\n var i = x.getLowestSetBit(), g = y.getLowestSetBit();\n if(g < 0) return x;\n if(i < g) g = i;\n if(g > 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n }\n while(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 }\n else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n }\n if(g > 0) y.lShiftTo(g,y);\n return y;\n }\n\n // (protected) this % n, n < 2^26\n function bnpModInt(n) {\n if(n <= 0) return 0;\n var d = this.DV%n, r = (this.s<0)?n-1:0;\n if(this.t > 0)\n if(d == 0) r = this[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;\n return r;\n }\n\n // (public) 1/this % m (HAC 14.61)\n function bnModInverse(m) {\n var ac = m.isEven();\n if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n var u = m.clone(), v = this.clone();\n var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\n while(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 }\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 }\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 }\n else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n }\n if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n if(d.compareTo(m) >= 0) return d.subtract(m);\n if(d.signum() < 0) d.addTo(m,d); else return d;\n if(d.signum() < 0) return d.add(m); else return d;\n }\n\n var 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,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];\n var lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n // (public) test primality with certainty >= 1-.5^t\n function bnIsProbablePrime(t) {\n var i, x = this.abs();\n if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x[0] == lowprimes[i]) return true;\n return false;\n }\n if(x.isEven()) return false;\n i = 1;\n while(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 }\n return x.millerRabin(t);\n }\n\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n function bnpMillerRabin(t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if(k <= 0) return false;\n var r = n1.shiftRight(k);\n t = (t+1)>>1;\n if(t > lowprimes.length) t = lowprimes.length;\n var a = nbi();\n for(var i = 0; i < t; ++i) {\n //Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);\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 }\n return true;\n }\n\n // protected\n BigInteger.prototype.chunkSize = bnpChunkSize;\n BigInteger.prototype.toRadix = bnpToRadix;\n BigInteger.prototype.fromRadix = bnpFromRadix;\n BigInteger.prototype.fromNumber = bnpFromNumber;\n BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n BigInteger.prototype.changeBit = bnpChangeBit;\n BigInteger.prototype.addTo = bnpAddTo;\n BigInteger.prototype.dMultiply = bnpDMultiply;\n BigInteger.prototype.dAddOffset = bnpDAddOffset;\n BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n BigInteger.prototype.modInt = bnpModInt;\n BigInteger.prototype.millerRabin = bnpMillerRabin;\n\n // public\n BigInteger.prototype.clone = bnClone;\n BigInteger.prototype.intValue = bnIntValue;\n BigInteger.prototype.byteValue = bnByteValue;\n BigInteger.prototype.shortValue = bnShortValue;\n BigInteger.prototype.signum = bnSigNum;\n BigInteger.prototype.toByteArray = bnToByteArray;\n BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.min = bnMin;\n BigInteger.prototype.max = bnMax;\n BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.or = bnOr;\n BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.not = bnNot;\n BigInteger.prototype.shiftLeft = bnShiftLeft;\n BigInteger.prototype.shiftRight = bnShiftRight;\n BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n BigInteger.prototype.bitCount = bnBitCount;\n BigInteger.prototype.testBit = bnTestBit;\n BigInteger.prototype.setBit = bnSetBit;\n BigInteger.prototype.clearBit = bnClearBit;\n BigInteger.prototype.flipBit = bnFlipBit;\n BigInteger.prototype.add = bnAdd;\n BigInteger.prototype.subtract = bnSubtract;\n BigInteger.prototype.multiply = bnMultiply;\n BigInteger.prototype.divide = bnDivide;\n BigInteger.prototype.remainder = bnRemainder;\n BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n BigInteger.prototype.modPow = bnModPow;\n BigInteger.prototype.modInverse = bnModInverse;\n BigInteger.prototype.pow = bnPow;\n BigInteger.prototype.gcd = bnGCD;\n BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n // JSBN-specific extension\n BigInteger.prototype.square = bnSquare;\n\n // Expose the Barrett function\n BigInteger.prototype.Barrett = Barrett\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 // Random number generator - requires a PRNG backend, e.g. prng4.js\n\n // For best results, put code like\n // <body onClick='rng_seed_time();' onKeyPress='rng_seed_time();'>\n // in your main HTML document.\n\n var rng_state;\n var rng_pool;\n var rng_pptr;\n\n // Mix in a 32-bit integer into the pool\n function rng_seed_int(x) {\n rng_pool[rng_pptr++] ^= x & 255;\n rng_pool[rng_pptr++] ^= (x >> 8) & 255;\n rng_pool[rng_pptr++] ^= (x >> 16) & 255;\n rng_pool[rng_pptr++] ^= (x >> 24) & 255;\n if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;\n }\n\n // Mix in the current time (w/milliseconds) into the pool\n function rng_seed_time() {\n rng_seed_int(new Date().getTime());\n }\n\n // Initialize the pool with junk if needed.\n if(rng_pool == null) {\n rng_pool = new Array();\n rng_pptr = 0;\n var t;\n if(typeof window !== \"undefined\" && window.crypto) {\n if (window.crypto.getRandomValues) {\n // Use webcrypto if available\n var ua = new Uint8Array(32);\n window.crypto.getRandomValues(ua);\n for(t = 0; t < 32; ++t)\n rng_pool[rng_pptr++] = ua[t];\n }\n else if(navigator.appName == \"Netscape\" && navigator.appVersion < \"5\") {\n // Extract entropy (256 bits) from NS4 RNG if available\n var z = window.crypto.random(32);\n for(t = 0; t < z.length; ++t)\n rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n }\n }\n while(rng_pptr < rng_psize) { // extract some randomness from Math.random()\n t = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = t >>> 8;\n rng_pool[rng_pptr++] = t & 255;\n }\n rng_pptr = 0;\n rng_seed_time();\n //rng_seed_int(window.screenX);\n //rng_seed_int(window.screenY);\n }\n\n function rng_get_byte() {\n if(rng_state == null) {\n rng_seed_time();\n rng_state = prng_newstate();\n rng_state.init(rng_pool);\n for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)\n rng_pool[rng_pptr] = 0;\n rng_pptr = 0;\n //rng_pool = null;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n }\n\n function rng_get_bytes(ba) {\n var i;\n for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n }\n\n function SecureRandom() {}\n\n SecureRandom.prototype.nextBytes = rng_get_bytes;\n\n // prng4.js - uses Arcfour as a PRNG\n\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = new Array();\n }\n\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n function ARC4init(key) {\n var i, j, t;\n for(i = 0; i < 256; ++i)\n this.S[i] = i;\n j = 0;\n for(i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n }\n\n function ARC4next() {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n }\n\n Arcfour.prototype.init = ARC4init;\n Arcfour.prototype.next = ARC4next;\n\n // Plug in your RNG constructor here\n function prng_newstate() {\n return new Arcfour();\n }\n\n // Pool size must be a multiple of 4 and greater than 32.\n // An array of bytes the size of the pool will be passed to init()\n var rng_psize = 256;\n\n if (typeof exports !== 'undefined') {\n exports = module.exports = {\n default: BigInteger,\n BigInteger: BigInteger,\n SecureRandom: SecureRandom,\n };\n } else {\n this.jsbn = {\n BigInteger: BigInteger,\n SecureRandom: SecureRandom\n };\n }\n\n}).call(this);\n","'use strict'\n\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\nconst mafmt = require('mafmt')\nconst { EventEmitter } = require('events')\nconst debug = require('debug')\n\nconst log = Object.assign(debug('libp2p:bootstrap'), {\n error: debug('libp2p:bootstrap:error')\n})\n\n/**\n * Emits 'peer' events on a regular interval for each peer in the provided list.\n */\nclass Bootstrap extends EventEmitter {\n /**\n * Constructs a new Bootstrap.\n *\n * @param {Object} options\n * @param {Array<string>} options.list - the list of peer addresses in multi-address format\n * @param {number} [options.interval = 10000] - the interval between emitting addresses in milliseconds\n *\n */\n constructor (options = { list: [] }) {\n if (!options.list || !options.list.length) {\n throw new Error('Bootstrap requires a list of peer addresses')\n }\n super()\n\n this._list = options.list\n this._interval = options.interval || 10000\n this._timer = null\n }\n\n /**\n * Start emitting events.\n */\n start () {\n if (this._timer) {\n return\n }\n\n this._timer = setInterval(() => this._discoverBootstrapPeers(), this._interval)\n log('Starting bootstrap node discovery')\n this._discoverBootstrapPeers()\n }\n\n /**\n * Emit each address in the list as a PeerInfo.\n */\n _discoverBootstrapPeers () {\n if (!this._timer) {\n return\n }\n\n this._list.forEach((candidate) => {\n if (!mafmt.P2P.matches(candidate)) {\n return log.error('Invalid multiaddr')\n }\n\n const ma = new Multiaddr(candidate)\n const peerIdStr = ma.getPeerId()\n\n if (!peerIdStr) {\n log.error('Invalid bootstrap multiaddr without peer id')\n return\n }\n\n const peerId = PeerId.createFromB58String(peerIdStr)\n\n try {\n this.emit('peer', {\n id: peerId,\n multiaddrs: [ma]\n })\n } catch (err) {\n log.error('Invalid bootstrap peer id', err)\n }\n })\n }\n\n /**\n * Stop emitting events.\n */\n stop () {\n if (this._timer) clearInterval(this._timer)\n this._timer = null\n }\n}\n\nexports = module.exports = Bootstrap\nexports.tag = 'bootstrap'\n","'use strict'\n\nconst errcode = require('err-code')\n\nconst CIPHER_MODES = {\n 16: 'aes-128-ctr',\n 32: 'aes-256-ctr'\n}\n\nmodule.exports = function (key) {\n const mode = CIPHER_MODES[key.length]\n if (!mode) {\n const modes = Object.entries(CIPHER_MODES).map(([k, v]) => `${k} (${v})`).join(' / ')\n throw errcode(new Error(`Invalid key length ${key.length} bytes. Must be ${modes}`), 'ERR_INVALID_KEY_LENGTH')\n }\n return mode\n}\n","'use strict'\n\nrequire('node-forge/lib/aes')\nconst forge = require('node-forge/lib/forge')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\nmodule.exports = {\n createCipheriv: (mode, key, iv) => {\n const cipher2 = forge.cipher.createCipher('AES-CTR', uint8ArrayToString(key, 'ascii'))\n cipher2.start({ iv: uint8ArrayToString(iv, 'ascii') })\n return {\n update: (data) => {\n cipher2.update(forge.util.createBuffer(uint8ArrayToString(data, 'ascii')))\n return uint8ArrayFromString(cipher2.output.getBytes(), 'ascii')\n }\n }\n },\n createDecipheriv: (mode, key, iv) => {\n const cipher2 = forge.cipher.createDecipher('AES-CTR', uint8ArrayToString(key, 'ascii'))\n cipher2.start({ iv: uint8ArrayToString(iv, 'ascii') })\n return {\n update: (data) => {\n cipher2.update(forge.util.createBuffer(uint8ArrayToString(data, 'ascii')))\n return uint8ArrayFromString(cipher2.output.getBytes(), 'ascii')\n }\n }\n }\n}\n","'use strict'\n\nconst ciphers = require('./ciphers')\nconst cipherMode = require('./cipher-mode')\n\nexports.create = async function (key, iv) { // eslint-disable-line require-await\n const mode = cipherMode(key)\n const cipher = ciphers.createCipheriv(mode, key, iv)\n const decipher = ciphers.createDecipheriv(mode, key, iv)\n\n const res = {\n async encrypt (data) { // eslint-disable-line require-await\n return cipher.update(data)\n },\n\n async decrypt (data) { // eslint-disable-line require-await\n return decipher.update(data)\n }\n }\n\n return res\n}\n","'use strict'\n\nconst { concat } = require('uint8arrays/concat')\nconst { fromString } = require('uint8arrays/from-string')\n\nconst webcrypto = require('../webcrypto')\n\n// Based off of code from https://github.com/luke-park/SecureCompatibleEncryptionExamples\n\n/**\n *\n * @param {object} [options]\n * @param {string} [options.algorithm=AES-GCM]\n * @param {number} [options.nonceLength=12]\n * @param {number} [options.keyLength=16]\n * @param {string} [options.digest=sha256]\n * @param {number} [options.saltLength=16]\n * @param {number} [options.iterations=32767]\n * @returns {*}\n */\nfunction create ({\n algorithm = 'AES-GCM',\n nonceLength = 12,\n keyLength = 16,\n digest = 'SHA-256',\n saltLength = 16,\n iterations = 32767\n} = {}) {\n const crypto = webcrypto.get()\n keyLength *= 8 // Browser crypto uses bits instead of bytes\n\n /**\n * Uses the provided password to derive a pbkdf2 key. The key\n * will then be used to encrypt the data.\n *\n * @param {Uint8Array} data - The data to decrypt\n * @param {string} password - A plain password\n * @returns {Promise<Uint8Array>}\n */\n async function encrypt (data, password) { // eslint-disable-line require-await\n const salt = crypto.getRandomValues(new Uint8Array(saltLength))\n const nonce = crypto.getRandomValues(new Uint8Array(nonceLength))\n const aesGcm = { name: algorithm, iv: nonce }\n\n // Derive a key using PBKDF2.\n const deriveParams = { name: 'PBKDF2', salt, iterations, hash: { name: digest } }\n const rawKey = await crypto.subtle.importKey('raw', fromString(password), { name: 'PBKDF2' }, false, ['deriveKey', 'deriveBits'])\n const cryptoKey = await crypto.subtle.deriveKey(deriveParams, rawKey, { name: algorithm, length: keyLength }, true, ['encrypt'])\n\n // Encrypt the string.\n const ciphertext = await crypto.subtle.encrypt(aesGcm, cryptoKey, data)\n return concat([salt, aesGcm.iv, new Uint8Array(ciphertext)])\n }\n\n /**\n * Uses the provided password to derive a pbkdf2 key. The key\n * will then be used to decrypt the data. The options used to create\n * this decryption cipher must be the same as those used to create\n * the encryption cipher.\n *\n * @param {Uint8Array} data - The data to decrypt\n * @param {string} password - A plain password\n * @returns {Promise<Uint8Array>}\n */\n async function decrypt (data, password) {\n const salt = data.slice(0, saltLength)\n const nonce = data.slice(saltLength, saltLength + nonceLength)\n const ciphertext = data.slice(saltLength + nonceLength)\n const aesGcm = { name: algorithm, iv: nonce }\n\n // Derive the key using PBKDF2.\n const deriveParams = { name: 'PBKDF2', salt, iterations, hash: { name: digest } }\n const rawKey = await crypto.subtle.importKey('raw', fromString(password), { name: 'PBKDF2' }, false, ['deriveKey', 'deriveBits'])\n const cryptoKey = await crypto.subtle.deriveKey(deriveParams, rawKey, { name: algorithm, length: keyLength }, true, ['decrypt'])\n\n // Decrypt the string.\n const plaintext = await crypto.subtle.decrypt(aesGcm, cryptoKey, ciphertext)\n return new Uint8Array(plaintext)\n }\n\n return {\n encrypt,\n decrypt\n }\n}\n\nmodule.exports = {\n create\n}\n","'use strict'\n\nconst webcrypto = require('../webcrypto')\nconst lengths = require('./lengths')\n\nconst hashTypes = {\n SHA1: 'SHA-1',\n SHA256: 'SHA-256',\n SHA512: 'SHA-512'\n}\n\nconst sign = async (key, data) => {\n const buf = await webcrypto.get().subtle.sign({ name: 'HMAC' }, key, data)\n return new Uint8Array(buf, buf.byteOffset, buf.byteLength)\n}\n\nexports.create = async function (hashType, secret) {\n const hash = hashTypes[hashType]\n\n const key = await webcrypto.get().subtle.importKey(\n 'raw',\n secret,\n {\n name: 'HMAC',\n hash: { name: hash }\n },\n false,\n ['sign']\n )\n\n return {\n async digest (data) { // eslint-disable-line require-await\n return sign(key, data)\n },\n length: lengths[hashType]\n }\n}\n","'use strict'\n\nmodule.exports = {\n SHA1: 20,\n SHA256: 32,\n SHA512: 64\n}\n","'use strict'\n\nconst hmac = require('./hmac')\nconst aes = require('./aes')\nconst keys = require('./keys')\n\nexports.aes = aes\nexports.hmac = hmac\nexports.keys = keys\nexports.randomBytes = require('./random-bytes')\nexports.pbkdf2 = require('./pbkdf2')\n","'use strict'\n\nconst errcode = require('err-code')\nconst webcrypto = require('../webcrypto')\nconst { base64urlToBuffer } = require('../util')\nconst validateCurveType = require('./validate-curve-type')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\n\nconst bits = {\n 'P-256': 256,\n 'P-384': 384,\n 'P-521': 521\n}\n\nexports.generateEphmeralKeyPair = async function (curve) {\n validateCurveType(Object.keys(bits), curve)\n const pair = await webcrypto.get().subtle.generateKey(\n {\n name: 'ECDH',\n namedCurve: curve\n },\n true,\n ['deriveBits']\n )\n\n // forcePrivate is used for testing only\n const genSharedKey = async (theirPub, forcePrivate) => {\n let privateKey\n\n if (forcePrivate) {\n privateKey = await webcrypto.get().subtle.importKey(\n 'jwk',\n unmarshalPrivateKey(curve, forcePrivate),\n {\n name: 'ECDH',\n namedCurve: curve\n },\n false,\n ['deriveBits']\n )\n } else {\n privateKey = pair.privateKey\n }\n\n const keys = [\n await webcrypto.get().subtle.importKey(\n 'jwk',\n unmarshalPublicKey(curve, theirPub),\n {\n name: 'ECDH',\n namedCurve: curve\n },\n false,\n []\n ),\n privateKey\n ]\n\n const buffer = await webcrypto.get().subtle.deriveBits(\n {\n name: 'ECDH',\n namedCurve: curve,\n public: keys[0]\n },\n keys[1],\n bits[curve]\n )\n\n return new Uint8Array(buffer, buffer.byteOffset, buffer.byteLength)\n }\n\n const publicKey = await webcrypto.get().subtle.exportKey('jwk', pair.publicKey)\n\n return {\n key: marshalPublicKey(publicKey),\n genSharedKey\n }\n}\n\nconst curveLengths = {\n 'P-256': 32,\n 'P-384': 48,\n 'P-521': 66\n}\n\n// Marshal converts a jwk encodec ECDH public key into the\n// form specified in section 4.3.6 of ANSI X9.62. (This is the format\n// go-ipfs uses)\nfunction marshalPublicKey (jwk) {\n const byteLen = curveLengths[jwk.crv]\n\n return uint8ArrayConcat([\n Uint8Array.from([4]), // uncompressed point\n base64urlToBuffer(jwk.x, byteLen),\n base64urlToBuffer(jwk.y, byteLen)\n ], 1 + byteLen * 2)\n}\n\n// Unmarshal converts a point, serialized by Marshal, into an jwk encoded key\nfunction unmarshalPublicKey (curve, key) {\n const byteLen = curveLengths[curve]\n\n if (uint8ArrayEquals(!key.slice(0, 1), Uint8Array.from([4]))) {\n throw errcode(new Error('Cannot unmarshal public key - invalid key format'), 'ERR_INVALID_KEY_FORMAT')\n }\n\n return {\n kty: 'EC',\n crv: curve,\n x: uint8ArrayToString(key.slice(1, byteLen + 1), 'base64url'),\n y: uint8ArrayToString(key.slice(1 + byteLen), 'base64url'),\n ext: true\n }\n}\n\nconst unmarshalPrivateKey = (curve, key) => ({\n ...unmarshalPublicKey(curve, key.public),\n d: uint8ArrayToString(key.private, 'base64url')\n})\n","'use strict'\n\nconst errcode = require('err-code')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\nconst { sha256 } = require('multiformats/hashes/sha2')\nconst { base58btc } = require('multiformats/bases/base58')\nconst { identity } = require('multiformats/hashes/identity')\nconst crypto = require('./ed25519')\nconst pbm = require('./keys')\nconst exporter = require('./exporter')\n\nclass Ed25519PublicKey {\n constructor (key) {\n this._key = ensureKey(key, crypto.publicKeyLength)\n }\n\n async verify (data, sig) { // eslint-disable-line require-await\n return crypto.hashAndVerify(this._key, sig, data)\n }\n\n marshal () {\n return this._key\n }\n\n get bytes () {\n return pbm.PublicKey.encode({\n Type: pbm.KeyType.Ed25519,\n Data: this.marshal()\n }).finish()\n }\n\n equals (key) {\n return uint8ArrayEquals(this.bytes, key.bytes)\n }\n\n async hash () {\n const { bytes } = await sha256.digest(this.bytes)\n\n return bytes\n }\n}\n\nclass Ed25519PrivateKey {\n // key - 64 byte Uint8Array containing private key\n // publicKey - 32 byte Uint8Array containing public key\n constructor (key, publicKey) {\n this._key = ensureKey(key, crypto.privateKeyLength)\n this._publicKey = ensureKey(publicKey, crypto.publicKeyLength)\n }\n\n async sign (message) { // eslint-disable-line require-await\n return crypto.hashAndSign(this._key, message)\n }\n\n get public () {\n return new Ed25519PublicKey(this._publicKey)\n }\n\n marshal () {\n return this._key\n }\n\n get bytes () {\n return pbm.PrivateKey.encode({\n Type: pbm.KeyType.Ed25519,\n Data: this.marshal()\n }).finish()\n }\n\n equals (key) {\n return uint8ArrayEquals(this.bytes, key.bytes)\n }\n\n async hash () {\n const { bytes } = await sha256.digest(this.bytes)\n\n return bytes\n }\n\n /**\n * Gets the ID of the key.\n *\n * The key id is the base58 encoding of the identity multihash containing its public key.\n * The public key is a protobuf encoding containing a type and the DER encoding\n * of the PKCS SubjectPublicKeyInfo.\n *\n * @returns {Promise<string>}\n */\n async id () {\n const encoding = await identity.digest(this.public.bytes)\n return base58btc.encode(encoding.bytes).substring(1)\n }\n\n /**\n * Exports the key into a password protected `format`\n *\n * @param {string} password - The password to encrypt the key\n * @param {string} [format=libp2p-key] - The format in which to export as\n * @returns {Promise<Uint8Array>} The encrypted private key\n */\n async export (password, format = 'libp2p-key') { // eslint-disable-line require-await\n if (format === 'libp2p-key') {\n return exporter.export(this.bytes, password)\n } else {\n throw errcode(new Error(`export format '${format}' is not supported`), 'ERR_INVALID_EXPORT_FORMAT')\n }\n }\n}\n\nfunction unmarshalEd25519PrivateKey (bytes) {\n // Try the old, redundant public key version\n if (bytes.length > crypto.privateKeyLength) {\n bytes = ensureKey(bytes, crypto.privateKeyLength + crypto.publicKeyLength)\n const privateKeyBytes = bytes.slice(0, crypto.privateKeyLength)\n const publicKeyBytes = bytes.slice(crypto.privateKeyLength, bytes.length)\n return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes)\n }\n\n bytes = ensureKey(bytes, crypto.privateKeyLength)\n const privateKeyBytes = bytes.slice(0, crypto.privateKeyLength)\n const publicKeyBytes = bytes.slice(crypto.publicKeyLength)\n return new Ed25519PrivateKey(privateKeyBytes, publicKeyBytes)\n}\n\nfunction unmarshalEd25519PublicKey (bytes) {\n bytes = ensureKey(bytes, crypto.publicKeyLength)\n return new Ed25519PublicKey(bytes)\n}\n\nasync function generateKeyPair () {\n const { privateKey, publicKey } = await crypto.generateKey()\n return new Ed25519PrivateKey(privateKey, publicKey)\n}\n\nasync function generateKeyPairFromSeed (seed) {\n const { privateKey, publicKey } = await crypto.generateKeyFromSeed(seed)\n return new Ed25519PrivateKey(privateKey, publicKey)\n}\n\nfunction ensureKey (key, length) {\n key = Uint8Array.from(key || [])\n if (key.length !== length) {\n throw errcode(new Error(`Key must be a Uint8Array of length ${length}, got ${key.length}`), 'ERR_INVALID_KEY_TYPE')\n }\n return key\n}\n\nmodule.exports = {\n Ed25519PublicKey,\n Ed25519PrivateKey,\n unmarshalEd25519PrivateKey,\n unmarshalEd25519PublicKey,\n generateKeyPair,\n generateKeyPairFromSeed\n}\n","'use strict'\n\nconst ed = require('@noble/ed25519')\n\nconst PUBLIC_KEY_BYTE_LENGTH = 32\nconst PRIVATE_KEY_BYTE_LENGTH = 64 // private key is actually 32 bytes but for historical reasons we concat private and public keys\nconst KEYS_BYTE_LENGTH = 32\n\nexports.publicKeyLength = PUBLIC_KEY_BYTE_LENGTH\nexports.privateKeyLength = PRIVATE_KEY_BYTE_LENGTH\n\nexports.generateKey = async function () {\n // the actual private key (32 bytes)\n const privateKeyRaw = ed.utils.randomPrivateKey()\n const publicKey = await ed.getPublicKey(privateKeyRaw)\n\n // concatenated the public key to the private key\n const privateKey = concatKeys(privateKeyRaw, publicKey)\n\n return {\n privateKey,\n publicKey\n }\n}\n\n/**\n * Generate keypair from a seed\n *\n * @param {Uint8Array} seed - seed should be a 32 byte uint8array\n * @returns\n */\nexports.generateKeyFromSeed = async function (seed) {\n if (seed.length !== KEYS_BYTE_LENGTH) {\n throw new TypeError('\"seed\" must be 32 bytes in length.')\n } else if (!(seed instanceof Uint8Array)) {\n throw new TypeError('\"seed\" must be a node.js Buffer, or Uint8Array.')\n }\n\n // based on node forges algorithm, the seed is used directly as private key\n const privateKeyRaw = seed\n const publicKey = await ed.getPublicKey(privateKeyRaw)\n\n const privateKey = concatKeys(privateKeyRaw, publicKey)\n\n return {\n privateKey,\n publicKey\n }\n}\n\nexports.hashAndSign = function (privateKey, msg) {\n const privateKeyRaw = privateKey.slice(0, KEYS_BYTE_LENGTH)\n\n return ed.sign(msg, privateKeyRaw)\n}\n\nexports.hashAndVerify = function (publicKey, sig, msg) {\n return ed.verify(sig, msg, publicKey)\n}\n\nfunction concatKeys (privateKeyRaw, publicKey) {\n const privateKey = new Uint8Array(exports.privateKeyLength)\n for (let i = 0; i < KEYS_BYTE_LENGTH; i++) {\n privateKey[i] = privateKeyRaw[i]\n privateKey[KEYS_BYTE_LENGTH + i] = publicKey[i]\n }\n return privateKey\n}\n","'use strict'\n\nconst ecdh = require('./ecdh')\n\n// Generates an ephemeral public key and returns a function that will compute\n// the shared secret key.\n//\n// Focuses only on ECDH now, but can be made more general in the future.\nmodule.exports = async (curve) => ecdh.generateEphmeralKeyPair(curve) // eslint-disable-line require-await\n","'use strict'\n\nconst { base64 } = require('multiformats/bases/base64')\nconst ciphers = require('../ciphers/aes-gcm')\n\nmodule.exports = {\n /**\n * Exports the given PrivateKey as a base64 encoded string.\n * The PrivateKey is encrypted via a password derived PBKDF2 key\n * leveraging the aes-gcm cipher algorithm.\n *\n * @param {Uint8Array} privateKey - The PrivateKey protobuf\n * @param {string} password\n * @returns {Promise<string>} A base64 encoded string\n */\n export: async function (privateKey, password) {\n const cipher = ciphers.create()\n const encryptedKey = await cipher.encrypt(privateKey, password)\n return base64.encode(encryptedKey)\n }\n}\n","'use strict'\n\nconst { base64 } = require('multiformats/bases/base64')\nconst ciphers = require('../ciphers/aes-gcm')\n\nmodule.exports = {\n /**\n * Attempts to decrypt a base64 encoded PrivateKey string\n * with the given password. The privateKey must have been exported\n * using the same password and underlying cipher (aes-gcm)\n *\n * @param {string} privateKey - A base64 encoded encrypted key\n * @param {string} password\n * @returns {Promise<Uint8Array>} The private key protobuf\n */\n import: async function (privateKey, password) {\n const encryptedKey = base64.decode(privateKey)\n const cipher = ciphers.create()\n return await cipher.decrypt(encryptedKey, password)\n }\n}\n","'use strict'\n\nconst keysPBM = require('./keys')\nrequire('node-forge/lib/asn1')\nrequire('node-forge/lib/pbe')\nconst forge = require('node-forge/lib/forge')\nconst errcode = require('err-code')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\nconst importer = require('./importer')\n\nconst supportedKeys = {\n rsa: require('./rsa-class'),\n ed25519: require('./ed25519-class'),\n secp256k1: require('./secp256k1-class')(keysPBM, require('../random-bytes'))\n}\n\nconst ErrMissingSecp256K1 = {\n message: 'secp256k1 support requires libp2p-crypto-secp256k1 package',\n code: 'ERR_MISSING_PACKAGE'\n}\n\nfunction typeToKey (type) {\n const key = supportedKeys[type.toLowerCase()]\n if (!key) {\n const supported = Object.keys(supportedKeys).join(' / ')\n throw errcode(new Error(`invalid or unsupported key type ${type}. Must be ${supported}`), 'ERR_UNSUPPORTED_KEY_TYPE')\n }\n return key\n}\n\n// Generates a keypair of the given type and bitsize\nconst generateKeyPair = async (type, bits) => { // eslint-disable-line require-await\n return typeToKey(type).generateKeyPair(bits)\n}\n\n// Generates a keypair of the given type and bitsize\n// seed is a 32 byte uint8array\nconst generateKeyPairFromSeed = async (type, seed, bits) => { // eslint-disable-line require-await\n const key = typeToKey(type)\n if (type.toLowerCase() !== 'ed25519') {\n throw errcode(new Error('Seed key derivation is unimplemented for RSA or secp256k1'), 'ERR_UNSUPPORTED_KEY_DERIVATION_TYPE')\n }\n return key.generateKeyPairFromSeed(seed, bits)\n}\n\n// Converts a protobuf serialized public key into its\n// representative object\nconst unmarshalPublicKey = (buf) => {\n const decoded = keysPBM.PublicKey.decode(buf)\n const data = decoded.Data\n\n switch (decoded.Type) {\n case keysPBM.KeyType.RSA:\n return supportedKeys.rsa.unmarshalRsaPublicKey(data)\n case keysPBM.KeyType.Ed25519:\n return supportedKeys.ed25519.unmarshalEd25519PublicKey(data)\n case keysPBM.KeyType.Secp256k1:\n if (supportedKeys.secp256k1) {\n return supportedKeys.secp256k1.unmarshalSecp256k1PublicKey(data)\n } else {\n throw errcode(new Error(ErrMissingSecp256K1.message), ErrMissingSecp256K1.code)\n }\n default:\n typeToKey(decoded.Type) // throws because type is not supported\n }\n}\n\n// Converts a public key object into a protobuf serialized public key\nconst marshalPublicKey = (key, type) => {\n type = (type || 'rsa').toLowerCase()\n typeToKey(type) // check type\n return key.bytes\n}\n\n// Converts a protobuf serialized private key into its\n// representative object\nconst unmarshalPrivateKey = async (buf) => { // eslint-disable-line require-await\n const decoded = keysPBM.PrivateKey.decode(buf)\n const data = decoded.Data\n\n switch (decoded.Type) {\n case keysPBM.KeyType.RSA:\n return supportedKeys.rsa.unmarshalRsaPrivateKey(data)\n case keysPBM.KeyType.Ed25519:\n return supportedKeys.ed25519.unmarshalEd25519PrivateKey(data)\n case keysPBM.KeyType.Secp256k1:\n if (supportedKeys.secp256k1) {\n return supportedKeys.secp256k1.unmarshalSecp256k1PrivateKey(data)\n } else {\n throw errcode(new Error(ErrMissingSecp256K1.message), ErrMissingSecp256K1.code)\n }\n default:\n typeToKey(decoded.Type) // throws because type is not supported\n }\n}\n\n// Converts a private key object into a protobuf serialized private key\nconst marshalPrivateKey = (key, type) => {\n type = (type || 'rsa').toLowerCase()\n typeToKey(type) // check type\n return key.bytes\n}\n\n/**\n *\n * @param {string} encryptedKey\n * @param {string} password\n */\nconst importKey = async (encryptedKey, password) => { // eslint-disable-line require-await\n try {\n const key = await importer.import(encryptedKey, password)\n return unmarshalPrivateKey(key)\n } catch (_) {\n // Ignore and try the old pem decrypt\n }\n\n // Only rsa supports pem right now\n const key = forge.pki.decryptRsaPrivateKey(encryptedKey, password)\n if (key === null) {\n throw errcode(new Error('Cannot read the key, most likely the password is wrong or not a RSA key'), 'ERR_CANNOT_DECRYPT_PEM')\n }\n let der = forge.asn1.toDer(forge.pki.privateKeyToAsn1(key))\n der = uint8ArrayFromString(der.getBytes(), 'ascii')\n return supportedKeys.rsa.unmarshalRsaPrivateKey(der)\n}\n\nmodule.exports = {\n supportedKeys,\n keysPBM,\n keyStretcher: require('./key-stretcher'),\n generateEphemeralKeyPair: require('./ephemeral-keys'),\n generateKeyPair,\n generateKeyPairFromSeed,\n unmarshalPublicKey,\n marshalPublicKey,\n unmarshalPrivateKey,\n marshalPrivateKey,\n import: importKey\n}\n","'use strict'\n\nrequire('node-forge/lib/rsa')\nconst forge = require('node-forge/lib/forge')\nconst { base64urlToBigInteger } = require('../util')\n\nfunction convert (key, types) {\n return types.map(t => base64urlToBigInteger(key[t]))\n}\n\nfunction jwk2priv (key) {\n return forge.pki.setRsaPrivateKey(...convert(key, ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi']))\n}\n\nfunction jwk2pub (key) {\n return forge.pki.setRsaPublicKey(...convert(key, ['n', 'e']))\n}\n\nmodule.exports = {\n jwk2pub,\n jwk2priv\n}\n","'use strict'\n\nconst errcode = require('err-code')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst hmac = require('../hmac')\n\nconst cipherMap = {\n 'AES-128': {\n ivSize: 16,\n keySize: 16\n },\n 'AES-256': {\n ivSize: 16,\n keySize: 32\n },\n Blowfish: {\n ivSize: 8,\n cipherKeySize: 32\n }\n}\n\n// Generates a set of keys for each party by stretching the shared key.\n// (myIV, theirIV, myCipherKey, theirCipherKey, myMACKey, theirMACKey)\nmodule.exports = async (cipherType, hash, secret) => {\n const cipher = cipherMap[cipherType]\n\n if (!cipher) {\n const allowed = Object.keys(cipherMap).join(' / ')\n throw errcode(new Error(`unknown cipher type '${cipherType}'. Must be ${allowed}`), 'ERR_INVALID_CIPHER_TYPE')\n }\n\n if (!hash) {\n throw errcode(new Error('missing hash type'), 'ERR_MISSING_HASH_TYPE')\n }\n\n const cipherKeySize = cipher.keySize\n const ivSize = cipher.ivSize\n const hmacKeySize = 20\n const seed = uint8ArrayFromString('key expansion')\n const resultLength = 2 * (ivSize + cipherKeySize + hmacKeySize)\n\n const m = await hmac.create(hash, secret)\n let a = await m.digest(seed)\n\n const result = []\n let j = 0\n\n while (j < resultLength) {\n const b = await m.digest(uint8ArrayConcat([a, seed]))\n let todo = b.length\n\n if (j + todo > resultLength) {\n todo = resultLength - j\n }\n\n result.push(b)\n j += todo\n a = await m.digest(a)\n }\n\n const half = resultLength / 2\n const resultBuffer = uint8ArrayConcat(result)\n const r1 = resultBuffer.slice(0, half)\n const r2 = resultBuffer.slice(half, resultLength)\n\n const createKey = (res) => ({\n iv: res.slice(0, ivSize),\n cipherKey: res.slice(ivSize, ivSize + cipherKeySize),\n macKey: res.slice(ivSize + cipherKeySize)\n })\n\n return {\n k1: createKey(r1),\n k2: createKey(r2)\n }\n}\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-crypto-keys\"] || ($protobuf.roots[\"libp2p-crypto-keys\"] = {});\n\n/**\n * KeyType enum.\n * @exports KeyType\n * @enum {number}\n * @property {number} RSA=0 RSA value\n * @property {number} Ed25519=1 Ed25519 value\n * @property {number} Secp256k1=2 Secp256k1 value\n */\n$root.KeyType = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"RSA\"] = 0;\n values[valuesById[1] = \"Ed25519\"] = 1;\n values[valuesById[2] = \"Secp256k1\"] = 2;\n return values;\n})();\n\n$root.PublicKey = (function() {\n\n /**\n * Properties of a PublicKey.\n * @exports IPublicKey\n * @interface IPublicKey\n * @property {KeyType} Type PublicKey Type\n * @property {Uint8Array} Data PublicKey Data\n */\n\n /**\n * Constructs a new PublicKey.\n * @exports PublicKey\n * @classdesc Represents a PublicKey.\n * @implements IPublicKey\n * @constructor\n * @param {IPublicKey=} [p] Properties to set\n */\n function PublicKey(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * PublicKey Type.\n * @member {KeyType} Type\n * @memberof PublicKey\n * @instance\n */\n PublicKey.prototype.Type = 0;\n\n /**\n * PublicKey Data.\n * @member {Uint8Array} Data\n * @memberof PublicKey\n * @instance\n */\n PublicKey.prototype.Data = $util.newBuffer([]);\n\n /**\n * Encodes the specified PublicKey message. Does not implicitly {@link PublicKey.verify|verify} messages.\n * @function encode\n * @memberof PublicKey\n * @static\n * @param {IPublicKey} m PublicKey message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PublicKey.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(8).int32(m.Type);\n w.uint32(18).bytes(m.Data);\n return w;\n };\n\n /**\n * Decodes a PublicKey message from the specified reader or buffer.\n * @function decode\n * @memberof PublicKey\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PublicKey} PublicKey\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PublicKey.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PublicKey();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.Type = r.int32();\n break;\n case 2:\n m.Data = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"Type\"))\n throw $util.ProtocolError(\"missing required 'Type'\", { instance: m });\n if (!m.hasOwnProperty(\"Data\"))\n throw $util.ProtocolError(\"missing required 'Data'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a PublicKey message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PublicKey\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {PublicKey} PublicKey\n */\n PublicKey.fromObject = function fromObject(d) {\n if (d instanceof $root.PublicKey)\n return d;\n var m = new $root.PublicKey();\n switch (d.Type) {\n case \"RSA\":\n case 0:\n m.Type = 0;\n break;\n case \"Ed25519\":\n case 1:\n m.Type = 1;\n break;\n case \"Secp256k1\":\n case 2:\n m.Type = 2;\n break;\n }\n if (d.Data != null) {\n if (typeof d.Data === \"string\")\n $util.base64.decode(d.Data, m.Data = $util.newBuffer($util.base64.length(d.Data)), 0);\n else if (d.Data.length)\n m.Data = d.Data;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a PublicKey message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PublicKey\n * @static\n * @param {PublicKey} m PublicKey\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n PublicKey.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.Type = o.enums === String ? \"RSA\" : 0;\n if (o.bytes === String)\n d.Data = \"\";\n else {\n d.Data = [];\n if (o.bytes !== Array)\n d.Data = $util.newBuffer(d.Data);\n }\n }\n if (m.Type != null && m.hasOwnProperty(\"Type\")) {\n d.Type = o.enums === String ? $root.KeyType[m.Type] : m.Type;\n }\n if (m.Data != null && m.hasOwnProperty(\"Data\")) {\n d.Data = o.bytes === String ? $util.base64.encode(m.Data, 0, m.Data.length) : o.bytes === Array ? Array.prototype.slice.call(m.Data) : m.Data;\n }\n return d;\n };\n\n /**\n * Converts this PublicKey to JSON.\n * @function toJSON\n * @memberof PublicKey\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n PublicKey.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return PublicKey;\n})();\n\n$root.PrivateKey = (function() {\n\n /**\n * Properties of a PrivateKey.\n * @exports IPrivateKey\n * @interface IPrivateKey\n * @property {KeyType} Type PrivateKey Type\n * @property {Uint8Array} Data PrivateKey Data\n */\n\n /**\n * Constructs a new PrivateKey.\n * @exports PrivateKey\n * @classdesc Represents a PrivateKey.\n * @implements IPrivateKey\n * @constructor\n * @param {IPrivateKey=} [p] Properties to set\n */\n function PrivateKey(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * PrivateKey Type.\n * @member {KeyType} Type\n * @memberof PrivateKey\n * @instance\n */\n PrivateKey.prototype.Type = 0;\n\n /**\n * PrivateKey Data.\n * @member {Uint8Array} Data\n * @memberof PrivateKey\n * @instance\n */\n PrivateKey.prototype.Data = $util.newBuffer([]);\n\n /**\n * Encodes the specified PrivateKey message. Does not implicitly {@link PrivateKey.verify|verify} messages.\n * @function encode\n * @memberof PrivateKey\n * @static\n * @param {IPrivateKey} m PrivateKey message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PrivateKey.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(8).int32(m.Type);\n w.uint32(18).bytes(m.Data);\n return w;\n };\n\n /**\n * Decodes a PrivateKey message from the specified reader or buffer.\n * @function decode\n * @memberof PrivateKey\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PrivateKey} PrivateKey\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PrivateKey.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PrivateKey();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.Type = r.int32();\n break;\n case 2:\n m.Data = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"Type\"))\n throw $util.ProtocolError(\"missing required 'Type'\", { instance: m });\n if (!m.hasOwnProperty(\"Data\"))\n throw $util.ProtocolError(\"missing required 'Data'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a PrivateKey message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PrivateKey\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {PrivateKey} PrivateKey\n */\n PrivateKey.fromObject = function fromObject(d) {\n if (d instanceof $root.PrivateKey)\n return d;\n var m = new $root.PrivateKey();\n switch (d.Type) {\n case \"RSA\":\n case 0:\n m.Type = 0;\n break;\n case \"Ed25519\":\n case 1:\n m.Type = 1;\n break;\n case \"Secp256k1\":\n case 2:\n m.Type = 2;\n break;\n }\n if (d.Data != null) {\n if (typeof d.Data === \"string\")\n $util.base64.decode(d.Data, m.Data = $util.newBuffer($util.base64.length(d.Data)), 0);\n else if (d.Data.length)\n m.Data = d.Data;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a PrivateKey message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PrivateKey\n * @static\n * @param {PrivateKey} m PrivateKey\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n PrivateKey.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.Type = o.enums === String ? \"RSA\" : 0;\n if (o.bytes === String)\n d.Data = \"\";\n else {\n d.Data = [];\n if (o.bytes !== Array)\n d.Data = $util.newBuffer(d.Data);\n }\n }\n if (m.Type != null && m.hasOwnProperty(\"Type\")) {\n d.Type = o.enums === String ? $root.KeyType[m.Type] : m.Type;\n }\n if (m.Data != null && m.hasOwnProperty(\"Data\")) {\n d.Data = o.bytes === String ? $util.base64.encode(m.Data, 0, m.Data.length) : o.bytes === Array ? Array.prototype.slice.call(m.Data) : m.Data;\n }\n return d;\n };\n\n /**\n * Converts this PrivateKey to JSON.\n * @function toJSON\n * @memberof PrivateKey\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n PrivateKey.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return PrivateKey;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst webcrypto = require('../webcrypto')\nconst randomBytes = require('../random-bytes')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\nexports.utils = require('./rsa-utils')\n\nexports.generateKey = async function (bits) {\n const pair = await webcrypto.get().subtle.generateKey(\n {\n name: 'RSASSA-PKCS1-v1_5',\n modulusLength: bits,\n publicExponent: new Uint8Array([0x01, 0x00, 0x01]),\n hash: { name: 'SHA-256' }\n },\n true,\n ['sign', 'verify']\n )\n\n const keys = await exportKey(pair)\n\n return {\n privateKey: keys[0],\n publicKey: keys[1]\n }\n}\n\n// Takes a jwk key\nexports.unmarshalPrivateKey = async function (key) {\n const privateKey = await webcrypto.get().subtle.importKey(\n 'jwk',\n key,\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: 'SHA-256' }\n },\n true,\n ['sign']\n )\n\n const pair = [\n privateKey,\n await derivePublicFromPrivate(key)\n ]\n\n const keys = await exportKey({\n privateKey: pair[0],\n publicKey: pair[1]\n })\n\n return {\n privateKey: keys[0],\n publicKey: keys[1]\n }\n}\n\nexports.getRandomValues = randomBytes\n\nexports.hashAndSign = async function (key, msg) {\n const privateKey = await webcrypto.get().subtle.importKey(\n 'jwk',\n key,\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: 'SHA-256' }\n },\n false,\n ['sign']\n )\n\n const sig = await webcrypto.get().subtle.sign(\n { name: 'RSASSA-PKCS1-v1_5' },\n privateKey,\n Uint8Array.from(msg)\n )\n\n return new Uint8Array(sig, sig.byteOffset, sig.byteLength)\n}\n\nexports.hashAndVerify = async function (key, sig, msg) {\n const publicKey = await webcrypto.get().subtle.importKey(\n 'jwk',\n key,\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: 'SHA-256' }\n },\n false,\n ['verify']\n )\n\n return webcrypto.get().subtle.verify(\n { name: 'RSASSA-PKCS1-v1_5' },\n publicKey,\n sig,\n msg\n )\n}\n\nfunction exportKey (pair) {\n return Promise.all([\n webcrypto.get().subtle.exportKey('jwk', pair.privateKey),\n webcrypto.get().subtle.exportKey('jwk', pair.publicKey)\n ])\n}\n\nfunction derivePublicFromPrivate (jwKey) {\n return webcrypto.get().subtle.importKey(\n 'jwk',\n {\n kty: jwKey.kty,\n n: jwKey.n,\n e: jwKey.e\n },\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: 'SHA-256' }\n },\n true,\n ['verify']\n )\n}\n\n/*\n\nRSA encryption/decryption for the browser with webcrypto workarround\n\"bloody dark magic. webcrypto's why.\"\n\nExplanation:\n - Convert JWK to nodeForge\n - Convert msg Uint8Array to nodeForge buffer: ByteBuffer is a \"binary-string backed buffer\", so let's make our Uint8Array a binary string\n - Convert resulting nodeForge buffer to Uint8Array: it returns a binary string, turn that into a Uint8Array\n\n*/\n\nconst { jwk2pub, jwk2priv } = require('./jwk2pem')\n\nfunction convertKey (key, pub, msg, handle) {\n const fkey = pub ? jwk2pub(key) : jwk2priv(key)\n const fmsg = uint8ArrayToString(Uint8Array.from(msg), 'ascii')\n const fomsg = handle(fmsg, fkey)\n return uint8ArrayFromString(fomsg, 'ascii')\n}\n\nexports.encrypt = function (key, msg) {\n return convertKey(key, true, msg, (msg, key) => key.encrypt(msg))\n}\n\nexports.decrypt = function (key, msg) {\n return convertKey(key, false, msg, (msg, key) => key.decrypt(msg))\n}\n","'use strict'\n\nconst { sha256 } = require('multiformats/hashes/sha2')\nconst errcode = require('err-code')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\n\nrequire('node-forge/lib/sha512')\nconst forge = require('node-forge/lib/forge')\n\nconst crypto = require('./rsa')\nconst pbm = require('./keys')\nconst exporter = require('./exporter')\n\nclass RsaPublicKey {\n constructor (key) {\n this._key = key\n }\n\n async verify (data, sig) { // eslint-disable-line require-await\n return crypto.hashAndVerify(this._key, sig, data)\n }\n\n marshal () {\n return crypto.utils.jwkToPkix(this._key)\n }\n\n get bytes () {\n return pbm.PublicKey.encode({\n Type: pbm.KeyType.RSA,\n Data: this.marshal()\n }).finish()\n }\n\n encrypt (bytes) {\n return crypto.encrypt(this._key, bytes)\n }\n\n equals (key) {\n return uint8ArrayEquals(this.bytes, key.bytes)\n }\n\n async hash () {\n const { bytes } = await sha256.digest(this.bytes)\n\n return bytes\n }\n}\n\nclass RsaPrivateKey {\n // key - Object of the jwk format\n // publicKey - Uint8Array of the spki format\n constructor (key, publicKey) {\n this._key = key\n this._publicKey = publicKey\n }\n\n genSecret () {\n return crypto.getRandomValues(16)\n }\n\n async sign (message) { // eslint-disable-line require-await\n return crypto.hashAndSign(this._key, message)\n }\n\n get public () {\n if (!this._publicKey) {\n throw errcode(new Error('public key not provided'), 'ERR_PUBKEY_NOT_PROVIDED')\n }\n\n return new RsaPublicKey(this._publicKey)\n }\n\n decrypt (bytes) {\n return crypto.decrypt(this._key, bytes)\n }\n\n marshal () {\n return crypto.utils.jwkToPkcs1(this._key)\n }\n\n get bytes () {\n return pbm.PrivateKey.encode({\n Type: pbm.KeyType.RSA,\n Data: this.marshal()\n }).finish()\n }\n\n equals (key) {\n return uint8ArrayEquals(this.bytes, key.bytes)\n }\n\n async hash () {\n const { bytes } = await sha256.digest(this.bytes)\n\n return bytes\n }\n\n /**\n * Gets the ID of the key.\n *\n * The key id is the base58 encoding of the SHA-256 multihash of its public key.\n * The public key is a protobuf encoding containing a type and the DER encoding\n * of the PKCS SubjectPublicKeyInfo.\n *\n * @returns {Promise<string>}\n */\n async id () {\n const hash = await this.public.hash()\n return uint8ArrayToString(hash, 'base58btc')\n }\n\n /**\n * Exports the key into a password protected PEM format\n *\n * @param {string} password - The password to read the encrypted PEM\n * @param {string} [format=pkcs-8] - The format in which to export as\n */\n async export (password, format = 'pkcs-8') { // eslint-disable-line require-await\n if (format === 'pkcs-8') {\n const buffer = new forge.util.ByteBuffer(this.marshal())\n const asn1 = forge.asn1.fromDer(buffer)\n const privateKey = forge.pki.privateKeyFromAsn1(asn1)\n\n const options = {\n algorithm: 'aes256',\n count: 10000,\n saltSize: 128 / 8,\n prfAlgorithm: 'sha512'\n }\n return forge.pki.encryptRsaPrivateKey(privateKey, password, options)\n } else if (format === 'libp2p-key') {\n return exporter.export(this.bytes, password)\n } else {\n throw errcode(new Error(`export format '${format}' is not supported`), 'ERR_INVALID_EXPORT_FORMAT')\n }\n }\n}\n\nasync function unmarshalRsaPrivateKey (bytes) {\n const jwk = crypto.utils.pkcs1ToJwk(bytes)\n const keys = await crypto.unmarshalPrivateKey(jwk)\n return new RsaPrivateKey(keys.privateKey, keys.publicKey)\n}\n\nfunction unmarshalRsaPublicKey (bytes) {\n const jwk = crypto.utils.pkixToJwk(bytes)\n return new RsaPublicKey(jwk)\n}\n\nasync function fromJwk (jwk) {\n const keys = await crypto.unmarshalPrivateKey(jwk)\n return new RsaPrivateKey(keys.privateKey, keys.publicKey)\n}\n\nasync function generateKeyPair (bits) {\n const keys = await crypto.generateKey(bits)\n return new RsaPrivateKey(keys.privateKey, keys.publicKey)\n}\n\nmodule.exports = {\n RsaPublicKey,\n RsaPrivateKey,\n unmarshalRsaPublicKey,\n unmarshalRsaPrivateKey,\n generateKeyPair,\n fromJwk\n}\n","'use strict'\n\nrequire('node-forge/lib/asn1')\nrequire('node-forge/lib/rsa')\nconst forge = require('node-forge/lib/forge')\nconst { bigIntegerToUintBase64url, base64urlToBigInteger } = require('./../util')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\n\n// Convert a PKCS#1 in ASN1 DER format to a JWK key\nexports.pkcs1ToJwk = function (bytes) {\n const asn1 = forge.asn1.fromDer(uint8ArrayToString(bytes, 'ascii'))\n const privateKey = forge.pki.privateKeyFromAsn1(asn1)\n\n // https://tools.ietf.org/html/rfc7518#section-6.3.1\n return {\n kty: 'RSA',\n n: bigIntegerToUintBase64url(privateKey.n),\n e: bigIntegerToUintBase64url(privateKey.e),\n d: bigIntegerToUintBase64url(privateKey.d),\n p: bigIntegerToUintBase64url(privateKey.p),\n q: bigIntegerToUintBase64url(privateKey.q),\n dp: bigIntegerToUintBase64url(privateKey.dP),\n dq: bigIntegerToUintBase64url(privateKey.dQ),\n qi: bigIntegerToUintBase64url(privateKey.qInv),\n alg: 'RS256',\n kid: '2011-04-29'\n }\n}\n\n// Convert a JWK key into PKCS#1 in ASN1 DER format\nexports.jwkToPkcs1 = function (jwk) {\n const asn1 = forge.pki.privateKeyToAsn1({\n n: base64urlToBigInteger(jwk.n),\n e: base64urlToBigInteger(jwk.e),\n d: base64urlToBigInteger(jwk.d),\n p: base64urlToBigInteger(jwk.p),\n q: base64urlToBigInteger(jwk.q),\n dP: base64urlToBigInteger(jwk.dp),\n dQ: base64urlToBigInteger(jwk.dq),\n qInv: base64urlToBigInteger(jwk.qi)\n })\n\n return uint8ArrayFromString(forge.asn1.toDer(asn1).getBytes(), 'ascii')\n}\n\n// Convert a PKCIX in ASN1 DER format to a JWK key\nexports.pkixToJwk = function (bytes) {\n const asn1 = forge.asn1.fromDer(uint8ArrayToString(bytes, 'ascii'))\n const publicKey = forge.pki.publicKeyFromAsn1(asn1)\n\n return {\n kty: 'RSA',\n n: bigIntegerToUintBase64url(publicKey.n),\n e: bigIntegerToUintBase64url(publicKey.e),\n alg: 'RS256',\n kid: '2011-04-29'\n }\n}\n\n// Convert a JWK key to PKCIX in ASN1 DER format\nexports.jwkToPkix = function (jwk) {\n const asn1 = forge.pki.publicKeyToAsn1({\n n: base64urlToBigInteger(jwk.n),\n e: base64urlToBigInteger(jwk.e)\n })\n\n return uint8ArrayFromString(forge.asn1.toDer(asn1).getBytes(), 'ascii')\n}\n","'use strict'\n\nconst { sha256 } = require('multiformats/hashes/sha2')\nconst errcode = require('err-code')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\n\nconst exporter = require('./exporter')\n\nmodule.exports = (keysProtobuf, randomBytes, crypto) => {\n crypto = crypto || require('./secp256k1')()\n\n class Secp256k1PublicKey {\n constructor (key) {\n crypto.validatePublicKey(key)\n this._key = key\n }\n\n verify (data, sig) {\n return crypto.hashAndVerify(this._key, sig, data)\n }\n\n marshal () {\n return crypto.compressPublicKey(this._key)\n }\n\n get bytes () {\n return keysProtobuf.PublicKey.encode({\n Type: keysProtobuf.KeyType.Secp256k1,\n Data: this.marshal()\n }).finish()\n }\n\n equals (key) {\n return uint8ArrayEquals(this.bytes, key.bytes)\n }\n\n async hash () {\n const { bytes } = await sha256.digest(this.bytes)\n\n return bytes\n }\n }\n\n class Secp256k1PrivateKey {\n constructor (key, publicKey) {\n this._key = key\n this._publicKey = publicKey || crypto.computePublicKey(key)\n crypto.validatePrivateKey(this._key)\n crypto.validatePublicKey(this._publicKey)\n }\n\n sign (message) {\n return crypto.hashAndSign(this._key, message)\n }\n\n get public () {\n return new Secp256k1PublicKey(this._publicKey)\n }\n\n marshal () {\n return this._key\n }\n\n get bytes () {\n return keysProtobuf.PrivateKey.encode({\n Type: keysProtobuf.KeyType.Secp256k1,\n Data: this.marshal()\n }).finish()\n }\n\n equals (key) {\n return uint8ArrayEquals(this.bytes, key.bytes)\n }\n\n async hash () {\n const { bytes } = await sha256.digest(this.bytes)\n\n return bytes\n }\n\n /**\n * Gets the ID of the key.\n *\n * The key id is the base58 encoding of the SHA-256 multihash of its public key.\n * The public key is a protobuf encoding containing a type and the DER encoding\n * of the PKCS SubjectPublicKeyInfo.\n *\n * @returns {Promise<string>}\n */\n async id () {\n const hash = await this.public.hash()\n return uint8ArrayToString(hash, 'base58btc')\n }\n\n /**\n * Exports the key into a password protected `format`\n *\n * @param {string} password - The password to encrypt the key\n * @param {string} [format=libp2p-key] - The format in which to export as\n * @returns {Promise<string>} The encrypted private key\n */\n async export (password, format = 'libp2p-key') { // eslint-disable-line require-await\n if (format === 'libp2p-key') {\n return exporter.export(this.bytes, password)\n } else {\n throw errcode(new Error(`export format '${format}' is not supported`), 'ERR_INVALID_EXPORT_FORMAT')\n }\n }\n }\n\n function unmarshalSecp256k1PrivateKey (bytes) {\n return new Secp256k1PrivateKey(bytes)\n }\n\n function unmarshalSecp256k1PublicKey (bytes) {\n return new Secp256k1PublicKey(bytes)\n }\n\n async function generateKeyPair () {\n const privateKeyBytes = await crypto.generateKey()\n return new Secp256k1PrivateKey(privateKeyBytes)\n }\n\n return {\n Secp256k1PublicKey,\n Secp256k1PrivateKey,\n unmarshalSecp256k1PrivateKey,\n unmarshalSecp256k1PublicKey,\n generateKeyPair\n }\n}\n","'use strict'\n\nconst errcode = require('err-code')\nconst secp = require('@noble/secp256k1')\nconst { sha256 } = require('multiformats/hashes/sha2')\n\nmodule.exports = () => {\n const privateKeyLength = 32\n\n function generateKey () {\n return secp.utils.randomPrivateKey()\n }\n\n /**\n * Hash and sign message with private key\n *\n * @param {number | bigint | (string | Uint8Array)} key\n * @param {Uint8Array} msg\n */\n async function hashAndSign (key, msg) {\n const { digest } = await sha256.digest(msg)\n try {\n return await secp.sign(digest, key)\n } catch (err) {\n throw errcode(err, 'ERR_INVALID_INPUT')\n }\n }\n\n /**\n * Hash message and verify signature with public key\n *\n * @param {secp.Point | (string | Uint8Array)} key\n * @param {(string | Uint8Array) | secp.Signature} sig\n * @param {Uint8Array} msg\n */\n async function hashAndVerify (key, sig, msg) {\n try {\n const { digest } = await sha256.digest(msg)\n return secp.verify(sig, digest, key)\n } catch (err) {\n throw errcode(err, 'ERR_INVALID_INPUT')\n }\n }\n\n function compressPublicKey (key) {\n const point = secp.Point.fromHex(key).toRawBytes(true)\n return point\n }\n\n function decompressPublicKey (key) {\n const point = secp.Point.fromHex(key).toRawBytes(false)\n return point\n }\n\n function validatePrivateKey (key) {\n try {\n secp.getPublicKey(key, true)\n } catch (err) {\n throw errcode(err, 'ERR_INVALID_PRIVATE_KEY')\n }\n }\n\n function validatePublicKey (key) {\n try {\n secp.Point.fromHex(key)\n } catch (err) {\n throw errcode(err, 'ERR_INVALID_PUBLIC_KEY')\n }\n }\n\n function computePublicKey (privateKey) {\n try {\n return secp.getPublicKey(privateKey, true)\n } catch (err) {\n throw errcode(err, 'ERR_INVALID_PRIVATE_KEY')\n }\n }\n\n return {\n generateKey,\n privateKeyLength,\n hashAndSign,\n hashAndVerify,\n compressPublicKey,\n decompressPublicKey,\n validatePrivateKey,\n validatePublicKey,\n computePublicKey\n }\n}\n","'use strict'\n\nconst errcode = require('err-code')\n\nmodule.exports = function (curveTypes, type) {\n if (!curveTypes.includes(type)) {\n const names = curveTypes.join(' / ')\n throw errcode(new Error(`Unknown curve: ${type}. Must be ${names}`), 'ERR_INVALID_CURVE')\n }\n}\n","'use strict'\n\nconst forgePbkdf2 = require('node-forge/lib/pbkdf2')\nconst forgeUtil = require('node-forge/lib/util')\nconst errcode = require('err-code')\n\n/**\n * Maps an IPFS hash name to its node-forge equivalent.\n *\n * See https://github.com/multiformats/multihash/blob/master/hashtable.csv\n *\n * @private\n */\nconst hashName = {\n sha1: 'sha1',\n 'sha2-256': 'sha256',\n 'sha2-512': 'sha512'\n}\n\n/**\n * Computes the Password-Based Key Derivation Function 2.\n *\n * @param {string} password\n * @param {string} salt\n * @param {number} iterations\n * @param {number} keySize - (in bytes)\n * @param {string} hash - The hash name ('sha1', 'sha2-512, ...)\n * @returns {string} - A new password\n */\nfunction pbkdf2 (password, salt, iterations, keySize, hash) {\n const hasher = hashName[hash]\n if (!hasher) {\n const types = Object.keys(hashName).join(' / ')\n throw errcode(new Error(`Hash '${hash}' is unknown or not supported. Must be ${types}`), 'ERR_UNSUPPORTED_HASH_TYPE')\n }\n const dek = forgePbkdf2(\n password,\n salt,\n iterations,\n keySize,\n hasher)\n return forgeUtil.encode64(dek)\n}\n\nmodule.exports = pbkdf2\n","'use strict'\nconst randomBytes = require('iso-random-stream/src/random')\nconst errcode = require('err-code')\n\nmodule.exports = function (length) {\n if (isNaN(length) || length <= 0) {\n throw errcode(new Error('random bytes length must be a Number bigger than 0'), 'ERR_INVALID_LENGTH')\n }\n return randomBytes(length)\n}\n","'use strict'\n\nrequire('node-forge/lib/util')\nrequire('node-forge/lib/jsbn')\nconst forge = require('node-forge/lib/forge')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nexports.bigIntegerToUintBase64url = (num, len) => {\n // Call `.abs()` to convert to unsigned\n let buf = Uint8Array.from(num.abs().toByteArray()) // toByteArray converts to big endian\n\n // toByteArray() gives us back a signed array, which will include a leading 0\n // byte if the most significant bit of the number is 1:\n // https://docs.microsoft.com/en-us/windows/win32/seccertenroll/about-integer\n // Our number will always be positive so we should remove the leading padding.\n buf = buf[0] === 0 ? buf.slice(1) : buf\n\n if (len != null) {\n if (buf.length > len) throw new Error('byte array longer than desired length')\n buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf])\n }\n\n return uint8ArrayToString(buf, 'base64url')\n}\n\n// Convert a base64url encoded string to a BigInteger\nexports.base64urlToBigInteger = str => {\n const buf = exports.base64urlToBuffer(str)\n return new forge.jsbn.BigInteger(uint8ArrayToString(buf, 'base16'), 16)\n}\n\nexports.base64urlToBuffer = (str, len) => {\n let buf = uint8ArrayFromString(str, 'base64urlpad')\n\n if (len != null) {\n if (buf.length > len) throw new Error('byte array longer than desired length')\n buf = uint8ArrayConcat([new Uint8Array(len - buf.length), buf])\n }\n\n return buf\n}\n","/* eslint-env browser */\n\n'use strict'\n\n// Check native crypto exists and is enabled (In insecure context `self.crypto`\n// exists but `self.crypto.subtle` does not).\nexports.get = (win = globalThis) => {\n const nativeCrypto = win.crypto\n\n if (!nativeCrypto || !nativeCrypto.subtle) {\n throw Object.assign(\n new Error(\n 'Missing Web Crypto API. ' +\n 'The most likely cause of this error is that this page is being accessed ' +\n 'from an insecure context (i.e. not HTTPS). For more information and ' +\n 'possible resolutions see ' +\n 'https://github.com/libp2p/js-libp2p-crypto/blob/master/README.md#web-crypto-api'\n ),\n { code: 'ERR_MISSING_WEB_CRYPTO' }\n )\n }\n\n return nativeCrypto\n}\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ACCEPT_FROM_WHITELIST_DURATION_MS = exports.ACCEPT_FROM_WHITELIST_MAX_MESSAGES = exports.ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE = exports.ERR_TOPIC_VALIDATOR_IGNORE = exports.ERR_TOPIC_VALIDATOR_REJECT = exports.TimeCacheDuration = exports.GossipsubSeenTTL = exports.GossipsubIWantFollowupTime = exports.GossipsubMaxIHaveMessages = exports.GossipsubMaxIHaveLength = exports.GossipsubGraftFloodThreshold = exports.GossipsubOpportunisticGraftPeers = exports.GossipsubOpportunisticGraftTicks = exports.GossipsubDirectConnectInitialDelay = exports.GossipsubDirectConnectTicks = exports.GossipsubConnectionTimeout = exports.GossipsubMaxPendingConnections = exports.GossipsubConnectors = exports.GossipsubPruneBackoffTicks = exports.GossipsubPruneBackoff = exports.GossipsubPrunePeers = exports.GossipsubFanoutTTL = exports.GossipsubHeartbeatInterval = exports.GossipsubHeartbeatInitialDelay = exports.GossipsubGossipRetransmission = exports.GossipsubGossipFactor = exports.GossipsubDlazy = exports.GossipsubHistoryGossip = exports.GossipsubHistoryLength = exports.GossipsubDout = exports.GossipsubDscore = exports.GossipsubDhi = exports.GossipsubDlo = exports.GossipsubD = exports.GossipsubIDv11 = exports.GossipsubIDv10 = exports.FloodsubID = exports.minute = exports.second = void 0;\nexports.second = 1000;\nexports.minute = 60 * exports.second;\n// Protocol identifiers\nexports.FloodsubID = '/floodsub/1.0.0';\n/**\n * The protocol ID for version 1.0.0 of the Gossipsub protocol\n * It is advertised along with GossipsubIDv11 for backwards compatability\n */\nexports.GossipsubIDv10 = '/meshsub/1.0.0';\n/**\n * The protocol ID for version 1.1.0 of the Gossipsub protocol\n * See the spec for details about how v1.1.0 compares to v1.0.0:\n * https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md\n */\nexports.GossipsubIDv11 = '/meshsub/1.1.0';\n// Overlay parameters\n/**\n * GossipsubD sets the optimal degree for a Gossipsub topic mesh. For example, if GossipsubD == 6,\n * each peer will want to have about six peers in their mesh for each topic they're subscribed to.\n * GossipsubD should be set somewhere between GossipsubDlo and GossipsubDhi.\n */\nexports.GossipsubD = 6;\n/**\n * GossipsubDlo sets the lower bound on the number of peers we keep in a Gossipsub topic mesh.\n * If we have fewer than GossipsubDlo peers, we will attempt to graft some more into the mesh at\n * the next heartbeat.\n */\nexports.GossipsubDlo = 4;\n/**\n * GossipsubDhi sets the upper bound on the number of peers we keep in a Gossipsub topic mesh.\n * If we have more than GossipsubDhi peers, we will select some to prune from the mesh at the next heartbeat.\n */\nexports.GossipsubDhi = 12;\n/**\n * GossipsubDscore affects how peers are selected when pruning a mesh due to over subscription.\n * At least GossipsubDscore of the retained peers will be high-scoring, while the remainder are\n * chosen randomly.\n */\nexports.GossipsubDscore = 4;\n/**\n * GossipsubDout sets the quota for the number of outbound connections to maintain in a topic mesh.\n * When the mesh is pruned due to over subscription, we make sure that we have outbound connections\n * to at least GossipsubDout of the survivor peers. This prevents sybil attackers from overwhelming\n * our mesh with incoming connections.\n *\n * GossipsubDout must be set below GossipsubDlo, and must not exceed GossipsubD / 2.\n */\nexports.GossipsubDout = 2;\n// Gossip parameters\n/**\n * GossipsubHistoryLength controls the size of the message cache used for gossip.\n * The message cache will remember messages for GossipsubHistoryLength heartbeats.\n */\nexports.GossipsubHistoryLength = 5;\n/**\n * GossipsubHistoryGossip controls how many cached message ids we will advertise in\n * IHAVE gossip messages. When asked for our seen message IDs, we will return\n * only those from the most recent GossipsubHistoryGossip heartbeats. The slack between\n * GossipsubHistoryGossip and GossipsubHistoryLength allows us to avoid advertising messages\n * that will be expired by the time they're requested.\n *\n * GossipsubHistoryGossip must be less than or equal to GossipsubHistoryLength to\n * avoid a runtime panic.\n */\nexports.GossipsubHistoryGossip = 3;\n/**\n * GossipsubDlazy affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to at least GossipsubDlazy peers outside our mesh. The actual\n * number may be more, depending on GossipsubGossipFactor and how many peers we're\n * connected to.\n */\nexports.GossipsubDlazy = 6;\n/**\n * GossipsubGossipFactor affects how many peers we will emit gossip to at each heartbeat.\n * We will send gossip to GossipsubGossipFactor * (total number of non-mesh peers), or\n * GossipsubDlazy, whichever is greater.\n */\nexports.GossipsubGossipFactor = 0.25;\n/**\n * GossipsubGossipRetransmission controls how many times we will allow a peer to request\n * the same message id through IWANT gossip before we start ignoring them. This is designed\n * to prevent peers from spamming us with requests and wasting our resources.\n */\nexports.GossipsubGossipRetransmission = 3;\n// Heartbeat interval\n/**\n * GossipsubHeartbeatInitialDelay is the short delay before the heartbeat timer begins\n * after the router is initialized.\n */\nexports.GossipsubHeartbeatInitialDelay = 100;\n/**\n * GossipsubHeartbeatInterval controls the time between heartbeats.\n */\nexports.GossipsubHeartbeatInterval = exports.second;\n/**\n * GossipsubFanoutTTL controls how long we keep track of the fanout state. If it's been\n * GossipsubFanoutTTL since we've published to a topic that we're not subscribed to,\n * we'll delete the fanout map for that topic.\n */\nexports.GossipsubFanoutTTL = exports.minute;\n/**\n * GossipsubPrunePeers controls the number of peers to include in prune Peer eXchange.\n * When we prune a peer that's eligible for PX (has a good score, etc), we will try to\n * send them signed peer records for up to GossipsubPrunePeers other peers that we\n * know of.\n */\nexports.GossipsubPrunePeers = 16;\n/**\n * GossipsubPruneBackoff controls the backoff time for pruned peers. This is how long\n * a peer must wait before attempting to graft into our mesh again after being pruned.\n * When pruning a peer, we send them our value of GossipsubPruneBackoff so they know\n * the minimum time to wait. Peers running older versions may not send a backoff time,\n * so if we receive a prune message without one, we will wait at least GossipsubPruneBackoff\n * before attempting to re-graft.\n */\nexports.GossipsubPruneBackoff = exports.minute;\n/**\n * GossipsubPruneBackoffTicks is the number of heartbeat ticks for attempting to prune expired\n * backoff timers.\n */\nexports.GossipsubPruneBackoffTicks = 15;\n/**\n * GossipsubConnectors controls the number of active connection attempts for peers obtained through PX.\n */\nexports.GossipsubConnectors = 8;\n/**\n * GossipsubMaxPendingConnections sets the maximum number of pending connections for peers attempted through px.\n */\nexports.GossipsubMaxPendingConnections = 128;\n/**\n * GossipsubConnectionTimeout controls the timeout for connection attempts.\n */\nexports.GossipsubConnectionTimeout = 30 * exports.second;\n/**\n * GossipsubDirectConnectTicks is the number of heartbeat ticks for attempting to reconnect direct peers\n * that are not currently connected.\n */\nexports.GossipsubDirectConnectTicks = 300;\n/**\n * GossipsubDirectConnectInitialDelay is the initial delay before opening connections to direct peers\n */\nexports.GossipsubDirectConnectInitialDelay = exports.second;\n/**\n * GossipsubOpportunisticGraftTicks is the number of heartbeat ticks for attempting to improve the mesh\n * with opportunistic grafting. Every GossipsubOpportunisticGraftTicks we will attempt to select some\n * high-scoring mesh peers to replace lower-scoring ones, if the median score of our mesh peers falls\n * below a threshold\n */\nexports.GossipsubOpportunisticGraftTicks = 60;\n/**\n * GossipsubOpportunisticGraftPeers is the number of peers to opportunistically graft.\n */\nexports.GossipsubOpportunisticGraftPeers = 2;\n/**\n * If a GRAFT comes before GossipsubGraftFloodThreshold has elapsed since the last PRUNE,\n * then there is an extra score penalty applied to the peer through P7.\n */\nexports.GossipsubGraftFloodThreshold = 10 * exports.second;\n/**\n * GossipsubMaxIHaveLength is the maximum number of messages to include in an IHAVE message.\n * Also controls the maximum number of IHAVE ids we will accept and request with IWANT from a\n * peer within a heartbeat, to protect from IHAVE floods. You should adjust this value from the\n * default if your system is pushing more than 5000 messages in GossipsubHistoryGossip heartbeats;\n * with the defaults this is 1666 messages/s.\n */\nexports.GossipsubMaxIHaveLength = 5000;\n/**\n * GossipsubMaxIHaveMessages is the maximum number of IHAVE messages to accept from a peer within a heartbeat.\n */\nexports.GossipsubMaxIHaveMessages = 10;\n/**\n * Time to wait for a message requested through IWANT following an IHAVE advertisement.\n * If the message is not received within this window, a broken promise is declared and\n * the router may apply bahavioural penalties.\n */\nexports.GossipsubIWantFollowupTime = 3 * exports.second;\n/**\n * Time in milliseconds to keep message ids in the seen cache\n */\nexports.GossipsubSeenTTL = 30 * exports.second;\nexports.TimeCacheDuration = 120 * 1000;\nexports.ERR_TOPIC_VALIDATOR_REJECT = 'ERR_TOPIC_VALIDATOR_REJECT';\nexports.ERR_TOPIC_VALIDATOR_IGNORE = 'ERR_TOPIC_VALIDATOR_IGNORE';\n/**\n * If peer score is better than this, we accept messages from this peer\n * within ACCEPT_FROM_WHITELIST_DURATION_MS from the last time computing score.\n **/\nexports.ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE = 0;\n/**\n * If peer score >= ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE, accept up to this\n * number of messages from that peer.\n */\nexports.ACCEPT_FROM_WHITELIST_MAX_MESSAGES = 128;\n/**\n * If peer score >= ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE, accept messages from\n * this peer up to this time duration.\n */\nexports.ACCEPT_FROM_WHITELIST_DURATION_MS = 1000;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getGossipPeers = void 0;\nconst utils_1 = require(\"./utils\");\n/**\n * Given a topic, returns up to count peers subscribed to that topic\n * that pass an optional filter function\n *\n * @param {Gossipsub} router\n * @param {String} topic\n * @param {Number} count\n * @param {Function} [filter] a function to filter acceptable peers\n * @returns {Set<string>}\n *\n */\nfunction getGossipPeers(router, topic, count, filter = () => true) {\n const peersInTopic = router.topics.get(topic);\n if (!peersInTopic) {\n return new Set();\n }\n // Adds all peers using our protocol\n // that also pass the filter function\n let peers = [];\n peersInTopic.forEach((id) => {\n const peerStreams = router.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (utils_1.hasGossipProtocol(peerStreams.protocol) &&\n filter(id)) {\n peers.push(id);\n }\n });\n // Pseudo-randomly shuffles peers\n peers = utils_1.shuffle(peers);\n if (count > 0 && peers.length > count) {\n peers = peers.slice(0, count);\n }\n return new Set(peers);\n}\nexports.getGossipPeers = getGossipPeers;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Heartbeat = void 0;\nconst constants = __importStar(require(\"./constants\"));\nconst get_gossip_peers_1 = require(\"./get-gossip-peers\");\nconst utils_1 = require(\"./utils\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\nclass Heartbeat {\n /**\n * @param {Object} gossipsub\n * @constructor\n */\n constructor(gossipsub) {\n this.gossipsub = gossipsub;\n }\n start() {\n if (this._heartbeatTimer) {\n return;\n }\n const heartbeat = this._heartbeat.bind(this);\n const timeout = setTimeout(() => {\n heartbeat();\n this._heartbeatTimer.runPeriodically(heartbeat, this.gossipsub._options.heartbeatInterval);\n }, constants.GossipsubHeartbeatInitialDelay);\n this._heartbeatTimer = {\n _intervalId: undefined,\n runPeriodically: (fn, period) => {\n this._heartbeatTimer._intervalId = setInterval(fn, period);\n },\n cancel: () => {\n clearTimeout(timeout);\n clearInterval(this._heartbeatTimer._intervalId);\n }\n };\n }\n /**\n * Unmounts the gossipsub protocol and shuts down every connection\n * @override\n * @returns {void}\n */\n stop() {\n if (!this._heartbeatTimer) {\n return;\n }\n this._heartbeatTimer.cancel();\n this._heartbeatTimer = null;\n }\n /**\n * Maintains the mesh and fanout maps in gossipsub.\n *\n * @returns {void}\n */\n _heartbeat() {\n const { D, Dlo, Dhi, Dscore, Dout, fanoutTTL } = this.gossipsub._options;\n this.gossipsub.heartbeatTicks++;\n // cache scores throught the heartbeat\n const scores = new Map();\n const getScore = (id) => {\n let s = scores.get(id);\n if (s === undefined) {\n s = this.gossipsub.score.score(id);\n scores.set(id, s);\n }\n return s;\n };\n // peer id => topic[]\n const tograft = new Map();\n // peer id => topic[]\n const toprune = new Map();\n // peer id => don't px\n const noPX = new Map();\n // clean up expired backoffs\n this.gossipsub._clearBackoff();\n // clean up peerhave/iasked counters\n this.gossipsub.peerhave.clear();\n this.gossipsub.iasked.clear();\n // apply IWANT request penalties\n this.gossipsub._applyIwantPenalties();\n // ensure direct peers are connected\n this.gossipsub._directConnect();\n // maintain the mesh for topics we have joined\n this.gossipsub.mesh.forEach((peers, topic) => {\n // prune/graft helper functions (defined per topic)\n const prunePeer = (id) => {\n this.gossipsub.log('HEARTBEAT: Remove mesh link to %s in %s', id, topic);\n // update peer score\n this.gossipsub.score.prune(id, topic);\n // add prune backoff record\n this.gossipsub._addBackoff(id, topic);\n // remove peer from mesh\n peers.delete(id);\n // add to toprune\n const topics = toprune.get(id);\n if (!topics) {\n toprune.set(id, [topic]);\n }\n else {\n topics.push(topic);\n }\n };\n const graftPeer = (id) => {\n this.gossipsub.log('HEARTBEAT: Add mesh link to %s in %s', id, topic);\n // update peer score\n this.gossipsub.score.graft(id, topic);\n // add peer to mesh\n peers.add(id);\n // add to tograft\n const topics = tograft.get(id);\n if (!topics) {\n tograft.set(id, [topic]);\n }\n else {\n topics.push(topic);\n }\n };\n // drop all peers with negative score, without PX\n peers.forEach(id => {\n const score = getScore(id);\n if (score < 0) {\n this.gossipsub.log('HEARTBEAT: Prune peer %s with negative score: score=%d, topic=%s', id, score, topic);\n prunePeer(id);\n noPX.set(id, true);\n }\n });\n // do we have enough peers?\n if (peers.size < Dlo) {\n const backoff = this.gossipsub.backoff.get(topic);\n const ineed = D - peers.size;\n const peersSet = get_gossip_peers_1.getGossipPeers(this.gossipsub, topic, ineed, id => {\n // filter out mesh peers, direct peers, peers we are backing off, peers with negative score\n return !peers.has(id) && !this.gossipsub.direct.has(id) && (!backoff || !backoff.has(id)) && getScore(id) >= 0;\n });\n peersSet.forEach(graftPeer);\n }\n // do we have to many peers?\n if (peers.size > Dhi) {\n let peersArray = Array.from(peers);\n // sort by score\n peersArray.sort((a, b) => getScore(b) - getScore(a));\n // We keep the first D_score peers by score and the remaining up to D randomly\n // under the constraint that we keep D_out peers in the mesh (if we have that many)\n peersArray = peersArray.slice(0, Dscore).concat(utils_1.shuffle(peersArray.slice(Dscore)));\n // count the outbound peers we are keeping\n let outbound = 0;\n peersArray.slice(0, D).forEach(p => {\n if (this.gossipsub.outbound.get(p)) {\n outbound++;\n }\n });\n // if it's less than D_out, bubble up some outbound peers from the random selection\n if (outbound < Dout) {\n const rotate = (i) => {\n // rotate the peersArray to the right and put the ith peer in the front\n const p = peersArray[i];\n for (let j = i; j > 0; j--) {\n peersArray[j] = peersArray[j - 1];\n }\n peersArray[0] = p;\n };\n // first bubble up all outbound peers already in the selection to the front\n if (outbound > 0) {\n let ihave = outbound;\n for (let i = 1; i < D && ihave > 0; i++) {\n if (this.gossipsub.outbound.get(peersArray[i])) {\n rotate(i);\n ihave--;\n }\n }\n }\n // now bubble up enough outbound peers outside the selection to the front\n let ineed = D - outbound;\n for (let i = D; i < peersArray.length && ineed > 0; i++) {\n if (this.gossipsub.outbound.get(peersArray[i])) {\n rotate(i);\n ineed--;\n }\n }\n }\n // prune the excess peers\n peersArray.slice(D).forEach(prunePeer);\n }\n // do we have enough outbound peers?\n if (peers.size >= Dlo) {\n // count the outbound peers we have\n let outbound = 0;\n peers.forEach(p => {\n if (this.gossipsub.outbound.get(p)) {\n outbound++;\n }\n });\n // if it's less than D_out, select some peers with outbound connections and graft them\n if (outbound < Dout) {\n const ineed = Dout - outbound;\n const backoff = this.gossipsub.backoff.get(topic);\n get_gossip_peers_1.getGossipPeers(this.gossipsub, topic, ineed, (id) => {\n // filter our current mesh peers, direct peers, peers we are backing off, peers with negative score\n return !peers.has(id) && !this.gossipsub.direct.has(id) && (!backoff || !backoff.has(id)) && getScore(id) >= 0;\n }).forEach(graftPeer);\n }\n }\n // should we try to improve the mesh with opportunistic grafting?\n if (this.gossipsub.heartbeatTicks % constants.GossipsubOpportunisticGraftTicks === 0 && peers.size > 1) {\n // Opportunistic grafting works as follows: we check the median score of peers in the\n // mesh; if this score is below the opportunisticGraftThreshold, we select a few peers at\n // random with score over the median.\n // The intention is to (slowly) improve an underperforming mesh by introducing good\n // scoring peers that may have been gossiping at us. This allows us to get out of sticky\n // situations where we are stuck with poor peers and also recover from churn of good peers.\n // now compute the median peer score in the mesh\n const peersList = Array.from(peers)\n .sort((a, b) => getScore(a) - getScore(b));\n const medianIndex = Math.floor(peers.size / 2);\n const medianScore = getScore(peersList[medianIndex]);\n // if the median score is below the threshold, select a better peer (if any) and GRAFT\n if (medianScore < this.gossipsub._options.scoreThresholds.opportunisticGraftThreshold) {\n const backoff = this.gossipsub.backoff.get(topic);\n const peersToGraft = get_gossip_peers_1.getGossipPeers(this.gossipsub, topic, constants.GossipsubOpportunisticGraftPeers, (id) => {\n // filter out current mesh peers, direct peers, peers we are backing off, peers below or at threshold\n return peers.has(id) && !this.gossipsub.direct.has(id) && (!backoff || !backoff.has(id)) && getScore(id) > medianScore;\n });\n peersToGraft.forEach(id => {\n this.gossipsub.log('HEARTBEAT: Opportunistically graft peer %s on topic %s', id, topic);\n graftPeer(id);\n });\n }\n }\n // 2nd arg are mesh peers excluded from gossip. We have already pushed\n // messages to them, so its redundant to gossip IHAVEs.\n this.gossipsub._emitGossip(topic, peers);\n });\n // expire fanout for topics we haven't published to in a while\n const now = this.gossipsub._now();\n this.gossipsub.lastpub.forEach((lastpb, topic) => {\n if ((lastpb + fanoutTTL) < now) {\n this.gossipsub.fanout.delete(topic);\n this.gossipsub.lastpub.delete(topic);\n }\n });\n // maintain our fanout for topics we are publishing but we have not joined\n this.gossipsub.fanout.forEach((fanoutPeers, topic) => {\n // checks whether our peers are still in the topic and have a score above the publish threshold\n const topicPeers = this.gossipsub.topics.get(topic);\n fanoutPeers.forEach(id => {\n if (!topicPeers.has(id) ||\n getScore(id) < this.gossipsub._options.scoreThresholds.publishThreshold) {\n fanoutPeers.delete(id);\n }\n });\n // do we need more peers?\n if (fanoutPeers.size < D) {\n const ineed = D - fanoutPeers.size;\n const peersSet = get_gossip_peers_1.getGossipPeers(this.gossipsub, topic, ineed, (id) => {\n // filter out existing fanout peers, direct peers, and peers with score above the publish threshold\n return !fanoutPeers.has(id) &&\n !this.gossipsub.direct.has(id) &&\n getScore(id) >= this.gossipsub._options.scoreThresholds.publishThreshold;\n });\n peersSet.forEach(id => {\n fanoutPeers.add(id);\n });\n }\n // 2nd arg are fanout peers excluded from gossip.\n // We have already pushed messages to them, so its redundant to gossip IHAVEs\n this.gossipsub._emitGossip(topic, fanoutPeers);\n });\n // send coalesced GRAFT/PRUNE messages (will piggyback gossip)\n this.gossipsub._sendGraftPrune(tograft, toprune, noPX);\n // flush pending gossip that wasn't piggybacked above\n this.gossipsub._flush();\n // advance the message history window\n this.gossipsub.messageCache.shift();\n this.gossipsub.emit('gossipsub:heartbeat');\n }\n}\nexports.Heartbeat = Heartbeat;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nconst pubsub_1 = __importStar(require(\"libp2p-interfaces/src/pubsub\"));\nconst message_cache_1 = require(\"./message-cache\");\nconst rpc_1 = require(\"./message/rpc\");\nconst constants = __importStar(require(\"./constants\"));\nconst heartbeat_1 = require(\"./heartbeat\");\nconst get_gossip_peers_1 = require(\"./get-gossip-peers\");\nconst utils_1 = require(\"./utils\");\nconst score_1 = require(\"./score\");\nconst tracer_1 = require(\"./tracer\");\nconst time_cache_1 = require(\"./utils/time-cache\");\nconst PeerId = require(\"peer-id\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst Envelope = require(\"libp2p/src/record/envelope\");\nconst constants_1 = require(\"./constants\");\nclass Gossipsub extends pubsub_1.default {\n // TODO: add remaining props\n /**\n * @param {Libp2p} libp2p\n * @param {Object} [options]\n * @param {boolean} [options.emitSelf = false] if publish should emit to self, if subscribed\n * @param {boolean} [options.canRelayMessage = false] - if can relay messages not subscribed\n * @param {boolean} [options.gossipIncoming = true] if incoming messages on a subscribed topic should be automatically gossiped\n * @param {boolean} [options.fallbackToFloodsub = true] if dial should fallback to floodsub\n * @param {boolean} [options.floodPublish = true] if self-published messages should be sent to all peers\n * @param {boolean} [options.doPX = false] whether PX is enabled; this should be enabled in bootstrappers and other well connected/trusted nodes.\n * @param {Object} [options.messageCache] override the default MessageCache\n * @param {FastMsgIdFn} [options.fastMsgIdFn] fast message id function\n * @param {string} [options.globalSignaturePolicy = \"StrictSign\"] signing policy to apply across all messages\n * @param {Object} [options.scoreParams] peer score parameters\n * @param {Object} [options.scoreThresholds] peer score thresholds\n * @param {AddrInfo[]} [options.directPeers] peers with which we will maintain direct connections\n * @constructor\n */\n constructor(libp2p, options = {}) {\n var _a;\n const multicodecs = [constants.GossipsubIDv11, constants.GossipsubIDv10];\n const opts = Object.assign(Object.assign({ gossipIncoming: true, fallbackToFloodsub: true, floodPublish: true, doPX: false, directPeers: [], D: constants.GossipsubD, Dlo: constants.GossipsubDlo, Dhi: constants.GossipsubDhi, Dscore: constants.GossipsubDscore, Dout: constants.GossipsubDout, Dlazy: constants.GossipsubDlazy, heartbeatInterval: constants.GossipsubHeartbeatInterval, fanoutTTL: constants.GossipsubFanoutTTL, mcacheLength: constants.GossipsubHistoryLength, mcacheGossip: constants.GossipsubHistoryGossip, seenTTL: constants.GossipsubSeenTTL }, options), { scoreParams: score_1.createPeerScoreParams(options.scoreParams), scoreThresholds: score_1.createPeerScoreThresholds(options.scoreThresholds) });\n // Also wants to get notified of peers connected using floodsub\n if (opts.fallbackToFloodsub) {\n multicodecs.push(constants.FloodsubID);\n }\n super(Object.assign({ debugName: 'libp2p:gossipsub', multicodecs,\n libp2p }, opts));\n this._options = opts;\n /**\n * Direct peers\n * @type {Set<string>}\n */\n this.direct = new Set(opts.directPeers.map(p => p.id.toB58String()));\n /**\n * Map of peer id and AcceptRequestWhileListEntry\n *\n * @type {Map<string, AcceptFromWhitelistEntry}\n */\n this.acceptFromWhitelist = new Map();\n // set direct peer addresses in the address book\n opts.directPeers.forEach(p => {\n libp2p.peerStore.addressBook.add(p.id, p.addrs);\n });\n /**\n * Cache of seen messages\n *\n * @type {SimpleTimeCache}\n */\n this.seenCache = new time_cache_1.SimpleTimeCache({ validityMs: opts.seenTTL });\n /**\n * Map of topic meshes\n * topic => peer id set\n *\n * @type {Map<string, Set<string>>}\n */\n this.mesh = new Map();\n /**\n * Map of topics to set of peers. These mesh peers are the ones to which we are publishing without a topic membership\n * topic => peer id set\n *\n * @type {Map<string, Set<string>>}\n */\n this.fanout = new Map();\n /**\n * Map of last publish time for fanout topics\n * topic => last publish time\n *\n * @type {Map<string, number>}\n */\n this.lastpub = new Map();\n /**\n * Map of pending messages to gossip\n * peer id => control messages\n *\n * @type {Map<string, Array<RPC.IControlIHave object>> }\n */\n this.gossip = new Map();\n /**\n * Map of control messages\n * peer id => control message\n *\n * @type {Map<string, RPC.IControlMessage object>}\n */\n this.control = new Map();\n /**\n * Number of IHAVEs received from peer in the last heartbeat\n * @type {Map<string, number>}\n */\n this.peerhave = new Map();\n /**\n * Number of messages we have asked from peer in the last heartbeat\n * @type {Map<string, number>}\n */\n this.iasked = new Map();\n /**\n * Prune backoff map\n */\n this.backoff = new Map();\n /**\n * Connection direction cache, marks peers with outbound connections\n * peer id => direction\n *\n * @type {Map<string, boolean>}\n */\n this.outbound = new Map();\n /**\n * A message cache that contains the messages for last few hearbeat ticks\n */\n this.messageCache = options.messageCache || new message_cache_1.MessageCache(opts.mcacheGossip, opts.mcacheLength);\n /**\n * A fast message id function used for internal message de-duplication\n */\n this.getFastMsgIdStr = (_a = options.fastMsgIdFn) !== null && _a !== void 0 ? _a : undefined;\n /**\n * Maps fast message-id to canonical message-id\n */\n this.fastMsgIdCache = options.fastMsgIdFn ? new time_cache_1.SimpleTimeCache({ validityMs: opts.seenTTL }) : undefined;\n /**\n * A heartbeat timer that maintains the mesh\n */\n this.heartbeat = new heartbeat_1.Heartbeat(this);\n /**\n * Number of heartbeats since the beginning of time\n * This allows us to amortize some resource cleanup -- eg: backoff cleanup\n */\n this.heartbeatTicks = 0;\n /**\n * Tracks IHAVE/IWANT promises broken by peers\n */\n this.gossipTracer = new tracer_1.IWantTracer();\n /**\n * libp2p\n */\n this._libp2p = libp2p;\n /**\n * Peer score tracking\n */\n this.score = new score_1.PeerScore(this._options.scoreParams, libp2p.connectionManager);\n }\n /**\n * Decode a Uint8Array into an RPC object\n * Overrided to use an extended protocol-specific protobuf decoder\n * @override\n * @param {Uint8Array} bytes\n * @returns {RPC}\n */\n _decodeRpc(bytes) {\n return rpc_1.RPC.decode(bytes);\n }\n /**\n * Encode an RPC object into a Uint8Array\n * Overrided to use an extended protocol-specific protobuf encoder\n * @override\n * @param {RPC} rpc\n * @returns {Uint8Array}\n */\n _encodeRpc(rpc) {\n return rpc_1.RPC.encode(rpc).finish();\n }\n /**\n * Add a peer to the router\n * @override\n * @param {PeerId} peerId\n * @param {string} protocol\n * @returns {PeerStreams}\n */\n _addPeer(peerId, protocol) {\n const p = super._addPeer(peerId, protocol);\n // Add to peer scoring\n this.score.addPeer(peerId.toB58String());\n // track the connection direction\n let outbound = false;\n for (const c of this._libp2p.connectionManager.getAll(peerId)) {\n if (c.stat.direction === 'outbound') {\n if (Array.from(c.registry.values()).some(rvalue => protocol === rvalue.protocol)) {\n outbound = true;\n break;\n }\n }\n }\n this.outbound.set(p.id.toB58String(), outbound);\n return p;\n }\n /**\n * Removes a peer from the router\n * @override\n * @param {PeerId} peer\n * @returns {PeerStreams | undefined}\n */\n _removePeer(peerId) {\n const peerStreams = super._removePeer(peerId);\n const id = peerId.toB58String();\n // Remove this peer from the mesh\n // eslint-disable-next-line no-unused-vars\n for (const peers of this.mesh.values()) {\n peers.delete(id);\n }\n // Remove this peer from the fanout\n // eslint-disable-next-line no-unused-vars\n for (const peers of this.fanout.values()) {\n peers.delete(id);\n }\n // Remove from gossip mapping\n this.gossip.delete(id);\n // Remove from control mapping\n this.control.delete(id);\n // Remove from backoff mapping\n this.outbound.delete(id);\n // Remove from peer scoring\n this.score.removePeer(id);\n this.acceptFromWhitelist.delete(id);\n return peerStreams;\n }\n /**\n * Handles an rpc request from a peer\n *\n * @override\n * @param {String} idB58Str\n * @param {PeerStreams} peerStreams\n * @param {RPC} rpc\n * @returns {Promise<boolean>}\n */\n _processRpc(id, peerStreams, rpc) {\n const _super = Object.create(null, {\n _processRpc: { get: () => super._processRpc }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (yield _super._processRpc.call(this, id, peerStreams, rpc)) {\n if (rpc.control) {\n yield this._processRpcControlMessage(id, rpc.control);\n }\n return true;\n }\n return false;\n });\n }\n /**\n * Handles an rpc control message from a peer\n * @param {string} id peer id\n * @param {RPC.IControlMessage} controlMsg\n * @returns {void}\n */\n _processRpcControlMessage(id, controlMsg) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!controlMsg) {\n return;\n }\n const iwant = controlMsg.ihave ? this._handleIHave(id, controlMsg.ihave) : [];\n const ihave = controlMsg.iwant ? this._handleIWant(id, controlMsg.iwant) : [];\n const prune = controlMsg.graft ? yield this._handleGraft(id, controlMsg.graft) : [];\n controlMsg.prune && this._handlePrune(id, controlMsg.prune);\n if (!iwant.length && !ihave.length && !prune.length) {\n return;\n }\n const outRpc = utils_1.createGossipRpc(ihave, { iwant, prune });\n this._sendRpc(id, outRpc);\n });\n }\n /**\n * Process incoming message,\n * emitting locally and forwarding on to relevant floodsub and gossipsub peers\n * @override\n * @param {InMessage} msg\n * @returns {Promise<void>}\n */\n _processRpcMessage(msg) {\n const _super = Object.create(null, {\n _processRpcMessage: { get: () => super._processRpcMessage }\n });\n return __awaiter(this, void 0, void 0, function* () {\n let canonicalMsgIdStr;\n if (this.getFastMsgIdStr && this.fastMsgIdCache) {\n // check duplicate\n const fastMsgIdStr = yield this.getFastMsgIdStr(msg);\n canonicalMsgIdStr = this.fastMsgIdCache.get(fastMsgIdStr);\n if (canonicalMsgIdStr !== undefined) {\n this.score.duplicateMessage(msg, canonicalMsgIdStr);\n return;\n }\n canonicalMsgIdStr = utils_1.messageIdToString(yield this.getMsgId(msg));\n this.fastMsgIdCache.put(fastMsgIdStr, canonicalMsgIdStr);\n }\n else {\n // check duplicate\n canonicalMsgIdStr = utils_1.messageIdToString(yield this.getMsgId(msg));\n if (this.seenCache.has(canonicalMsgIdStr)) {\n this.score.duplicateMessage(msg, canonicalMsgIdStr);\n return;\n }\n }\n // put in cache\n this.seenCache.put(canonicalMsgIdStr);\n yield this.score.validateMessage(canonicalMsgIdStr);\n yield _super._processRpcMessage.call(this, msg);\n });\n }\n /**\n * Whether to accept a message from a peer\n * @override\n * @param {string} id\n * @returns {boolean}\n */\n _acceptFrom(id) {\n if (this.direct.has(id)) {\n return true;\n }\n const now = Date.now();\n const entry = this.acceptFromWhitelist.get(id);\n if (entry &&\n entry.messagesAccepted < constants_1.ACCEPT_FROM_WHITELIST_MAX_MESSAGES &&\n entry.acceptUntil >= now) {\n entry.messagesAccepted += 1;\n return true;\n }\n const score = this.score.score(id);\n if (score >= constants_1.ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE) {\n // peer is unlikely to be able to drop its score to `graylistThreshold`\n // after 128 messages or 1s\n this.acceptFromWhitelist.set(id, {\n messagesAccepted: 0,\n acceptUntil: now + constants_1.ACCEPT_FROM_WHITELIST_DURATION_MS\n });\n }\n else {\n this.acceptFromWhitelist.delete(id);\n }\n return score >= this._options.scoreThresholds.graylistThreshold;\n }\n /**\n * Validate incoming message\n * @override\n * @param {InMessage} msg\n * @returns {Promise<void>}\n */\n validate(msg) {\n const _super = Object.create(null, {\n validate: { get: () => super.validate }\n });\n return __awaiter(this, void 0, void 0, function* () {\n try {\n yield _super.validate.call(this, msg);\n }\n catch (e) {\n const canonicalMsgIdStr = yield this.getCanonicalMsgIdStr(msg);\n this.score.rejectMessage(msg, canonicalMsgIdStr, e.code);\n this.gossipTracer.rejectMessage(canonicalMsgIdStr, e.code);\n throw e;\n }\n });\n }\n /**\n * Handles IHAVE messages\n * @param {string} id peer id\n * @param {Array<RPC.IControlIHave>} ihave\n * @returns {RPC.IControlIWant}\n */\n _handleIHave(id, ihave) {\n if (!ihave.length) {\n return [];\n }\n // we ignore IHAVE gossip from any peer whose score is below the gossips threshold\n const score = this.score.score(id);\n if (score < this._options.scoreThresholds.gossipThreshold) {\n this.log('IHAVE: ignoring peer %s with score below threshold [ score = %d ]', id, score);\n return [];\n }\n // IHAVE flood protection\n const peerhave = (this.peerhave.get(id) || 0) + 1;\n this.peerhave.set(id, peerhave);\n if (peerhave > constants.GossipsubMaxIHaveMessages) {\n this.log('IHAVE: peer %s has advertised too many times (%d) within this heartbeat interval; ignoring', id, peerhave);\n return [];\n }\n const iasked = this.iasked.get(id) || 0;\n if (iasked >= constants.GossipsubMaxIHaveLength) {\n this.log('IHAVE: peer %s has already advertised too many messages (%d); ignoring', id, iasked);\n return [];\n }\n // string msgId => msgId\n const iwant = new Map();\n ihave.forEach(({ topicID, messageIDs }) => {\n if (!topicID || !messageIDs || !this.mesh.has(topicID)) {\n return;\n }\n messageIDs.forEach((msgId) => {\n const msgIdStr = utils_1.messageIdToString(msgId);\n if (this.seenCache.has(msgIdStr)) {\n return;\n }\n iwant.set(msgIdStr, msgId);\n });\n });\n if (!iwant.size) {\n return [];\n }\n let iask = iwant.size;\n if (iask + iasked > constants.GossipsubMaxIHaveLength) {\n iask = constants.GossipsubMaxIHaveLength - iasked;\n }\n this.log('IHAVE: Asking for %d out of %d messages from %s', iask, iwant.size, id);\n let iwantList = Array.from(iwant.values());\n // ask in random order\n utils_1.shuffle(iwantList);\n // truncate to the messages we are actually asking for and update the iasked counter\n iwantList = iwantList.slice(0, iask);\n this.iasked.set(id, iasked + iask);\n this.gossipTracer.addPromise(id, iwantList);\n return [{\n messageIDs: iwantList\n }];\n }\n /**\n * Handles IWANT messages\n * Returns messages to send back to peer\n * @param {string} id peer id\n * @param {Array<RPC.IControlIWant>} iwant\n * @returns {Array<RPC.IMessage>}\n */\n _handleIWant(id, iwant) {\n if (!iwant.length) {\n return [];\n }\n // we don't respond to IWANT requests from any per whose score is below the gossip threshold\n const score = this.score.score(id);\n if (score < this._options.scoreThresholds.gossipThreshold) {\n this.log('IWANT: ignoring peer %s with score below threshold [score = %d]', id, score);\n return [];\n }\n // @type {Map<string, Message>}\n const ihave = new Map();\n iwant.forEach(({ messageIDs }) => {\n messageIDs && messageIDs.forEach((msgId) => {\n const msgIdStr = utils_1.messageIdToString(msgId);\n const [msg, count] = this.messageCache.getForPeer(msgIdStr, id);\n if (!msg) {\n return;\n }\n if (count > constants.GossipsubGossipRetransmission) {\n this.log('IWANT: Peer %s has asked for message %s too many times: ignoring request', id, msgId);\n return;\n }\n ihave.set(msgIdStr, msg);\n });\n });\n if (!ihave.size) {\n return [];\n }\n this.log('IWANT: Sending %d messages to %s', ihave.size, id);\n return Array.from(ihave.values()).map(pubsub_1.utils.normalizeOutRpcMessage);\n }\n /**\n * Handles Graft messages\n * @param {string} id peer id\n * @param {Array<RPC.IControlGraft>} graft\n * @return {Promise<RPC.IControlPrune[]>}\n */\n _handleGraft(id, graft) {\n return __awaiter(this, void 0, void 0, function* () {\n const prune = [];\n const score = this.score.score(id);\n const now = this._now();\n let doPX = this._options.doPX;\n graft.forEach(({ topicID }) => {\n var _a;\n if (!topicID) {\n return;\n }\n const peersInMesh = this.mesh.get(topicID);\n if (!peersInMesh) {\n // don't do PX when there is an unknown topic to avoid leaking our peers\n doPX = false;\n // spam hardening: ignore GRAFTs for unknown topics\n return;\n }\n // check if peer is already in the mesh; if so do nothing\n if (peersInMesh.has(id)) {\n return;\n }\n // we don't GRAFT to/from direct peers; complain loudly if this happens\n if (this.direct.has(id)) {\n this.log('GRAFT: ignoring request from direct peer %s', id);\n // this is possibly a bug from a non-reciprical configuration; send a PRUNE\n prune.push(topicID);\n // but don't px\n doPX = false;\n return;\n }\n // make sure we are not backing off that peer\n const expire = (_a = this.backoff.get(topicID)) === null || _a === void 0 ? void 0 : _a.get(id);\n if (typeof expire === 'number' && now < expire) {\n this.log('GRAFT: ignoring backed off peer %s', id);\n // add behavioral penalty\n this.score.addPenalty(id, 1);\n // no PX\n doPX = false;\n // check the flood cutoff -- is the GRAFT coming too fast?\n const floodCutoff = expire + constants.GossipsubGraftFloodThreshold - constants.GossipsubPruneBackoff;\n if (now < floodCutoff) {\n // extra penalty\n this.score.addPenalty(id, 1);\n }\n // refresh the backoff\n this._addBackoff(id, topicID);\n prune.push(topicID);\n return;\n }\n // check the score\n if (score < 0) {\n // we don't GRAFT peers with negative score\n this.log('GRAFT: ignoring peer %s with negative score: score=%d, topic=%s', id, score, topicID);\n // we do send them PRUNE however, because it's a matter of protocol correctness\n prune.push(topicID);\n // but we won't PX to them\n doPX = false;\n // add/refresh backoff so that we don't reGRAFT too early even if the score decays\n this._addBackoff(id, topicID);\n return;\n }\n // check the number of mesh peers; if it is at (or over) Dhi, we only accept grafts\n // from peers with outbound connections; this is a defensive check to restrict potential\n // mesh takeover attacks combined with love bombing\n if (peersInMesh.size >= this._options.Dhi && !this.outbound.get(id)) {\n prune.push(topicID);\n this._addBackoff(id, topicID);\n return;\n }\n this.log('GRAFT: Add mesh link from %s in %s', id, topicID);\n this.score.graft(id, topicID);\n peersInMesh.add(id);\n });\n if (!prune.length) {\n return [];\n }\n return Promise.all(prune.map(topic => this._makePrune(id, topic, doPX)));\n });\n }\n /**\n * Handles Prune messages\n * @param {string} id peer id\n * @param {Array<RPC.IControlPrune>} prune\n * @returns {void}\n */\n _handlePrune(id, prune) {\n const score = this.score.score(id);\n prune.forEach(({ topicID, backoff, peers }) => {\n if (!topicID) {\n return;\n }\n const peersInMesh = this.mesh.get(topicID);\n if (!peersInMesh) {\n return;\n }\n this.log('PRUNE: Remove mesh link to %s in %s', id, topicID);\n this.score.prune(id, topicID);\n peersInMesh.delete(id);\n // is there a backoff specified by the peer? if so obey it\n if (typeof backoff === 'number' && backoff > 0) {\n this._doAddBackoff(id, topicID, backoff * 1000);\n }\n else {\n this._addBackoff(id, topicID);\n }\n // PX\n if (peers && peers.length) {\n // we ignore PX from peers with insufficient scores\n if (score < this._options.scoreThresholds.acceptPXThreshold) {\n this.log('PRUNE: ignoring PX from peer %s with insufficient score [score = %d, topic = %s]', id, score, topicID);\n return;\n }\n this._pxConnect(peers);\n }\n });\n }\n /**\n * Add standard backoff log for a peer in a topic\n * @param {string} id\n * @param {string} topic\n * @returns {void}\n */\n _addBackoff(id, topic) {\n this._doAddBackoff(id, topic, constants.GossipsubPruneBackoff);\n }\n /**\n * Add backoff expiry interval for a peer in a topic\n * @param {string} id\n * @param {string} topic\n * @param {number} interval backoff duration in milliseconds\n * @returns {void}\n */\n _doAddBackoff(id, topic, interval) {\n let backoff = this.backoff.get(topic);\n if (!backoff) {\n backoff = new Map();\n this.backoff.set(topic, backoff);\n }\n const expire = this._now() + interval;\n const existingExpire = backoff.get(id) || 0;\n if (existingExpire < expire) {\n backoff.set(id, expire);\n }\n }\n /**\n * Apply penalties from broken IHAVE/IWANT promises\n * @returns {void}\n */\n _applyIwantPenalties() {\n this.gossipTracer.getBrokenPromises().forEach((count, p) => {\n this.log('peer %s didn\\'t follow up in %d IWANT requests; adding penalty', p, count);\n this.score.addPenalty(p, count);\n });\n }\n /**\n * Clear expired backoff expiries\n * @returns {void}\n */\n _clearBackoff() {\n // we only clear once every GossipsubPruneBackoffTicks ticks to avoid iterating over the maps too much\n if (this.heartbeatTicks % constants.GossipsubPruneBackoffTicks !== 0) {\n return;\n }\n const now = this._now();\n this.backoff.forEach((backoff, topic) => {\n backoff.forEach((expire, id) => {\n if (expire < now) {\n backoff.delete(id);\n }\n });\n if (backoff.size === 0) {\n this.backoff.delete(topic);\n }\n });\n }\n /**\n * Maybe reconnect to direct peers\n * @returns {void}\n */\n _directConnect() {\n // we only do this every few ticks to allow pending connections to complete and account for\n // restarts/downtime\n if (this.heartbeatTicks % constants.GossipsubDirectConnectTicks !== 0) {\n return;\n }\n const toconnect = [];\n this.direct.forEach(id => {\n const peer = this.peers.get(id);\n if (!peer || !peer.isWritable) {\n toconnect.push(id);\n }\n });\n if (toconnect.length) {\n toconnect.forEach(id => {\n this._connect(id);\n });\n }\n }\n /**\n * Maybe attempt connection given signed peer records\n * @param {RPC.IPeerInfo[]} peers\n * @returns {Promise<void>}\n */\n _pxConnect(peers) {\n return __awaiter(this, void 0, void 0, function* () {\n if (peers.length > constants.GossipsubPrunePeers) {\n utils_1.shuffle(peers);\n peers = peers.slice(0, constants.GossipsubPrunePeers);\n }\n const toconnect = [];\n yield Promise.all(peers.map((pi) => __awaiter(this, void 0, void 0, function* () {\n if (!pi.peerID) {\n return;\n }\n const p = PeerId.createFromBytes(pi.peerID);\n const id = p.toB58String();\n if (this.peers.has(id)) {\n return;\n }\n if (!pi.signedPeerRecord) {\n toconnect.push(id);\n return;\n }\n // The peer sent us a signed record\n // This is not a record from the peer who sent the record, but another peer who is connected with it\n // Ensure that it is valid\n try {\n const envelope = yield Envelope.openAndCertify(pi.signedPeerRecord, 'libp2p-peer-record');\n const eid = envelope.peerId.toB58String();\n if (id !== eid) {\n this.log('bogus peer record obtained through px: peer ID %s doesn\\'t match expected peer %s', eid, id);\n return;\n }\n if (!this._libp2p.peerStore.addressBook.consumePeerRecord(envelope)) {\n this.log('bogus peer record obtained through px: could not add peer record to address book');\n return;\n }\n toconnect.push(id);\n }\n catch (e) {\n this.log('bogus peer record obtained through px: invalid signature or not a peer record');\n }\n })));\n if (!toconnect.length) {\n return;\n }\n toconnect.forEach(id => this._connect(id));\n });\n }\n /**\n * Mounts the gossipsub protocol onto the libp2p node and sends our\n * our subscriptions to every peer connected\n * @override\n * @returns {Promise<void>}\n */\n start() {\n const _super = Object.create(null, {\n start: { get: () => super.start }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.start.call(this);\n this.heartbeat.start();\n this.score.start();\n // connect to direct peers\n this._directPeerInitial = setTimeout(() => {\n this.direct.forEach(id => {\n this._connect(id);\n });\n }, constants.GossipsubDirectConnectInitialDelay);\n });\n }\n /**\n * Unmounts the gossipsub protocol and shuts down every connection\n * @override\n * @returns {Promise<void>}\n */\n stop() {\n const _super = Object.create(null, {\n stop: { get: () => super.stop }\n });\n return __awaiter(this, void 0, void 0, function* () {\n yield _super.stop.call(this);\n this.heartbeat.stop();\n this.score.stop();\n this.mesh = new Map();\n this.fanout = new Map();\n this.lastpub = new Map();\n this.gossip = new Map();\n this.control = new Map();\n this.peerhave = new Map();\n this.iasked = new Map();\n this.backoff = new Map();\n this.outbound = new Map();\n this.gossipTracer.clear();\n this.seenCache.clear();\n if (this.fastMsgIdCache)\n this.fastMsgIdCache.clear();\n clearTimeout(this._directPeerInitial);\n });\n }\n /**\n * Connect to a peer using the gossipsub protocol\n * @param {string} id\n * @returns {void}\n */\n _connect(id) {\n this.log('Initiating connection with %s', id);\n this._libp2p.dialProtocol(PeerId.createFromB58String(id), this.multicodecs);\n }\n /**\n * Subscribes to a topic\n * @override\n * @param {string} topic\n * @returns {void}\n */\n subscribe(topic) {\n super.subscribe(topic);\n this.join(topic);\n }\n /**\n * Unsubscribe to a topic\n * @override\n * @param {string} topic\n * @returns {void}\n */\n unsubscribe(topic) {\n super.unsubscribe(topic);\n this.leave(topic);\n }\n /**\n * Join topic\n * @param {string} topic\n * @returns {void}\n */\n join(topic) {\n if (!this.started) {\n throw new Error('Gossipsub has not started');\n }\n this.log('JOIN %s', topic);\n const fanoutPeers = this.fanout.get(topic);\n if (fanoutPeers) {\n // these peers have a score above the publish threshold, which may be negative\n // so drop the ones with a negative score\n fanoutPeers.forEach(id => {\n if (this.score.score(id) < 0) {\n fanoutPeers.delete(id);\n }\n });\n if (fanoutPeers.size < this._options.D) {\n // we need more peers; eager, as this would get fixed in the next heartbeat\n get_gossip_peers_1.getGossipPeers(this, topic, this._options.D - fanoutPeers.size, (id) => {\n // filter our current peers, direct peers, and peers with negative scores\n return !fanoutPeers.has(id) && !this.direct.has(id) && this.score.score(id) >= 0;\n }).forEach(id => fanoutPeers.add(id));\n }\n this.mesh.set(topic, fanoutPeers);\n this.fanout.delete(topic);\n this.lastpub.delete(topic);\n }\n else {\n const peers = get_gossip_peers_1.getGossipPeers(this, topic, this._options.D, (id) => {\n // filter direct peers and peers with negative score\n return !this.direct.has(id) && this.score.score(id) >= 0;\n });\n this.mesh.set(topic, peers);\n }\n this.mesh.get(topic).forEach((id) => {\n this.log('JOIN: Add mesh link to %s in %s', id, topic);\n this._sendGraft(id, topic);\n });\n }\n /**\n * Leave topic\n * @param {string} topic\n * @returns {void}\n */\n leave(topic) {\n if (!this.started) {\n throw new Error('Gossipsub has not started');\n }\n this.log('LEAVE %s', topic);\n // Send PRUNE to mesh peers\n const meshPeers = this.mesh.get(topic);\n if (meshPeers) {\n meshPeers.forEach((id) => {\n this.log('LEAVE: Remove mesh link to %s in %s', id, topic);\n this._sendPrune(id, topic);\n });\n this.mesh.delete(topic);\n }\n }\n /**\n * Return the canonical message-id of a message as a string\n *\n * If a fast message-id is set: Try 1. the application cache 2. the fast cache 3. `getMsgId()`\n * If a fast message-id is NOT set: Just `getMsgId()`\n * @param {InMessage} msg\n * @returns {Promise<string>}\n */\n getCanonicalMsgIdStr(msg) {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n return (this.fastMsgIdCache && this.getFastMsgIdStr)\n ? (_b = (_a = this.getCachedMsgIdStr(msg)) !== null && _a !== void 0 ? _a : this.fastMsgIdCache.get(this.getFastMsgIdStr(msg))) !== null && _b !== void 0 ? _b : utils_1.messageIdToString(yield this.getMsgId(msg)) : utils_1.messageIdToString(yield this.getMsgId(msg));\n });\n }\n /**\n * An application should override this function to return its cached message id string without computing it.\n * Return undefined if message id is not found.\n * If a fast message id function is not defined, this function is ignored.\n * @param {InMessage} msg\n * @returns {string | undefined}\n */\n getCachedMsgIdStr(msg) {\n return undefined;\n }\n /**\n * Publish messages\n *\n * @override\n * @param {InMessage} msg\n * @returns {void}\n */\n _publish(msg) {\n return __awaiter(this, void 0, void 0, function* () {\n const msgIdStr = yield this.getCanonicalMsgIdStr(msg);\n if (msg.receivedFrom !== this.peerId.toB58String()) {\n this.score.deliverMessage(msg, msgIdStr);\n this.gossipTracer.deliverMessage(msgIdStr);\n }\n // put in seen cache\n this.seenCache.put(msgIdStr);\n this.messageCache.put(msg, msgIdStr);\n const tosend = new Set();\n msg.topicIDs.forEach((topic) => {\n const peersInTopic = this.topics.get(topic);\n if (!peersInTopic) {\n return;\n }\n if (this._options.floodPublish && msg.from === this.peerId.toB58String()) {\n // flood-publish behavior\n // send to direct peers and _all_ peers meeting the publishThreshold\n peersInTopic.forEach(id => {\n if (this.direct.has(id) || this.score.score(id) >= this._options.scoreThresholds.publishThreshold) {\n tosend.add(id);\n }\n });\n }\n else {\n // non-flood-publish behavior\n // send to direct peers, subscribed floodsub peers\n // and some mesh peers above publishThreshold\n // direct peers\n this.direct.forEach(id => {\n tosend.add(id);\n });\n // floodsub peers\n peersInTopic.forEach((id) => {\n const score = this.score.score(id);\n const peerStreams = this.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (peerStreams.protocol === constants.FloodsubID && score >= this._options.scoreThresholds.publishThreshold) {\n tosend.add(id);\n }\n });\n // Gossipsub peers handling\n let meshPeers = this.mesh.get(topic);\n if (!meshPeers || !meshPeers.size) {\n // We are not in the mesh for topic, use fanout peers\n meshPeers = this.fanout.get(topic);\n if (!meshPeers) {\n // If we are not in the fanout, then pick peers in topic above the publishThreshold\n const peers = get_gossip_peers_1.getGossipPeers(this, topic, this._options.D, id => {\n return this.score.score(id) >= this._options.scoreThresholds.publishThreshold;\n });\n if (peers.size > 0) {\n meshPeers = peers;\n this.fanout.set(topic, peers);\n }\n else {\n meshPeers = new Set();\n }\n }\n // Store the latest publishing time\n this.lastpub.set(topic, this._now());\n }\n meshPeers.forEach((peer) => {\n tosend.add(peer);\n });\n }\n });\n // Publish messages to peers\n const rpc = utils_1.createGossipRpc([\n pubsub_1.utils.normalizeOutRpcMessage(msg)\n ]);\n tosend.forEach((id) => {\n if (id === msg.from) {\n return;\n }\n this._sendRpc(id, rpc);\n });\n });\n }\n /**\n * Sends a GRAFT message to a peer\n * @param {string} id peer id\n * @param {string} topic\n * @returns {void}\n */\n _sendGraft(id, topic) {\n const graft = [{\n topicID: topic\n }];\n const out = utils_1.createGossipRpc([], { graft });\n this._sendRpc(id, out);\n }\n /**\n * Sends a PRUNE message to a peer\n * @param {string} id peer id\n * @param {string} topic\n * @returns {Promise<void>}\n */\n _sendPrune(id, topic) {\n return __awaiter(this, void 0, void 0, function* () {\n const prune = [\n yield this._makePrune(id, topic, this._options.doPX)\n ];\n const out = utils_1.createGossipRpc([], { prune });\n this._sendRpc(id, out);\n });\n }\n /**\n * @override\n */\n _sendRpc(id, outRpc) {\n const peerStreams = this.peers.get(id);\n if (!peerStreams || !peerStreams.isWritable) {\n return;\n }\n // piggyback control message retries\n const ctrl = this.control.get(id);\n if (ctrl) {\n this._piggybackControl(id, outRpc, ctrl);\n this.control.delete(id);\n }\n // piggyback gossip\n const ihave = this.gossip.get(id);\n if (ihave) {\n this._piggybackGossip(id, outRpc, ihave);\n this.gossip.delete(id);\n }\n peerStreams.write(rpc_1.RPC.encode(outRpc).finish());\n }\n _piggybackControl(id, outRpc, ctrl) {\n const tograft = (ctrl.graft || [])\n .filter(({ topicID }) => (topicID && this.mesh.get(topicID) || new Set()).has(id));\n const toprune = (ctrl.prune || [])\n .filter(({ topicID }) => !(topicID && this.mesh.get(topicID) || new Set()).has(id));\n if (!tograft.length && !toprune.length) {\n return;\n }\n if (outRpc.control) {\n outRpc.control.graft = outRpc.control.graft && outRpc.control.graft.concat(tograft);\n outRpc.control.prune = outRpc.control.prune && outRpc.control.prune.concat(toprune);\n }\n else {\n outRpc.control = { ihave: [], iwant: [], graft: tograft, prune: toprune };\n }\n }\n _piggybackGossip(id, outRpc, ihave) {\n if (!outRpc.control) {\n outRpc.control = { ihave: [], iwant: [], graft: [], prune: [] };\n }\n outRpc.control.ihave = ihave;\n }\n /**\n * Send graft and prune messages\n * @param {Map<string, Array<string>>} tograft peer id => topic[]\n * @param {Map<string, Array<string>>} toprune peer id => topic[]\n */\n _sendGraftPrune(tograft, toprune, noPX) {\n return __awaiter(this, void 0, void 0, function* () {\n const doPX = this._options.doPX;\n for (const [id, topics] of tograft) {\n const graft = topics.map((topicID) => ({ topicID }));\n let prune = [];\n // If a peer also has prunes, process them now\n const pruning = toprune.get(id);\n if (pruning) {\n prune = yield Promise.all(pruning.map((topicID) => this._makePrune(id, topicID, doPX && !noPX.get(id))));\n toprune.delete(id);\n }\n const outRpc = utils_1.createGossipRpc([], { graft, prune });\n this._sendRpc(id, outRpc);\n }\n for (const [id, topics] of toprune) {\n const prune = yield Promise.all(topics.map((topicID) => this._makePrune(id, topicID, doPX && !noPX.get(id))));\n const outRpc = utils_1.createGossipRpc([], { prune });\n this._sendRpc(id, outRpc);\n }\n });\n }\n /**\n * Emits gossip to peers in a particular topic\n * @param {string} topic\n * @param {Set<string>} exclude peers to exclude\n * @returns {void}\n */\n _emitGossip(topic, exclude) {\n const messageIDs = this.messageCache.getGossipIDs(topic);\n if (!messageIDs.length) {\n return;\n }\n // shuffle to emit in random order\n utils_1.shuffle(messageIDs);\n // if we are emitting more than GossipsubMaxIHaveLength ids, truncate the list\n if (messageIDs.length > constants.GossipsubMaxIHaveLength) {\n // we do the truncation (with shuffling) per peer below\n this.log('too many messages for gossip; will truncate IHAVE list (%d messages)', messageIDs.length);\n }\n // Send gossip to GossipFactor peers above threshold with a minimum of D_lazy\n // First we collect the peers above gossipThreshold that are not in the exclude set\n // and then randomly select from that set\n // We also exclude direct peers, as there is no reason to emit gossip to them\n const peersToGossip = [];\n const topicPeers = this.topics.get(topic);\n if (!topicPeers) {\n // no topic peers, no gossip\n return;\n }\n topicPeers.forEach(id => {\n const peerStreams = this.peers.get(id);\n if (!peerStreams) {\n return;\n }\n if (!exclude.has(id) &&\n !this.direct.has(id) &&\n utils_1.hasGossipProtocol(peerStreams.protocol) &&\n this.score.score(id) >= this._options.scoreThresholds.gossipThreshold) {\n peersToGossip.push(id);\n }\n });\n let target = this._options.Dlazy;\n const factor = constants.GossipsubGossipFactor * peersToGossip.length;\n if (factor > target) {\n target = factor;\n }\n if (target > peersToGossip.length) {\n target = peersToGossip.length;\n }\n else {\n utils_1.shuffle(peersToGossip);\n }\n // Emit the IHAVE gossip to the selected peers up to the target\n peersToGossip.slice(0, target).forEach(id => {\n let peerMessageIDs = messageIDs;\n if (messageIDs.length > constants.GossipsubMaxIHaveLength) {\n // shuffle and slice message IDs per peer so that we emit a different set for each peer\n // we have enough reduncancy in the system that this will significantly increase the message\n // coverage when we do truncate\n peerMessageIDs = utils_1.shuffle(peerMessageIDs.slice()).slice(0, constants.GossipsubMaxIHaveLength);\n }\n this._pushGossip(id, {\n topicID: topic,\n messageIDs: peerMessageIDs\n });\n });\n }\n /**\n * Flush gossip and control messages\n */\n _flush() {\n // send gossip first, which will also piggyback control\n for (const [peer, ihave] of this.gossip.entries()) {\n this.gossip.delete(peer);\n const out = utils_1.createGossipRpc([], { ihave });\n this._sendRpc(peer, out);\n }\n // send the remaining control messages\n for (const [peer, control] of this.control.entries()) {\n this.control.delete(peer);\n const out = utils_1.createGossipRpc([], { graft: control.graft, prune: control.prune });\n this._sendRpc(peer, out);\n }\n }\n /**\n * Adds new IHAVE messages to pending gossip\n * @param {PeerStreams} peerStreams\n * @param {Array<RPC.IControlIHave>} controlIHaveMsgs\n * @returns {void}\n */\n _pushGossip(id, controlIHaveMsgs) {\n this.log('Add gossip to %s', id);\n const gossip = this.gossip.get(id) || [];\n this.gossip.set(id, gossip.concat(controlIHaveMsgs));\n }\n /**\n * Returns the current time in milliseconds\n * @returns {number}\n */\n _now() {\n return Date.now();\n }\n /**\n * Make a PRUNE control message for a peer in a topic\n * @param {string} id\n * @param {string} topic\n * @param {boolean} doPX\n * @returns {Promise<RPC.IControlPrune>}\n */\n _makePrune(id, topic, doPX) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.peers.get(id).protocol === constants.GossipsubIDv10) {\n // Gossipsub v1.0 -- no backoff, the peer won't be able to parse it anyway\n return {\n topicID: topic,\n peers: []\n };\n }\n // backoff is measured in seconds\n // GossipsubPruneBackoff is measured in milliseconds\n const backoff = constants.GossipsubPruneBackoff / 1000;\n if (!doPX) {\n return {\n topicID: topic,\n peers: [],\n backoff: backoff\n };\n }\n // select peers for Peer eXchange\n const peers = get_gossip_peers_1.getGossipPeers(this, topic, constants.GossipsubPrunePeers, (xid) => {\n return xid !== id && this.score.score(xid) >= 0;\n });\n const px = yield Promise.all(Array.from(peers).map((p) => __awaiter(this, void 0, void 0, function* () {\n // see if we have a signed record to send back; if we don't, just send\n // the peer ID and let the pruned peer find them in the DHT -- we can't trust\n // unsigned address records through PX anyways\n // Finding signed records in the DHT is not supported at the time of writing in js-libp2p\n const peerId = PeerId.createFromB58String(p);\n return {\n peerID: peerId.toBytes(),\n signedPeerRecord: yield this._libp2p.peerStore.addressBook.getRawEnvelope(peerId)\n };\n })));\n return {\n topicID: topic,\n peers: px,\n backoff: backoff\n };\n });\n }\n}\nGossipsub.multicodec = constants.GossipsubIDv11;\nmodule.exports = Gossipsub;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MessageCache = void 0;\nconst utils_1 = require(\"./utils\");\nclass MessageCache {\n /**\n * @param {Number} gossip\n * @param {Number} history\n * @param {msgIdFn} msgIdFn a function that returns message id from a message\n *\n * @constructor\n */\n constructor(gossip, history) {\n /**\n * @type {Map<string, RPC.Message>}\n */\n this.msgs = new Map();\n this.peertx = new Map();\n /**\n * @type {Array<Array<CacheEntry>>}\n */\n this.history = [];\n for (let i = 0; i < history; i++) {\n this.history[i] = [];\n }\n /**\n * @type {Number}\n */\n this.gossip = gossip;\n }\n /**\n * Adds a message to the current window and the cache\n *\n * @param {string} msgIdStr\n * @param {RPC.Message} msg\n * @returns {Promise<void>}\n */\n put(msg, msgIdStr) {\n return __awaiter(this, void 0, void 0, function* () {\n this.msgs.set(msgIdStr, msg);\n const msgId = utils_1.messageIdFromString(msgIdStr);\n this.history[0].push({ msgId: msgId, topics: msg.topicIDs });\n });\n }\n /**\n * Retrieves a message from the cache by its ID, if it is still present\n *\n * @param {Uint8Array} msgId\n * @returns {Message}\n */\n get(msgId) {\n return this.msgs.get(utils_1.messageIdToString(msgId));\n }\n /**\n * Retrieves a message from the cache by its ID, if it is present\n * for a specific peer.\n * Returns the message and the number of times the peer has requested the message\n *\n * @param {string} msgIdStr\n * @param {string} p\n * @returns {[InMessage | undefined, number]}\n */\n getForPeer(msgIdStr, p) {\n const msg = this.msgs.get(msgIdStr);\n if (!msg) {\n return [undefined, 0];\n }\n let peertx = this.peertx.get(msgIdStr);\n if (!peertx) {\n peertx = new Map();\n this.peertx.set(msgIdStr, peertx);\n }\n const count = (peertx.get(p) || 0) + 1;\n peertx.set(p, count);\n return [msg, count];\n }\n /**\n * Retrieves a list of message IDs for a given topic\n *\n * @param {String} topic\n *\n * @returns {Array<Uint8Array>}\n */\n getGossipIDs(topic) {\n const msgIds = [];\n for (let i = 0; i < this.gossip; i++) {\n this.history[i].forEach((entry) => {\n for (const t of entry.topics) {\n if (t === topic) {\n msgIds.push(entry.msgId);\n break;\n }\n }\n });\n }\n return msgIds;\n }\n /**\n * Shifts the current window, discarding messages older than this.history.length of the cache\n *\n * @returns {void}\n */\n shift() {\n const last = this.history[this.history.length - 1];\n last.forEach((entry) => {\n const msgIdStr = utils_1.messageIdToString(entry.msgId);\n this.msgs.delete(msgIdStr);\n this.peertx.delete(msgIdStr);\n });\n this.history.pop();\n this.history.unshift([]);\n }\n}\nexports.MessageCache = MessageCache;\n","/*eslint-disable*/\n(function(global, factory) { /* global define, require, module */\n\n /* AMD */ if (typeof define === 'function' && define.amd)\n define([\"protobufjs/minimal\"], factory);\n\n /* CommonJS */ else if (typeof require === 'function' && typeof module === 'object' && module && module.exports)\n module.exports = factory(require(\"protobufjs/minimal\"));\n\n})(this, function($protobuf) {\n \"use strict\";\n\n // Common aliases\n var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n \n // Exported root namespace\n var $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\n \n $root.RPC = (function() {\n \n /**\n * Properties of a RPC.\n * @exports IRPC\n * @interface IRPC\n * @property {Array.<RPC.ISubOpts>|null} [subscriptions] RPC subscriptions\n * @property {Array.<RPC.IMessage>|null} [msgs] RPC msgs\n * @property {RPC.IControlMessage|null} [control] RPC control\n */\n \n /**\n * Constructs a new RPC.\n * @exports RPC\n * @classdesc Represents a RPC.\n * @implements IRPC\n * @constructor\n * @param {IRPC=} [p] Properties to set\n */\n function RPC(p) {\n this.subscriptions = [];\n this.msgs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * RPC subscriptions.\n * @member {Array.<RPC.ISubOpts>} subscriptions\n * @memberof RPC\n * @instance\n */\n RPC.prototype.subscriptions = $util.emptyArray;\n \n /**\n * RPC msgs.\n * @member {Array.<RPC.IMessage>} msgs\n * @memberof RPC\n * @instance\n */\n RPC.prototype.msgs = $util.emptyArray;\n \n /**\n * RPC control.\n * @member {RPC.IControlMessage|null|undefined} control\n * @memberof RPC\n * @instance\n */\n RPC.prototype.control = null;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * RPC _control.\n * @member {\"control\"|undefined} _control\n * @memberof RPC\n * @instance\n */\n Object.defineProperty(RPC.prototype, \"_control\", {\n get: $util.oneOfGetter($oneOfFields = [\"control\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified RPC message. Does not implicitly {@link RPC.verify|verify} messages.\n * @function encode\n * @memberof RPC\n * @static\n * @param {IRPC} m RPC message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n RPC.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.subscriptions != null && m.subscriptions.length) {\n for (var i = 0; i < m.subscriptions.length; ++i)\n $root.RPC.SubOpts.encode(m.subscriptions[i], w.uint32(10).fork()).ldelim();\n }\n if (m.msgs != null && m.msgs.length) {\n for (var i = 0; i < m.msgs.length; ++i)\n $root.RPC.Message.encode(m.msgs[i], w.uint32(18).fork()).ldelim();\n }\n if (m.control != null && Object.hasOwnProperty.call(m, \"control\"))\n $root.RPC.ControlMessage.encode(m.control, w.uint32(26).fork()).ldelim();\n return w;\n };\n \n /**\n * Decodes a RPC message from the specified reader or buffer.\n * @function decode\n * @memberof RPC\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC} RPC\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n RPC.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.subscriptions && m.subscriptions.length))\n m.subscriptions = [];\n m.subscriptions.push($root.RPC.SubOpts.decode(r, r.uint32()));\n break;\n case 2:\n if (!(m.msgs && m.msgs.length))\n m.msgs = [];\n m.msgs.push($root.RPC.Message.decode(r, r.uint32()));\n break;\n case 3:\n m.control = $root.RPC.ControlMessage.decode(r, r.uint32());\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a RPC message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC} RPC\n */\n RPC.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC)\n return d;\n var m = new $root.RPC();\n if (d.subscriptions) {\n if (!Array.isArray(d.subscriptions))\n throw TypeError(\".RPC.subscriptions: array expected\");\n m.subscriptions = [];\n for (var i = 0; i < d.subscriptions.length; ++i) {\n if (typeof d.subscriptions[i] !== \"object\")\n throw TypeError(\".RPC.subscriptions: object expected\");\n m.subscriptions[i] = $root.RPC.SubOpts.fromObject(d.subscriptions[i]);\n }\n }\n if (d.msgs) {\n if (!Array.isArray(d.msgs))\n throw TypeError(\".RPC.msgs: array expected\");\n m.msgs = [];\n for (var i = 0; i < d.msgs.length; ++i) {\n if (typeof d.msgs[i] !== \"object\")\n throw TypeError(\".RPC.msgs: object expected\");\n m.msgs[i] = $root.RPC.Message.fromObject(d.msgs[i]);\n }\n }\n if (d.control != null) {\n if (typeof d.control !== \"object\")\n throw TypeError(\".RPC.control: object expected\");\n m.control = $root.RPC.ControlMessage.fromObject(d.control);\n }\n return m;\n };\n \n /**\n * Creates a plain object from a RPC message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC\n * @static\n * @param {RPC} m RPC\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n RPC.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.subscriptions = [];\n d.msgs = [];\n }\n if (m.subscriptions && m.subscriptions.length) {\n d.subscriptions = [];\n for (var j = 0; j < m.subscriptions.length; ++j) {\n d.subscriptions[j] = $root.RPC.SubOpts.toObject(m.subscriptions[j], o);\n }\n }\n if (m.msgs && m.msgs.length) {\n d.msgs = [];\n for (var j = 0; j < m.msgs.length; ++j) {\n d.msgs[j] = $root.RPC.Message.toObject(m.msgs[j], o);\n }\n }\n if (m.control != null && m.hasOwnProperty(\"control\")) {\n d.control = $root.RPC.ControlMessage.toObject(m.control, o);\n if (o.oneofs)\n d._control = \"control\";\n }\n return d;\n };\n \n /**\n * Converts this RPC to JSON.\n * @function toJSON\n * @memberof RPC\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n RPC.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n RPC.SubOpts = (function() {\n \n /**\n * Properties of a SubOpts.\n * @memberof RPC\n * @interface ISubOpts\n * @property {boolean|null} [subscribe] SubOpts subscribe\n * @property {string|null} [topicID] SubOpts topicID\n */\n \n /**\n * Constructs a new SubOpts.\n * @memberof RPC\n * @classdesc Represents a SubOpts.\n * @implements ISubOpts\n * @constructor\n * @param {RPC.ISubOpts=} [p] Properties to set\n */\n function SubOpts(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * SubOpts subscribe.\n * @member {boolean|null|undefined} subscribe\n * @memberof RPC.SubOpts\n * @instance\n */\n SubOpts.prototype.subscribe = null;\n \n /**\n * SubOpts topicID.\n * @member {string|null|undefined} topicID\n * @memberof RPC.SubOpts\n * @instance\n */\n SubOpts.prototype.topicID = null;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * SubOpts _subscribe.\n * @member {\"subscribe\"|undefined} _subscribe\n * @memberof RPC.SubOpts\n * @instance\n */\n Object.defineProperty(SubOpts.prototype, \"_subscribe\", {\n get: $util.oneOfGetter($oneOfFields = [\"subscribe\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * SubOpts _topicID.\n * @member {\"topicID\"|undefined} _topicID\n * @memberof RPC.SubOpts\n * @instance\n */\n Object.defineProperty(SubOpts.prototype, \"_topicID\", {\n get: $util.oneOfGetter($oneOfFields = [\"topicID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified SubOpts message. Does not implicitly {@link RPC.SubOpts.verify|verify} messages.\n * @function encode\n * @memberof RPC.SubOpts\n * @static\n * @param {RPC.ISubOpts} m SubOpts message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SubOpts.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.subscribe != null && Object.hasOwnProperty.call(m, \"subscribe\"))\n w.uint32(8).bool(m.subscribe);\n if (m.topicID != null && Object.hasOwnProperty.call(m, \"topicID\"))\n w.uint32(18).string(m.topicID);\n return w;\n };\n \n /**\n * Decodes a SubOpts message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.SubOpts\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.SubOpts} SubOpts\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SubOpts.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.SubOpts();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.subscribe = r.bool();\n break;\n case 2:\n m.topicID = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a SubOpts message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.SubOpts\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.SubOpts} SubOpts\n */\n SubOpts.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.SubOpts)\n return d;\n var m = new $root.RPC.SubOpts();\n if (d.subscribe != null) {\n m.subscribe = Boolean(d.subscribe);\n }\n if (d.topicID != null) {\n m.topicID = String(d.topicID);\n }\n return m;\n };\n \n /**\n * Creates a plain object from a SubOpts message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.SubOpts\n * @static\n * @param {RPC.SubOpts} m SubOpts\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n SubOpts.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (m.subscribe != null && m.hasOwnProperty(\"subscribe\")) {\n d.subscribe = m.subscribe;\n if (o.oneofs)\n d._subscribe = \"subscribe\";\n }\n if (m.topicID != null && m.hasOwnProperty(\"topicID\")) {\n d.topicID = m.topicID;\n if (o.oneofs)\n d._topicID = \"topicID\";\n }\n return d;\n };\n \n /**\n * Converts this SubOpts to JSON.\n * @function toJSON\n * @memberof RPC.SubOpts\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n SubOpts.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return SubOpts;\n })();\n \n RPC.Message = (function() {\n \n /**\n * Properties of a Message.\n * @memberof RPC\n * @interface IMessage\n * @property {Uint8Array|null} [from] Message from\n * @property {Uint8Array|null} [data] Message data\n * @property {Uint8Array|null} [seqno] Message seqno\n * @property {Array.<string>|null} [topicIDs] Message topicIDs\n * @property {Uint8Array|null} [signature] Message signature\n * @property {Uint8Array|null} [key] Message key\n */\n \n /**\n * Constructs a new Message.\n * @memberof RPC\n * @classdesc Represents a Message.\n * @implements IMessage\n * @constructor\n * @param {RPC.IMessage=} [p] Properties to set\n */\n function Message(p) {\n this.topicIDs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * Message from.\n * @member {Uint8Array|null|undefined} from\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.from = null;\n \n /**\n * Message data.\n * @member {Uint8Array|null|undefined} data\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.data = null;\n \n /**\n * Message seqno.\n * @member {Uint8Array|null|undefined} seqno\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.seqno = null;\n \n /**\n * Message topicIDs.\n * @member {Array.<string>} topicIDs\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.topicIDs = $util.emptyArray;\n \n /**\n * Message signature.\n * @member {Uint8Array|null|undefined} signature\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.signature = null;\n \n /**\n * Message key.\n * @member {Uint8Array|null|undefined} key\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.key = null;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * Message _from.\n * @member {\"from\"|undefined} _from\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_from\", {\n get: $util.oneOfGetter($oneOfFields = [\"from\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Message _data.\n * @member {\"data\"|undefined} _data\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_data\", {\n get: $util.oneOfGetter($oneOfFields = [\"data\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Message _seqno.\n * @member {\"seqno\"|undefined} _seqno\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_seqno\", {\n get: $util.oneOfGetter($oneOfFields = [\"seqno\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Message _signature.\n * @member {\"signature\"|undefined} _signature\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_signature\", {\n get: $util.oneOfGetter($oneOfFields = [\"signature\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Message _key.\n * @member {\"key\"|undefined} _key\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_key\", {\n get: $util.oneOfGetter($oneOfFields = [\"key\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified Message message. Does not implicitly {@link RPC.Message.verify|verify} messages.\n * @function encode\n * @memberof RPC.Message\n * @static\n * @param {RPC.IMessage} m Message message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Message.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.from != null && Object.hasOwnProperty.call(m, \"from\"))\n w.uint32(10).bytes(m.from);\n if (m.data != null && Object.hasOwnProperty.call(m, \"data\"))\n w.uint32(18).bytes(m.data);\n if (m.seqno != null && Object.hasOwnProperty.call(m, \"seqno\"))\n w.uint32(26).bytes(m.seqno);\n if (m.topicIDs != null && m.topicIDs.length) {\n for (var i = 0; i < m.topicIDs.length; ++i)\n w.uint32(34).string(m.topicIDs[i]);\n }\n if (m.signature != null && Object.hasOwnProperty.call(m, \"signature\"))\n w.uint32(42).bytes(m.signature);\n if (m.key != null && Object.hasOwnProperty.call(m, \"key\"))\n w.uint32(50).bytes(m.key);\n return w;\n };\n \n /**\n * Decodes a Message message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.Message} Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Message.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.Message();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.from = r.bytes();\n break;\n case 2:\n m.data = r.bytes();\n break;\n case 3:\n m.seqno = r.bytes();\n break;\n case 4:\n if (!(m.topicIDs && m.topicIDs.length))\n m.topicIDs = [];\n m.topicIDs.push(r.string());\n break;\n case 5:\n m.signature = r.bytes();\n break;\n case 6:\n m.key = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.Message\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.Message} Message\n */\n Message.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.Message)\n return d;\n var m = new $root.RPC.Message();\n if (d.from != null) {\n if (typeof d.from === \"string\")\n $util.base64.decode(d.from, m.from = $util.newBuffer($util.base64.length(d.from)), 0);\n else if (d.from.length)\n m.from = d.from;\n }\n if (d.data != null) {\n if (typeof d.data === \"string\")\n $util.base64.decode(d.data, m.data = $util.newBuffer($util.base64.length(d.data)), 0);\n else if (d.data.length)\n m.data = d.data;\n }\n if (d.seqno != null) {\n if (typeof d.seqno === \"string\")\n $util.base64.decode(d.seqno, m.seqno = $util.newBuffer($util.base64.length(d.seqno)), 0);\n else if (d.seqno.length)\n m.seqno = d.seqno;\n }\n if (d.topicIDs) {\n if (!Array.isArray(d.topicIDs))\n throw TypeError(\".RPC.Message.topicIDs: array expected\");\n m.topicIDs = [];\n for (var i = 0; i < d.topicIDs.length; ++i) {\n m.topicIDs[i] = String(d.topicIDs[i]);\n }\n }\n if (d.signature != null) {\n if (typeof d.signature === \"string\")\n $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0);\n else if (d.signature.length)\n m.signature = d.signature;\n }\n if (d.key != null) {\n if (typeof d.key === \"string\")\n $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0);\n else if (d.key.length)\n m.key = d.key;\n }\n return m;\n };\n \n /**\n * Creates a plain object from a Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.Message\n * @static\n * @param {RPC.Message} m Message\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Message.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.topicIDs = [];\n }\n if (m.from != null && m.hasOwnProperty(\"from\")) {\n d.from = o.bytes === String ? $util.base64.encode(m.from, 0, m.from.length) : o.bytes === Array ? Array.prototype.slice.call(m.from) : m.from;\n if (o.oneofs)\n d._from = \"from\";\n }\n if (m.data != null && m.hasOwnProperty(\"data\")) {\n d.data = o.bytes === String ? $util.base64.encode(m.data, 0, m.data.length) : o.bytes === Array ? Array.prototype.slice.call(m.data) : m.data;\n if (o.oneofs)\n d._data = \"data\";\n }\n if (m.seqno != null && m.hasOwnProperty(\"seqno\")) {\n d.seqno = o.bytes === String ? $util.base64.encode(m.seqno, 0, m.seqno.length) : o.bytes === Array ? Array.prototype.slice.call(m.seqno) : m.seqno;\n if (o.oneofs)\n d._seqno = \"seqno\";\n }\n if (m.topicIDs && m.topicIDs.length) {\n d.topicIDs = [];\n for (var j = 0; j < m.topicIDs.length; ++j) {\n d.topicIDs[j] = m.topicIDs[j];\n }\n }\n if (m.signature != null && m.hasOwnProperty(\"signature\")) {\n d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature;\n if (o.oneofs)\n d._signature = \"signature\";\n }\n if (m.key != null && m.hasOwnProperty(\"key\")) {\n d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key;\n if (o.oneofs)\n d._key = \"key\";\n }\n return d;\n };\n \n /**\n * Converts this Message to JSON.\n * @function toJSON\n * @memberof RPC.Message\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return Message;\n })();\n \n RPC.ControlMessage = (function() {\n \n /**\n * Properties of a ControlMessage.\n * @memberof RPC\n * @interface IControlMessage\n * @property {Array.<RPC.IControlIHave>|null} [ihave] ControlMessage ihave\n * @property {Array.<RPC.IControlIWant>|null} [iwant] ControlMessage iwant\n * @property {Array.<RPC.IControlGraft>|null} [graft] ControlMessage graft\n * @property {Array.<RPC.IControlPrune>|null} [prune] ControlMessage prune\n */\n \n /**\n * Constructs a new ControlMessage.\n * @memberof RPC\n * @classdesc Represents a ControlMessage.\n * @implements IControlMessage\n * @constructor\n * @param {RPC.IControlMessage=} [p] Properties to set\n */\n function ControlMessage(p) {\n this.ihave = [];\n this.iwant = [];\n this.graft = [];\n this.prune = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * ControlMessage ihave.\n * @member {Array.<RPC.IControlIHave>} ihave\n * @memberof RPC.ControlMessage\n * @instance\n */\n ControlMessage.prototype.ihave = $util.emptyArray;\n \n /**\n * ControlMessage iwant.\n * @member {Array.<RPC.IControlIWant>} iwant\n * @memberof RPC.ControlMessage\n * @instance\n */\n ControlMessage.prototype.iwant = $util.emptyArray;\n \n /**\n * ControlMessage graft.\n * @member {Array.<RPC.IControlGraft>} graft\n * @memberof RPC.ControlMessage\n * @instance\n */\n ControlMessage.prototype.graft = $util.emptyArray;\n \n /**\n * ControlMessage prune.\n * @member {Array.<RPC.IControlPrune>} prune\n * @memberof RPC.ControlMessage\n * @instance\n */\n ControlMessage.prototype.prune = $util.emptyArray;\n \n /**\n * Encodes the specified ControlMessage message. Does not implicitly {@link RPC.ControlMessage.verify|verify} messages.\n * @function encode\n * @memberof RPC.ControlMessage\n * @static\n * @param {RPC.IControlMessage} m ControlMessage message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ControlMessage.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.ihave != null && m.ihave.length) {\n for (var i = 0; i < m.ihave.length; ++i)\n $root.RPC.ControlIHave.encode(m.ihave[i], w.uint32(10).fork()).ldelim();\n }\n if (m.iwant != null && m.iwant.length) {\n for (var i = 0; i < m.iwant.length; ++i)\n $root.RPC.ControlIWant.encode(m.iwant[i], w.uint32(18).fork()).ldelim();\n }\n if (m.graft != null && m.graft.length) {\n for (var i = 0; i < m.graft.length; ++i)\n $root.RPC.ControlGraft.encode(m.graft[i], w.uint32(26).fork()).ldelim();\n }\n if (m.prune != null && m.prune.length) {\n for (var i = 0; i < m.prune.length; ++i)\n $root.RPC.ControlPrune.encode(m.prune[i], w.uint32(34).fork()).ldelim();\n }\n return w;\n };\n \n /**\n * Decodes a ControlMessage message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.ControlMessage\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.ControlMessage} ControlMessage\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ControlMessage.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.ControlMessage();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.ihave && m.ihave.length))\n m.ihave = [];\n m.ihave.push($root.RPC.ControlIHave.decode(r, r.uint32()));\n break;\n case 2:\n if (!(m.iwant && m.iwant.length))\n m.iwant = [];\n m.iwant.push($root.RPC.ControlIWant.decode(r, r.uint32()));\n break;\n case 3:\n if (!(m.graft && m.graft.length))\n m.graft = [];\n m.graft.push($root.RPC.ControlGraft.decode(r, r.uint32()));\n break;\n case 4:\n if (!(m.prune && m.prune.length))\n m.prune = [];\n m.prune.push($root.RPC.ControlPrune.decode(r, r.uint32()));\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a ControlMessage message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.ControlMessage\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.ControlMessage} ControlMessage\n */\n ControlMessage.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.ControlMessage)\n return d;\n var m = new $root.RPC.ControlMessage();\n if (d.ihave) {\n if (!Array.isArray(d.ihave))\n throw TypeError(\".RPC.ControlMessage.ihave: array expected\");\n m.ihave = [];\n for (var i = 0; i < d.ihave.length; ++i) {\n if (typeof d.ihave[i] !== \"object\")\n throw TypeError(\".RPC.ControlMessage.ihave: object expected\");\n m.ihave[i] = $root.RPC.ControlIHave.fromObject(d.ihave[i]);\n }\n }\n if (d.iwant) {\n if (!Array.isArray(d.iwant))\n throw TypeError(\".RPC.ControlMessage.iwant: array expected\");\n m.iwant = [];\n for (var i = 0; i < d.iwant.length; ++i) {\n if (typeof d.iwant[i] !== \"object\")\n throw TypeError(\".RPC.ControlMessage.iwant: object expected\");\n m.iwant[i] = $root.RPC.ControlIWant.fromObject(d.iwant[i]);\n }\n }\n if (d.graft) {\n if (!Array.isArray(d.graft))\n throw TypeError(\".RPC.ControlMessage.graft: array expected\");\n m.graft = [];\n for (var i = 0; i < d.graft.length; ++i) {\n if (typeof d.graft[i] !== \"object\")\n throw TypeError(\".RPC.ControlMessage.graft: object expected\");\n m.graft[i] = $root.RPC.ControlGraft.fromObject(d.graft[i]);\n }\n }\n if (d.prune) {\n if (!Array.isArray(d.prune))\n throw TypeError(\".RPC.ControlMessage.prune: array expected\");\n m.prune = [];\n for (var i = 0; i < d.prune.length; ++i) {\n if (typeof d.prune[i] !== \"object\")\n throw TypeError(\".RPC.ControlMessage.prune: object expected\");\n m.prune[i] = $root.RPC.ControlPrune.fromObject(d.prune[i]);\n }\n }\n return m;\n };\n \n /**\n * Creates a plain object from a ControlMessage message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.ControlMessage\n * @static\n * @param {RPC.ControlMessage} m ControlMessage\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ControlMessage.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.ihave = [];\n d.iwant = [];\n d.graft = [];\n d.prune = [];\n }\n if (m.ihave && m.ihave.length) {\n d.ihave = [];\n for (var j = 0; j < m.ihave.length; ++j) {\n d.ihave[j] = $root.RPC.ControlIHave.toObject(m.ihave[j], o);\n }\n }\n if (m.iwant && m.iwant.length) {\n d.iwant = [];\n for (var j = 0; j < m.iwant.length; ++j) {\n d.iwant[j] = $root.RPC.ControlIWant.toObject(m.iwant[j], o);\n }\n }\n if (m.graft && m.graft.length) {\n d.graft = [];\n for (var j = 0; j < m.graft.length; ++j) {\n d.graft[j] = $root.RPC.ControlGraft.toObject(m.graft[j], o);\n }\n }\n if (m.prune && m.prune.length) {\n d.prune = [];\n for (var j = 0; j < m.prune.length; ++j) {\n d.prune[j] = $root.RPC.ControlPrune.toObject(m.prune[j], o);\n }\n }\n return d;\n };\n \n /**\n * Converts this ControlMessage to JSON.\n * @function toJSON\n * @memberof RPC.ControlMessage\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ControlMessage.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return ControlMessage;\n })();\n \n RPC.ControlIHave = (function() {\n \n /**\n * Properties of a ControlIHave.\n * @memberof RPC\n * @interface IControlIHave\n * @property {string|null} [topicID] ControlIHave topicID\n * @property {Array.<Uint8Array>|null} [messageIDs] ControlIHave messageIDs\n */\n \n /**\n * Constructs a new ControlIHave.\n * @memberof RPC\n * @classdesc Represents a ControlIHave.\n * @implements IControlIHave\n * @constructor\n * @param {RPC.IControlIHave=} [p] Properties to set\n */\n function ControlIHave(p) {\n this.messageIDs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * ControlIHave topicID.\n * @member {string|null|undefined} topicID\n * @memberof RPC.ControlIHave\n * @instance\n */\n ControlIHave.prototype.topicID = null;\n \n /**\n * ControlIHave messageIDs.\n * @member {Array.<Uint8Array>} messageIDs\n * @memberof RPC.ControlIHave\n * @instance\n */\n ControlIHave.prototype.messageIDs = $util.emptyArray;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * ControlIHave _topicID.\n * @member {\"topicID\"|undefined} _topicID\n * @memberof RPC.ControlIHave\n * @instance\n */\n Object.defineProperty(ControlIHave.prototype, \"_topicID\", {\n get: $util.oneOfGetter($oneOfFields = [\"topicID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified ControlIHave message. Does not implicitly {@link RPC.ControlIHave.verify|verify} messages.\n * @function encode\n * @memberof RPC.ControlIHave\n * @static\n * @param {RPC.IControlIHave} m ControlIHave message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ControlIHave.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.topicID != null && Object.hasOwnProperty.call(m, \"topicID\"))\n w.uint32(10).string(m.topicID);\n if (m.messageIDs != null && m.messageIDs.length) {\n for (var i = 0; i < m.messageIDs.length; ++i)\n w.uint32(18).bytes(m.messageIDs[i]);\n }\n return w;\n };\n \n /**\n * Decodes a ControlIHave message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.ControlIHave\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.ControlIHave} ControlIHave\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ControlIHave.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.ControlIHave();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.topicID = r.string();\n break;\n case 2:\n if (!(m.messageIDs && m.messageIDs.length))\n m.messageIDs = [];\n m.messageIDs.push(r.bytes());\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a ControlIHave message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.ControlIHave\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.ControlIHave} ControlIHave\n */\n ControlIHave.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.ControlIHave)\n return d;\n var m = new $root.RPC.ControlIHave();\n if (d.topicID != null) {\n m.topicID = String(d.topicID);\n }\n if (d.messageIDs) {\n if (!Array.isArray(d.messageIDs))\n throw TypeError(\".RPC.ControlIHave.messageIDs: array expected\");\n m.messageIDs = [];\n for (var i = 0; i < d.messageIDs.length; ++i) {\n if (typeof d.messageIDs[i] === \"string\")\n $util.base64.decode(d.messageIDs[i], m.messageIDs[i] = $util.newBuffer($util.base64.length(d.messageIDs[i])), 0);\n else if (d.messageIDs[i].length)\n m.messageIDs[i] = d.messageIDs[i];\n }\n }\n return m;\n };\n \n /**\n * Creates a plain object from a ControlIHave message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.ControlIHave\n * @static\n * @param {RPC.ControlIHave} m ControlIHave\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ControlIHave.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.messageIDs = [];\n }\n if (m.topicID != null && m.hasOwnProperty(\"topicID\")) {\n d.topicID = m.topicID;\n if (o.oneofs)\n d._topicID = \"topicID\";\n }\n if (m.messageIDs && m.messageIDs.length) {\n d.messageIDs = [];\n for (var j = 0; j < m.messageIDs.length; ++j) {\n d.messageIDs[j] = o.bytes === String ? $util.base64.encode(m.messageIDs[j], 0, m.messageIDs[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.messageIDs[j]) : m.messageIDs[j];\n }\n }\n return d;\n };\n \n /**\n * Converts this ControlIHave to JSON.\n * @function toJSON\n * @memberof RPC.ControlIHave\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ControlIHave.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return ControlIHave;\n })();\n \n RPC.ControlIWant = (function() {\n \n /**\n * Properties of a ControlIWant.\n * @memberof RPC\n * @interface IControlIWant\n * @property {Array.<Uint8Array>|null} [messageIDs] ControlIWant messageIDs\n */\n \n /**\n * Constructs a new ControlIWant.\n * @memberof RPC\n * @classdesc Represents a ControlIWant.\n * @implements IControlIWant\n * @constructor\n * @param {RPC.IControlIWant=} [p] Properties to set\n */\n function ControlIWant(p) {\n this.messageIDs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * ControlIWant messageIDs.\n * @member {Array.<Uint8Array>} messageIDs\n * @memberof RPC.ControlIWant\n * @instance\n */\n ControlIWant.prototype.messageIDs = $util.emptyArray;\n \n /**\n * Encodes the specified ControlIWant message. Does not implicitly {@link RPC.ControlIWant.verify|verify} messages.\n * @function encode\n * @memberof RPC.ControlIWant\n * @static\n * @param {RPC.IControlIWant} m ControlIWant message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ControlIWant.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.messageIDs != null && m.messageIDs.length) {\n for (var i = 0; i < m.messageIDs.length; ++i)\n w.uint32(10).bytes(m.messageIDs[i]);\n }\n return w;\n };\n \n /**\n * Decodes a ControlIWant message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.ControlIWant\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.ControlIWant} ControlIWant\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ControlIWant.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.ControlIWant();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.messageIDs && m.messageIDs.length))\n m.messageIDs = [];\n m.messageIDs.push(r.bytes());\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a ControlIWant message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.ControlIWant\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.ControlIWant} ControlIWant\n */\n ControlIWant.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.ControlIWant)\n return d;\n var m = new $root.RPC.ControlIWant();\n if (d.messageIDs) {\n if (!Array.isArray(d.messageIDs))\n throw TypeError(\".RPC.ControlIWant.messageIDs: array expected\");\n m.messageIDs = [];\n for (var i = 0; i < d.messageIDs.length; ++i) {\n if (typeof d.messageIDs[i] === \"string\")\n $util.base64.decode(d.messageIDs[i], m.messageIDs[i] = $util.newBuffer($util.base64.length(d.messageIDs[i])), 0);\n else if (d.messageIDs[i].length)\n m.messageIDs[i] = d.messageIDs[i];\n }\n }\n return m;\n };\n \n /**\n * Creates a plain object from a ControlIWant message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.ControlIWant\n * @static\n * @param {RPC.ControlIWant} m ControlIWant\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ControlIWant.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.messageIDs = [];\n }\n if (m.messageIDs && m.messageIDs.length) {\n d.messageIDs = [];\n for (var j = 0; j < m.messageIDs.length; ++j) {\n d.messageIDs[j] = o.bytes === String ? $util.base64.encode(m.messageIDs[j], 0, m.messageIDs[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.messageIDs[j]) : m.messageIDs[j];\n }\n }\n return d;\n };\n \n /**\n * Converts this ControlIWant to JSON.\n * @function toJSON\n * @memberof RPC.ControlIWant\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ControlIWant.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return ControlIWant;\n })();\n \n RPC.ControlGraft = (function() {\n \n /**\n * Properties of a ControlGraft.\n * @memberof RPC\n * @interface IControlGraft\n * @property {string|null} [topicID] ControlGraft topicID\n */\n \n /**\n * Constructs a new ControlGraft.\n * @memberof RPC\n * @classdesc Represents a ControlGraft.\n * @implements IControlGraft\n * @constructor\n * @param {RPC.IControlGraft=} [p] Properties to set\n */\n function ControlGraft(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * ControlGraft topicID.\n * @member {string|null|undefined} topicID\n * @memberof RPC.ControlGraft\n * @instance\n */\n ControlGraft.prototype.topicID = null;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * ControlGraft _topicID.\n * @member {\"topicID\"|undefined} _topicID\n * @memberof RPC.ControlGraft\n * @instance\n */\n Object.defineProperty(ControlGraft.prototype, \"_topicID\", {\n get: $util.oneOfGetter($oneOfFields = [\"topicID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified ControlGraft message. Does not implicitly {@link RPC.ControlGraft.verify|verify} messages.\n * @function encode\n * @memberof RPC.ControlGraft\n * @static\n * @param {RPC.IControlGraft} m ControlGraft message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ControlGraft.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.topicID != null && Object.hasOwnProperty.call(m, \"topicID\"))\n w.uint32(10).string(m.topicID);\n return w;\n };\n \n /**\n * Decodes a ControlGraft message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.ControlGraft\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.ControlGraft} ControlGraft\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ControlGraft.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.ControlGraft();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.topicID = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a ControlGraft message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.ControlGraft\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.ControlGraft} ControlGraft\n */\n ControlGraft.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.ControlGraft)\n return d;\n var m = new $root.RPC.ControlGraft();\n if (d.topicID != null) {\n m.topicID = String(d.topicID);\n }\n return m;\n };\n \n /**\n * Creates a plain object from a ControlGraft message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.ControlGraft\n * @static\n * @param {RPC.ControlGraft} m ControlGraft\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ControlGraft.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (m.topicID != null && m.hasOwnProperty(\"topicID\")) {\n d.topicID = m.topicID;\n if (o.oneofs)\n d._topicID = \"topicID\";\n }\n return d;\n };\n \n /**\n * Converts this ControlGraft to JSON.\n * @function toJSON\n * @memberof RPC.ControlGraft\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ControlGraft.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return ControlGraft;\n })();\n \n RPC.ControlPrune = (function() {\n \n /**\n * Properties of a ControlPrune.\n * @memberof RPC\n * @interface IControlPrune\n * @property {string|null} [topicID] ControlPrune topicID\n * @property {Array.<RPC.IPeerInfo>|null} [peers] ControlPrune peers\n * @property {number|null} [backoff] ControlPrune backoff\n */\n \n /**\n * Constructs a new ControlPrune.\n * @memberof RPC\n * @classdesc Represents a ControlPrune.\n * @implements IControlPrune\n * @constructor\n * @param {RPC.IControlPrune=} [p] Properties to set\n */\n function ControlPrune(p) {\n this.peers = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * ControlPrune topicID.\n * @member {string|null|undefined} topicID\n * @memberof RPC.ControlPrune\n * @instance\n */\n ControlPrune.prototype.topicID = null;\n \n /**\n * ControlPrune peers.\n * @member {Array.<RPC.IPeerInfo>} peers\n * @memberof RPC.ControlPrune\n * @instance\n */\n ControlPrune.prototype.peers = $util.emptyArray;\n \n /**\n * ControlPrune backoff.\n * @member {number|null|undefined} backoff\n * @memberof RPC.ControlPrune\n * @instance\n */\n ControlPrune.prototype.backoff = null;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * ControlPrune _topicID.\n * @member {\"topicID\"|undefined} _topicID\n * @memberof RPC.ControlPrune\n * @instance\n */\n Object.defineProperty(ControlPrune.prototype, \"_topicID\", {\n get: $util.oneOfGetter($oneOfFields = [\"topicID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * ControlPrune _backoff.\n * @member {\"backoff\"|undefined} _backoff\n * @memberof RPC.ControlPrune\n * @instance\n */\n Object.defineProperty(ControlPrune.prototype, \"_backoff\", {\n get: $util.oneOfGetter($oneOfFields = [\"backoff\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified ControlPrune message. Does not implicitly {@link RPC.ControlPrune.verify|verify} messages.\n * @function encode\n * @memberof RPC.ControlPrune\n * @static\n * @param {RPC.IControlPrune} m ControlPrune message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n ControlPrune.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.topicID != null && Object.hasOwnProperty.call(m, \"topicID\"))\n w.uint32(10).string(m.topicID);\n if (m.peers != null && m.peers.length) {\n for (var i = 0; i < m.peers.length; ++i)\n $root.RPC.PeerInfo.encode(m.peers[i], w.uint32(18).fork()).ldelim();\n }\n if (m.backoff != null && Object.hasOwnProperty.call(m, \"backoff\"))\n w.uint32(24).uint64(m.backoff);\n return w;\n };\n \n /**\n * Decodes a ControlPrune message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.ControlPrune\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.ControlPrune} ControlPrune\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n ControlPrune.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.ControlPrune();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.topicID = r.string();\n break;\n case 2:\n if (!(m.peers && m.peers.length))\n m.peers = [];\n m.peers.push($root.RPC.PeerInfo.decode(r, r.uint32()));\n break;\n case 3:\n m.backoff = r.uint64();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a ControlPrune message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.ControlPrune\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.ControlPrune} ControlPrune\n */\n ControlPrune.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.ControlPrune)\n return d;\n var m = new $root.RPC.ControlPrune();\n if (d.topicID != null) {\n m.topicID = String(d.topicID);\n }\n if (d.peers) {\n if (!Array.isArray(d.peers))\n throw TypeError(\".RPC.ControlPrune.peers: array expected\");\n m.peers = [];\n for (var i = 0; i < d.peers.length; ++i) {\n if (typeof d.peers[i] !== \"object\")\n throw TypeError(\".RPC.ControlPrune.peers: object expected\");\n m.peers[i] = $root.RPC.PeerInfo.fromObject(d.peers[i]);\n }\n }\n if (d.backoff != null) {\n if ($util.Long)\n (m.backoff = $util.Long.fromValue(d.backoff)).unsigned = true;\n else if (typeof d.backoff === \"string\")\n m.backoff = parseInt(d.backoff, 10);\n else if (typeof d.backoff === \"number\")\n m.backoff = d.backoff;\n else if (typeof d.backoff === \"object\")\n m.backoff = new $util.LongBits(d.backoff.low >>> 0, d.backoff.high >>> 0).toNumber(true);\n }\n return m;\n };\n \n /**\n * Creates a plain object from a ControlPrune message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.ControlPrune\n * @static\n * @param {RPC.ControlPrune} m ControlPrune\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n ControlPrune.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.peers = [];\n }\n if (m.topicID != null && m.hasOwnProperty(\"topicID\")) {\n d.topicID = m.topicID;\n if (o.oneofs)\n d._topicID = \"topicID\";\n }\n if (m.peers && m.peers.length) {\n d.peers = [];\n for (var j = 0; j < m.peers.length; ++j) {\n d.peers[j] = $root.RPC.PeerInfo.toObject(m.peers[j], o);\n }\n }\n if (m.backoff != null && m.hasOwnProperty(\"backoff\")) {\n if (typeof m.backoff === \"number\")\n d.backoff = o.longs === String ? String(m.backoff) : m.backoff;\n else\n d.backoff = o.longs === String ? $util.Long.prototype.toString.call(m.backoff) : o.longs === Number ? new $util.LongBits(m.backoff.low >>> 0, m.backoff.high >>> 0).toNumber(true) : m.backoff;\n if (o.oneofs)\n d._backoff = \"backoff\";\n }\n return d;\n };\n \n /**\n * Converts this ControlPrune to JSON.\n * @function toJSON\n * @memberof RPC.ControlPrune\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n ControlPrune.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return ControlPrune;\n })();\n \n RPC.PeerInfo = (function() {\n \n /**\n * Properties of a PeerInfo.\n * @memberof RPC\n * @interface IPeerInfo\n * @property {Uint8Array|null} [peerID] PeerInfo peerID\n * @property {Uint8Array|null} [signedPeerRecord] PeerInfo signedPeerRecord\n */\n \n /**\n * Constructs a new PeerInfo.\n * @memberof RPC\n * @classdesc Represents a PeerInfo.\n * @implements IPeerInfo\n * @constructor\n * @param {RPC.IPeerInfo=} [p] Properties to set\n */\n function PeerInfo(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n \n /**\n * PeerInfo peerID.\n * @member {Uint8Array|null|undefined} peerID\n * @memberof RPC.PeerInfo\n * @instance\n */\n PeerInfo.prototype.peerID = null;\n \n /**\n * PeerInfo signedPeerRecord.\n * @member {Uint8Array|null|undefined} signedPeerRecord\n * @memberof RPC.PeerInfo\n * @instance\n */\n PeerInfo.prototype.signedPeerRecord = null;\n \n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n \n /**\n * PeerInfo _peerID.\n * @member {\"peerID\"|undefined} _peerID\n * @memberof RPC.PeerInfo\n * @instance\n */\n Object.defineProperty(PeerInfo.prototype, \"_peerID\", {\n get: $util.oneOfGetter($oneOfFields = [\"peerID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * PeerInfo _signedPeerRecord.\n * @member {\"signedPeerRecord\"|undefined} _signedPeerRecord\n * @memberof RPC.PeerInfo\n * @instance\n */\n Object.defineProperty(PeerInfo.prototype, \"_signedPeerRecord\", {\n get: $util.oneOfGetter($oneOfFields = [\"signedPeerRecord\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n \n /**\n * Encodes the specified PeerInfo message. Does not implicitly {@link RPC.PeerInfo.verify|verify} messages.\n * @function encode\n * @memberof RPC.PeerInfo\n * @static\n * @param {RPC.IPeerInfo} m PeerInfo message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PeerInfo.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.peerID != null && Object.hasOwnProperty.call(m, \"peerID\"))\n w.uint32(10).bytes(m.peerID);\n if (m.signedPeerRecord != null && Object.hasOwnProperty.call(m, \"signedPeerRecord\"))\n w.uint32(18).bytes(m.signedPeerRecord);\n return w;\n };\n \n /**\n * Decodes a PeerInfo message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.PeerInfo\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.PeerInfo} PeerInfo\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PeerInfo.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.PeerInfo();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.peerID = r.bytes();\n break;\n case 2:\n m.signedPeerRecord = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n \n /**\n * Creates a PeerInfo message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.PeerInfo\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.PeerInfo} PeerInfo\n */\n PeerInfo.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.PeerInfo)\n return d;\n var m = new $root.RPC.PeerInfo();\n if (d.peerID != null) {\n if (typeof d.peerID === \"string\")\n $util.base64.decode(d.peerID, m.peerID = $util.newBuffer($util.base64.length(d.peerID)), 0);\n else if (d.peerID.length)\n m.peerID = d.peerID;\n }\n if (d.signedPeerRecord != null) {\n if (typeof d.signedPeerRecord === \"string\")\n $util.base64.decode(d.signedPeerRecord, m.signedPeerRecord = $util.newBuffer($util.base64.length(d.signedPeerRecord)), 0);\n else if (d.signedPeerRecord.length)\n m.signedPeerRecord = d.signedPeerRecord;\n }\n return m;\n };\n \n /**\n * Creates a plain object from a PeerInfo message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.PeerInfo\n * @static\n * @param {RPC.PeerInfo} m PeerInfo\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n PeerInfo.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (m.peerID != null && m.hasOwnProperty(\"peerID\")) {\n d.peerID = o.bytes === String ? $util.base64.encode(m.peerID, 0, m.peerID.length) : o.bytes === Array ? Array.prototype.slice.call(m.peerID) : m.peerID;\n if (o.oneofs)\n d._peerID = \"peerID\";\n }\n if (m.signedPeerRecord != null && m.hasOwnProperty(\"signedPeerRecord\")) {\n d.signedPeerRecord = o.bytes === String ? $util.base64.encode(m.signedPeerRecord, 0, m.signedPeerRecord.length) : o.bytes === Array ? Array.prototype.slice.call(m.signedPeerRecord) : m.signedPeerRecord;\n if (o.oneofs)\n d._signedPeerRecord = \"signedPeerRecord\";\n }\n return d;\n };\n \n /**\n * Converts this PeerInfo to JSON.\n * @function toJSON\n * @memberof RPC.PeerInfo\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n PeerInfo.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n \n return PeerInfo;\n })();\n \n return RPC;\n })();\n\n return $root;\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.computeScore = void 0;\nfunction computeScore(peer, pstats, params, peerIPs) {\n let score = 0;\n // topic stores\n Object.entries(pstats.topics).forEach(([topic, tstats]) => {\n // the topic parameters\n const topicParams = params.topics[topic];\n if (!topicParams) {\n // we are not scoring this topic\n return;\n }\n let topicScore = 0;\n // P1: time in Mesh\n if (tstats.inMesh) {\n let p1 = tstats.meshTime / topicParams.timeInMeshQuantum;\n if (p1 > topicParams.timeInMeshCap) {\n p1 = topicParams.timeInMeshCap;\n }\n topicScore += p1 * topicParams.timeInMeshWeight;\n }\n // P2: first message deliveries\n const p2 = tstats.firstMessageDeliveries;\n topicScore += p2 * topicParams.firstMessageDeliveriesWeight;\n // P3: mesh message deliveries\n if (tstats.meshMessageDeliveriesActive) {\n if (tstats.meshMessageDeliveries < topicParams.meshMessageDeliveriesThreshold) {\n const deficit = topicParams.meshMessageDeliveriesThreshold - tstats.meshMessageDeliveries;\n const p3 = deficit * deficit;\n topicScore += p3 * topicParams.meshMessageDeliveriesWeight;\n }\n }\n // P3b:\n // NOTE: the weight of P3b is negative (validated in validateTopicScoreParams) so this detracts\n const p3b = tstats.meshFailurePenalty;\n topicScore += p3b * topicParams.meshFailurePenaltyWeight;\n // P4: invalid messages\n // NOTE: the weight of P4 is negative (validated in validateTopicScoreParams) so this detracts\n const p4 = tstats.invalidMessageDeliveries * tstats.invalidMessageDeliveries;\n topicScore += p4 * topicParams.invalidMessageDeliveriesWeight;\n // update score, mixing with topic weight\n score += topicScore * topicParams.topicWeight;\n });\n // apply the topic score cap, if any\n if (params.topicScoreCap > 0 && score > params.topicScoreCap) {\n score = params.topicScoreCap;\n }\n // P5: application-specific score\n const p5 = params.appSpecificScore(peer);\n score += p5 * params.appSpecificWeight;\n // P6: IP colocation factor\n pstats.ips.forEach(ip => {\n if (params.IPColocationFactorWhitelist.has(ip)) {\n return;\n }\n // P6 has a cliff (IPColocationFactorThreshold)\n // It's only applied if at least that many peers are connected to us from that source IP addr.\n // It is quadratic, and the weight is negative (validated in validatePeerScoreParams)\n const peersInIP = peerIPs.get(ip);\n const numPeersInIP = peersInIP ? peersInIP.size : 0;\n if (numPeersInIP > params.IPColocationFactorThreshold) {\n const surplus = numPeersInIP - params.IPColocationFactorThreshold;\n const p6 = surplus * surplus;\n score += p6 * params.IPColocationFactorWeight;\n }\n });\n // P7: behavioural pattern penalty\n const p7 = pstats.behaviourPenalty * pstats.behaviourPenalty;\n score += p7 * params.behaviourPenaltyWeight;\n return score;\n}\nexports.computeScore = computeScore;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERR_INVALID_PEER_SCORE_THRESHOLDS = exports.ERR_INVALID_PEER_SCORE_PARAMS = void 0;\nexports.ERR_INVALID_PEER_SCORE_PARAMS = 'ERR_INVALID_PEER_SCORE_PARAMS';\nexports.ERR_INVALID_PEER_SCORE_THRESHOLDS = 'ERR_INVALID_PEER_SCORE_THRESHOLDS';\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./peer-score-params\"), exports);\n__exportStar(require(\"./peer-score-thresholds\"), exports);\n__exportStar(require(\"./peer-score\"), exports);\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MessageDeliveries = exports.DeliveryRecordStatus = void 0;\nconst constants_1 = require(\"../constants\");\nconst denque_1 = __importDefault(require(\"denque\"));\nvar DeliveryRecordStatus;\n(function (DeliveryRecordStatus) {\n /**\n * we don't know (yet) if the message is valid\n */\n DeliveryRecordStatus[DeliveryRecordStatus[\"unknown\"] = 0] = \"unknown\";\n /**\n * we know the message is valid\n */\n DeliveryRecordStatus[DeliveryRecordStatus[\"valid\"] = 1] = \"valid\";\n /**\n * we know the message is invalid\n */\n DeliveryRecordStatus[DeliveryRecordStatus[\"invalid\"] = 2] = \"invalid\";\n /**\n * we were instructed by the validator to ignore the message\n */\n DeliveryRecordStatus[DeliveryRecordStatus[\"ignored\"] = 3] = \"ignored\";\n})(DeliveryRecordStatus = exports.DeliveryRecordStatus || (exports.DeliveryRecordStatus = {}));\n/**\n * Map of canonical message ID to DeliveryRecord\n *\n * Maintains an internal queue for efficient gc of old messages\n */\nclass MessageDeliveries {\n constructor() {\n this.records = new Map();\n this.queue = new denque_1.default();\n }\n ensureRecord(msgIdStr) {\n let drec = this.records.get(msgIdStr);\n if (drec) {\n return drec;\n }\n // record doesn't exist yet\n // create record\n drec = {\n status: DeliveryRecordStatus.unknown,\n firstSeen: Date.now(),\n validated: 0,\n peers: new Set()\n };\n this.records.set(msgIdStr, drec);\n // and add msgId to the queue\n const entry = {\n msgId: msgIdStr,\n expire: Date.now() + constants_1.TimeCacheDuration\n };\n this.queue.push(entry);\n return drec;\n }\n gc() {\n const now = Date.now();\n // queue is sorted by expiry time\n // remove expired messages, remove from queue until first un-expired message found\n let head = this.queue.peekFront();\n while (head && head.expire < now) {\n this.records.delete(head.msgId);\n this.queue.shift();\n head = this.queue.peekFront();\n }\n }\n clear() {\n this.records.clear();\n this.queue.clear();\n }\n}\nexports.MessageDeliveries = MessageDeliveries;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validateTopicScoreParams = exports.validatePeerScoreParams = exports.createTopicScoreParams = exports.createPeerScoreParams = exports.defaultTopicScoreParams = exports.defaultPeerScoreParams = void 0;\nconst constants_1 = require(\"./constants\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst errcode = require(\"err-code\");\nexports.defaultPeerScoreParams = {\n topics: {},\n topicScoreCap: 10,\n appSpecificScore: () => 0,\n appSpecificWeight: 10,\n IPColocationFactorWeight: -5,\n IPColocationFactorThreshold: 10,\n IPColocationFactorWhitelist: new Set(),\n behaviourPenaltyWeight: -10,\n behaviourPenaltyDecay: 0.2,\n decayInterval: 1000,\n decayToZero: 0.1,\n retainScore: 3600 * 1000\n};\nexports.defaultTopicScoreParams = {\n topicWeight: 0.5,\n timeInMeshWeight: 1,\n timeInMeshQuantum: 1,\n timeInMeshCap: 3600,\n firstMessageDeliveriesWeight: 1,\n firstMessageDeliveriesDecay: 0.5,\n firstMessageDeliveriesCap: 2000,\n meshMessageDeliveriesWeight: -1,\n meshMessageDeliveriesDecay: 0.5,\n meshMessageDeliveriesCap: 100,\n meshMessageDeliveriesThreshold: 20,\n meshMessageDeliveriesWindow: 10,\n meshMessageDeliveriesActivation: 5000,\n meshFailurePenaltyWeight: -1,\n meshFailurePenaltyDecay: 0.5,\n invalidMessageDeliveriesWeight: -1,\n invalidMessageDeliveriesDecay: 0.3\n};\nfunction createPeerScoreParams(p = {}) {\n return Object.assign(Object.assign(Object.assign({}, exports.defaultPeerScoreParams), p), { topics: p.topics\n ? Object.entries(p.topics)\n .reduce((topics, [topic, topicScoreParams]) => {\n topics[topic] = createTopicScoreParams(topicScoreParams);\n return topics;\n }, {})\n : {} });\n}\nexports.createPeerScoreParams = createPeerScoreParams;\nfunction createTopicScoreParams(p = {}) {\n return Object.assign(Object.assign({}, exports.defaultTopicScoreParams), p);\n}\nexports.createTopicScoreParams = createTopicScoreParams;\n// peer score parameter validation\nfunction validatePeerScoreParams(p) {\n for (const [topic, params] of Object.entries(p.topics)) {\n try {\n validateTopicScoreParams(params);\n }\n catch (e) {\n throw errcode(new Error(`invalid score parameters for topic ${topic}: ${e.message}`), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n }\n // check that the topic score is 0 or something positive\n if (p.topicScoreCap < 0) {\n throw errcode(new Error('invalid topic score cap; must be positive (or 0 for no cap)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check that we have an app specific score; the weight can be anything (but expected positive)\n if (p.appSpecificScore === null || p.appSpecificScore === undefined) {\n throw errcode(new Error('missing application specific score function'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the IP colocation factor\n if (p.IPColocationFactorWeight > 0) {\n throw errcode(new Error('invalid IPColocationFactorWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.IPColocationFactorWeight !== 0 && p.IPColocationFactorThreshold < 1) {\n throw errcode(new Error('invalid IPColocationFactorThreshold; must be at least 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the behaviour penalty\n if (p.behaviourPenaltyWeight > 0) {\n throw errcode(new Error('invalid BehaviourPenaltyWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.behaviourPenaltyWeight !== 0 && (p.behaviourPenaltyDecay <= 0 || p.behaviourPenaltyDecay >= 1)) {\n throw errcode(new Error('invalid BehaviourPenaltyDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check the decay parameters\n if (p.decayInterval < 1000) {\n throw errcode(new Error('invalid DecayInterval; must be at least 1s'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.decayToZero <= 0 || p.decayToZero >= 1) {\n throw errcode(new Error('invalid DecayToZero; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // no need to check the score retention; a value of 0 means that we don't retain scores\n}\nexports.validatePeerScoreParams = validatePeerScoreParams;\nfunction validateTopicScoreParams(p) {\n // make sure we have a sane topic weight\n if (p.topicWeight < 0) {\n throw errcode(new Error('invalid topic weight; must be >= 0'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P1\n if (p.timeInMeshQuantum === 0) {\n throw errcode(new Error('invalid TimeInMeshQuantum; must be non zero'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight < 0) {\n throw errcode(new Error('invalid TimeInMeshWeight; must be positive (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight !== 0 && p.timeInMeshQuantum <= 0) {\n throw errcode(new Error('invalid TimeInMeshQuantum; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.timeInMeshWeight !== 0 && p.timeInMeshCap <= 0) {\n throw errcode(new Error('invalid TimeInMeshCap; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P2\n if (p.firstMessageDeliveriesWeight < 0) {\n throw errcode(new Error('invallid FirstMessageDeliveriesWeight; must be positive (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.firstMessageDeliveriesWeight !== 0 && (p.firstMessageDeliveriesDecay <= 0 || p.firstMessageDeliveriesDecay >= 1)) {\n throw errcode(new Error('invalid FirstMessageDeliveriesDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.firstMessageDeliveriesWeight !== 0 && p.firstMessageDeliveriesCap <= 0) {\n throw errcode(new Error('invalid FirstMessageDeliveriesCap; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P3\n if (p.meshMessageDeliveriesWeight > 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && (p.meshMessageDeliveriesDecay <= 0 || p.meshMessageDeliveriesDecay >= 1)) {\n throw errcode(new Error('invalid MeshMessageDeliveriesDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesCap <= 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesCap; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesThreshold <= 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesThreshold; must be positive'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWindow < 0) {\n throw errcode(new Error('invalid MeshMessageDeliveriesWindow; must be non-negative'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshMessageDeliveriesWeight !== 0 && p.meshMessageDeliveriesActivation < 1000) {\n throw errcode(new Error('invalid MeshMessageDeliveriesActivation; must be at least 1s'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P3b\n if (p.meshFailurePenaltyWeight > 0) {\n throw errcode(new Error('invalid MeshFailurePenaltyWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.meshFailurePenaltyWeight !== 0 && (p.meshFailurePenaltyDecay <= 0 || p.meshFailurePenaltyDecay >= 1)) {\n throw errcode(new Error('invalid MeshFailurePenaltyDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n // check P4\n if (p.invalidMessageDeliveriesWeight > 0) {\n throw errcode(new Error('invalid InvalidMessageDeliveriesWeight; must be negative (or 0 to disable)'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n if (p.invalidMessageDeliveriesDecay <= 0 || p.invalidMessageDeliveriesDecay >= 1) {\n throw errcode(new Error('invalid InvalidMessageDeliveriesDecay; must be between 0 and 1'), constants_1.ERR_INVALID_PEER_SCORE_PARAMS);\n }\n}\nexports.validateTopicScoreParams = validateTopicScoreParams;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.validatePeerScoreThresholds = exports.createPeerScoreThresholds = exports.defaultPeerScoreThresholds = void 0;\nconst constants_1 = require(\"./constants\");\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst errcode = require(\"err-code\");\nexports.defaultPeerScoreThresholds = {\n gossipThreshold: -10,\n publishThreshold: -50,\n graylistThreshold: -80,\n acceptPXThreshold: 10,\n opportunisticGraftThreshold: 20\n};\nfunction createPeerScoreThresholds(p = {}) {\n return Object.assign(Object.assign({}, exports.defaultPeerScoreThresholds), p);\n}\nexports.createPeerScoreThresholds = createPeerScoreThresholds;\nfunction validatePeerScoreThresholds(p) {\n if (p.gossipThreshold > 0) {\n throw errcode(new Error('invalid gossip threshold; it must be <= 0'), constants_1.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.publishThreshold > 0 || p.publishThreshold > p.gossipThreshold) {\n throw errcode(new Error('invalid publish threshold; it must be <= 0 and <= gossip threshold'), constants_1.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.graylistThreshold > 0 || p.graylistThreshold > p.publishThreshold) {\n throw errcode(new Error('invalid graylist threshold; it must be <= 0 and <= publish threshold'), constants_1.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.acceptPXThreshold < 0) {\n throw errcode(new Error('invalid accept PX threshold; it must be >= 0'), constants_1.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n if (p.opportunisticGraftThreshold < 0) {\n throw errcode(new Error('invalid opportunistic grafting threshold; it must be >= 0'), constants_1.ERR_INVALID_PEER_SCORE_THRESHOLDS);\n }\n}\nexports.validatePeerScoreThresholds = validatePeerScoreThresholds;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PeerScore = void 0;\nconst peer_score_params_1 = require(\"./peer-score-params\");\nconst peer_stats_1 = require(\"./peer-stats\");\nconst compute_score_1 = require(\"./compute-score\");\nconst message_deliveries_1 = require(\"./message-deliveries\");\nconst constants_1 = require(\"../constants\");\nconst peer_id_1 = __importDefault(require(\"peer-id\"));\nconst debug = require(\"debug\");\nconst pubsubErrors = require(\"libp2p-interfaces/src/pubsub/errors\");\nconst { ERR_INVALID_SIGNATURE, ERR_MISSING_SIGNATURE } = pubsubErrors.codes;\nconst log = debug('libp2p:gossipsub:score');\nclass PeerScore {\n constructor(params, connectionManager) {\n peer_score_params_1.validatePeerScoreParams(params);\n this.params = params;\n this._connectionManager = connectionManager;\n this.peerStats = new Map();\n this.peerIPs = new Map();\n this.scoreCache = new Map();\n this.deliveryRecords = new message_deliveries_1.MessageDeliveries();\n }\n /**\n * Start PeerScore instance\n * @returns {void}\n */\n start() {\n if (this._backgroundInterval) {\n log('Peer score already running');\n return;\n }\n this._backgroundInterval = setInterval(() => this.background(), this.params.decayInterval);\n log('started');\n }\n /**\n * Stop PeerScore instance\n * @returns {void}\n */\n stop() {\n if (!this._backgroundInterval) {\n log('Peer score already stopped');\n return;\n }\n clearInterval(this._backgroundInterval);\n delete this._backgroundInterval;\n this.peerIPs.clear();\n this.peerStats.clear();\n this.deliveryRecords.clear();\n log('stopped');\n }\n /**\n * Periodic maintenance\n * @returns {void}\n */\n background() {\n this._refreshScores();\n this._updateIPs();\n this.deliveryRecords.gc();\n }\n /**\n * Decays scores, and purges score records for disconnected peers once their expiry has elapsed.\n * @returns {void}\n */\n _refreshScores() {\n const now = Date.now();\n const decayToZero = this.params.decayToZero;\n this.peerStats.forEach((pstats, id) => {\n if (!pstats.connected) {\n // has the retention perious expired?\n if (now > pstats.expire) {\n // yes, throw it away (but clean up the IP tracking first)\n this._removeIPs(id, pstats.ips);\n this.peerStats.delete(id);\n }\n // we don't decay retained scores, as the peer is not active.\n // this way the peer cannot reset a negative score by simply disconnecting and reconnecting,\n // unless the retention period has ellapsed.\n // similarly, a well behaved peer does not lose its score by getting disconnected.\n return;\n }\n Object.entries(pstats.topics).forEach(([topic, tstats]) => {\n const tparams = this.params.topics[topic];\n if (!tparams) {\n // we are not scoring this topic\n // should be unreachable, we only add scored topics to pstats\n return;\n }\n // decay counters\n tstats.firstMessageDeliveries *= tparams.firstMessageDeliveriesDecay;\n if (tstats.firstMessageDeliveries < decayToZero) {\n tstats.firstMessageDeliveries = 0;\n }\n tstats.meshMessageDeliveries *= tparams.meshMessageDeliveriesDecay;\n if (tstats.meshMessageDeliveries < decayToZero) {\n tstats.meshMessageDeliveries = 0;\n }\n tstats.meshFailurePenalty *= tparams.meshFailurePenaltyDecay;\n if (tstats.meshFailurePenalty < decayToZero) {\n tstats.meshFailurePenalty = 0;\n }\n tstats.invalidMessageDeliveries *= tparams.invalidMessageDeliveriesDecay;\n if (tstats.invalidMessageDeliveries < decayToZero) {\n tstats.invalidMessageDeliveries = 0;\n }\n // update mesh time and activate mesh message delivery parameter if need be\n if (tstats.inMesh) {\n tstats.meshTime = now - tstats.graftTime;\n if (tstats.meshTime > tparams.meshMessageDeliveriesActivation) {\n tstats.meshMessageDeliveriesActive = true;\n }\n }\n });\n // decay P7 counter\n pstats.behaviourPenalty *= this.params.behaviourPenaltyDecay;\n if (pstats.behaviourPenalty < decayToZero) {\n pstats.behaviourPenalty = 0;\n }\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n });\n }\n /**\n * Return the score for a peer\n * @param {string} id\n * @returns {Number}\n */\n score(id) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return 0;\n }\n const now = Date.now();\n let cacheEntry = this.scoreCache.get(id);\n if (cacheEntry === undefined) {\n cacheEntry = { score: null, cacheUntil: 0 };\n this.scoreCache.set(id, cacheEntry);\n }\n const { score, cacheUntil } = cacheEntry;\n if (cacheUntil > now && score !== null)\n return score;\n cacheEntry.score = compute_score_1.computeScore(id, pstats, this.params, this.peerIPs);\n // decayInterval is used to refresh score so we don't want to cache more than that\n cacheEntry.cacheUntil = now + this.params.decayInterval;\n return cacheEntry.score;\n }\n /**\n * Apply a behavioural penalty to a peer\n * @param {string} id\n * @param {Number} penalty\n * @returns {void}\n */\n addPenalty(id, penalty) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n pstats.behaviourPenalty += penalty;\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * @param {string} id\n * @returns {void}\n */\n addPeer(id) {\n // create peer stats (not including topic stats for each topic to be scored)\n // topic stats will be added as needed\n const pstats = peer_stats_1.createPeerStats({\n connected: true\n });\n this.peerStats.set(id, pstats);\n // get + update peer IPs\n const ips = this._getIPs(id);\n this._setIPs(id, ips, pstats.ips);\n pstats.ips = ips;\n }\n /**\n * @param {string} id\n * @returns {void}\n */\n removePeer(id) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n // decide whether to retain the score; this currently only retains non-positive scores\n // to dissuade attacks on the score function.\n if (this.score(id) > 0) {\n this._removeIPs(id, pstats.ips);\n this.peerStats.delete(id);\n return;\n }\n // delete score cache\n this.scoreCache.delete(id);\n // furthermore, when we decide to retain the score, the firstMessageDelivery counters are\n // reset to 0 and mesh delivery penalties applied.\n Object.entries(pstats.topics).forEach(([topic, tstats]) => {\n tstats.firstMessageDeliveries = 0;\n const threshold = this.params.topics[topic].meshMessageDeliveriesThreshold;\n if (tstats.inMesh && tstats.meshMessageDeliveriesActive && tstats.meshMessageDeliveries < threshold) {\n const deficit = threshold - tstats.meshMessageDeliveries;\n tstats.meshFailurePenalty += deficit * deficit;\n }\n tstats.inMesh = false;\n });\n pstats.connected = false;\n pstats.expire = Date.now() + this.params.retainScore;\n }\n /**\n * @param {string} id\n * @param {String} topic\n * @returns {void}\n */\n graft(id, topic) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n const tstats = peer_stats_1.ensureTopicStats(topic, pstats, this.params);\n if (!tstats) {\n return;\n }\n tstats.inMesh = true;\n tstats.graftTime = Date.now();\n tstats.meshTime = 0;\n tstats.meshMessageDeliveriesActive = false;\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * @param {string} id\n * @param {string} topic\n * @returns {void}\n */\n prune(id, topic) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n const tstats = peer_stats_1.ensureTopicStats(topic, pstats, this.params);\n if (!tstats) {\n return;\n }\n // sticky mesh delivery rate failure penalty\n const threshold = this.params.topics[topic].meshMessageDeliveriesThreshold;\n if (tstats.meshMessageDeliveriesActive && tstats.meshMessageDeliveries < threshold) {\n const deficit = threshold - tstats.meshMessageDeliveries;\n tstats.meshFailurePenalty += deficit * deficit;\n }\n tstats.inMesh = false;\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * @param {InMessage} message\n * @returns {Promise<void>}\n */\n validateMessage(msgIdStr) {\n return __awaiter(this, void 0, void 0, function* () {\n this.deliveryRecords.ensureRecord(msgIdStr);\n });\n }\n /**\n * @param {InMessage} msg\n * @returns {Promise<void>}\n */\n deliverMessage(msg, msgIdStr) {\n return __awaiter(this, void 0, void 0, function* () {\n const id = msg.receivedFrom;\n this._markFirstMessageDelivery(id, msg);\n const drec = this.deliveryRecords.ensureRecord(msgIdStr);\n const now = Date.now();\n // defensive check that this is the first delivery trace -- delivery status should be unknown\n if (drec.status !== message_deliveries_1.DeliveryRecordStatus.unknown) {\n log('unexpected delivery: message from %s was first seen %s ago and has delivery status %d', id, now - drec.firstSeen, message_deliveries_1.DeliveryRecordStatus[drec.status]);\n return;\n }\n // mark the message as valid and reward mesh peers that have already forwarded it to us\n drec.status = message_deliveries_1.DeliveryRecordStatus.valid;\n drec.validated = now;\n drec.peers.forEach(p => {\n // this check is to make sure a peer can't send us a message twice and get a double count\n // if it is a first delivery.\n if (p !== id) {\n this._markDuplicateMessageDelivery(p, msg);\n }\n });\n });\n }\n /**\n * @param {InMessage} msg\n * @param {string} reason\n * @returns {Promise<void>}\n */\n rejectMessage(msg, msgIdStr, reason) {\n return __awaiter(this, void 0, void 0, function* () {\n const id = msg.receivedFrom;\n switch (reason) {\n case ERR_MISSING_SIGNATURE:\n case ERR_INVALID_SIGNATURE:\n this._markInvalidMessageDelivery(id, msg);\n return;\n }\n const drec = this.deliveryRecords.ensureRecord(msgIdStr);\n // defensive check that this is the first rejection -- delivery status should be unknown\n if (drec.status !== message_deliveries_1.DeliveryRecordStatus.unknown) {\n log('unexpected rejection: message from %s was first seen %s ago and has delivery status %d', id, Date.now() - drec.firstSeen, message_deliveries_1.DeliveryRecordStatus[drec.status]);\n return;\n }\n switch (reason) {\n case constants_1.ERR_TOPIC_VALIDATOR_IGNORE:\n // we were explicitly instructed by the validator to ignore the message but not penalize the peer\n drec.status = message_deliveries_1.DeliveryRecordStatus.ignored;\n return;\n }\n // mark the message as invalid and penalize peers that have already forwarded it.\n drec.status = message_deliveries_1.DeliveryRecordStatus.invalid;\n this._markInvalidMessageDelivery(id, msg);\n drec.peers.forEach(p => {\n this._markInvalidMessageDelivery(p, msg);\n });\n });\n }\n /**\n * @param {InMessage} msg\n * @returns {Promise<void>}\n */\n duplicateMessage(msg, msgIdStr) {\n return __awaiter(this, void 0, void 0, function* () {\n const id = msg.receivedFrom;\n const drec = this.deliveryRecords.ensureRecord(msgIdStr);\n if (drec.peers.has(id)) {\n // we have already seen this duplicate\n return;\n }\n switch (drec.status) {\n case message_deliveries_1.DeliveryRecordStatus.unknown:\n // the message is being validated; track the peer delivery and wait for\n // the Deliver/Reject/Ignore notification.\n drec.peers.add(id);\n break;\n case message_deliveries_1.DeliveryRecordStatus.valid:\n // mark the peer delivery time to only count a duplicate delivery once.\n drec.peers.add(id);\n this._markDuplicateMessageDelivery(id, msg, drec.validated);\n break;\n case message_deliveries_1.DeliveryRecordStatus.invalid:\n // we no longer track delivery time\n this._markInvalidMessageDelivery(id, msg);\n break;\n }\n });\n }\n /**\n * Increments the \"invalid message deliveries\" counter for all scored topics the message is published in.\n * @param {string} id\n * @param {InMessage} msg\n * @returns {void}\n */\n _markInvalidMessageDelivery(id, msg) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n msg.topicIDs.forEach(topic => {\n const tstats = peer_stats_1.ensureTopicStats(topic, pstats, this.params);\n if (!tstats) {\n return;\n }\n tstats.invalidMessageDeliveries += 1;\n });\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * Increments the \"first message deliveries\" counter for all scored topics the message is published in,\n * as well as the \"mesh message deliveries\" counter, if the peer is in the mesh for the topic.\n * @param {string} id\n * @param {InMessage} msg\n * @returns {void}\n */\n _markFirstMessageDelivery(id, msg) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n msg.topicIDs.forEach(topic => {\n const tstats = peer_stats_1.ensureTopicStats(topic, pstats, this.params);\n if (!tstats) {\n return;\n }\n let cap = this.params.topics[topic].firstMessageDeliveriesCap;\n tstats.firstMessageDeliveries += 1;\n if (tstats.firstMessageDeliveries > cap) {\n tstats.firstMessageDeliveries = cap;\n }\n if (!tstats.inMesh) {\n return;\n }\n cap = this.params.topics[topic].meshMessageDeliveriesCap;\n tstats.meshMessageDeliveries += 1;\n if (tstats.meshMessageDeliveries > cap) {\n tstats.meshMessageDeliveries = cap;\n }\n });\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * Increments the \"mesh message deliveries\" counter for messages we've seen before,\n * as long the message was received within the P3 window.\n * @param {string} id\n * @param {InMessage} msg\n * @param {number} validatedTime\n * @returns {void}\n */\n _markDuplicateMessageDelivery(id, msg, validatedTime = 0) {\n const pstats = this.peerStats.get(id);\n if (!pstats) {\n return;\n }\n const now = validatedTime ? Date.now() : 0;\n msg.topicIDs.forEach(topic => {\n const tstats = peer_stats_1.ensureTopicStats(topic, pstats, this.params);\n if (!tstats) {\n return;\n }\n if (!tstats.inMesh) {\n return;\n }\n const tparams = this.params.topics[topic];\n // check against the mesh delivery window -- if the validated time is passed as 0, then\n // the message was received before we finished validation and thus falls within the mesh\n // delivery window.\n if (validatedTime && now > validatedTime + tparams.meshMessageDeliveriesWindow) {\n return;\n }\n const cap = tparams.meshMessageDeliveriesCap;\n tstats.meshMessageDeliveries += 1;\n if (tstats.meshMessageDeliveries > cap) {\n tstats.meshMessageDeliveries = cap;\n }\n });\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * Gets the current IPs for a peer.\n * @param {string} id\n * @returns {Array<string>}\n */\n _getIPs(id) {\n return this._connectionManager.getAll(peer_id_1.default.createFromB58String(id))\n .map(c => c.remoteAddr.toOptions().host);\n }\n /**\n * Adds tracking for the new IPs in the list, and removes tracking from the obsolete IPs.\n * @param {string} id\n * @param {Array<string>} newIPs\n * @param {Array<string>} oldIPs\n * @returns {void}\n */\n _setIPs(id, newIPs, oldIPs) {\n // add the new IPs to the tracking\n // eslint-disable-next-line no-labels\n addNewIPs: for (const ip of newIPs) {\n // check if it is in the old ips list\n for (const xip of oldIPs) {\n if (ip === xip) {\n // eslint-disable-next-line no-labels\n continue addNewIPs;\n }\n }\n // no, it's a new one -- add it to the tracker\n let peers = this.peerIPs.get(ip);\n if (!peers) {\n peers = new Set();\n this.peerIPs.set(ip, peers);\n }\n peers.add(id);\n }\n // remove the obsolete old IPs from the tracking\n // eslint-disable-next-line no-labels\n removeOldIPs: for (const ip of oldIPs) {\n // check if it is in the new ips list\n for (const xip of newIPs) {\n if (ip === xip) {\n // eslint-disable-next-line no-labels\n continue removeOldIPs;\n }\n }\n // no, its obselete -- remove it from the tracker\n const peers = this.peerIPs.get(ip);\n if (!peers) {\n continue;\n }\n peers.delete(id);\n if (!peers.size) {\n this.peerIPs.delete(ip);\n }\n }\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * Removes an IP list from the tracking list for a peer.\n * @param {string} id\n * @param {Array<string>} ips\n * @returns {void}\n */\n _removeIPs(id, ips) {\n ips.forEach(ip => {\n const peers = this.peerIPs.get(ip);\n if (!peers) {\n return;\n }\n peers.delete(id);\n if (!peers.size) {\n this.peerIPs.delete(ip);\n }\n });\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n }\n /**\n * Update all peer IPs to currently open connections\n * @returns {void}\n */\n _updateIPs() {\n this.peerStats.forEach((pstats, id) => {\n const newIPs = this._getIPs(id);\n this._setIPs(id, newIPs, pstats.ips);\n pstats.ips = newIPs;\n this.scoreCache.set(id, { score: null, cacheUntil: 0 });\n });\n }\n}\nexports.PeerScore = PeerScore;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ensureTopicStats = exports.createTopicStats = exports.createPeerStats = void 0;\nfunction createPeerStats(ps = {}) {\n return Object.assign(Object.assign({ connected: false, expire: 0, ips: [], behaviourPenalty: 0 }, ps), { topics: ps.topics\n ? Object.entries(ps.topics)\n .reduce((topics, [topic, topicStats]) => {\n topics[topic] = createTopicStats(topicStats);\n return topics;\n }, {})\n : {} });\n}\nexports.createPeerStats = createPeerStats;\nfunction createTopicStats(ts = {}) {\n return Object.assign({ inMesh: false, graftTime: 0, meshTime: 0, firstMessageDeliveries: 0, meshMessageDeliveries: 0, meshMessageDeliveriesActive: false, meshFailurePenalty: 0, invalidMessageDeliveries: 0 }, ts);\n}\nexports.createTopicStats = createTopicStats;\nfunction ensureTopicStats(topic, ps, params) {\n let ts = ps.topics[topic];\n if (ts) {\n return ts;\n }\n if (!params.topics[topic]) {\n return undefined;\n }\n ps.topics[topic] = ts = createTopicStats();\n return ts;\n}\nexports.ensureTopicStats = ensureTopicStats;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IWantTracer = void 0;\nconst constants_1 = require(\"./constants\");\nconst utils_1 = require(\"./utils\");\nconst pubsubErrors = require(\"libp2p-interfaces/src/pubsub/errors\");\nconst { ERR_INVALID_SIGNATURE, ERR_MISSING_SIGNATURE } = pubsubErrors.codes;\n/**\n * IWantTracer is an internal tracer that tracks IWANT requests in order to penalize\n * peers who don't follow up on IWANT requests after an IHAVE advertisement.\n * The tracking of promises is probabilistic to avoid using too much memory.\n *\n * Note: Do not confuse these 'promises' with JS Promise objects.\n * These 'promises' are merely expectations of a peer's behavior.\n */\nclass IWantTracer {\n constructor() {\n this.promises = new Map();\n }\n /**\n * Track a promise to deliver a message from a list of msgIds we are requesting\n * @param {string} p peer id\n * @param {string[]} msgIds\n * @returns {void}\n */\n addPromise(p, msgIds) {\n // pick msgId randomly from the list\n const ix = Math.floor(Math.random() * msgIds.length);\n const msgId = msgIds[ix];\n const msgIdStr = utils_1.messageIdToString(msgId);\n let peers = this.promises.get(msgIdStr);\n if (!peers) {\n peers = new Map();\n this.promises.set(msgIdStr, peers);\n }\n if (!peers.has(p)) {\n peers.set(p, Date.now() + constants_1.GossipsubIWantFollowupTime);\n }\n }\n /**\n * Returns the number of broken promises for each peer who didn't follow up on an IWANT request.\n * @returns {Map<string, number>}\n */\n getBrokenPromises() {\n const now = Date.now();\n const result = new Map();\n this.promises.forEach((peers, msgId) => {\n peers.forEach((expire, p) => {\n // the promise has been broken\n if (expire < now) {\n // add 1 to result\n result.set(p, (result.get(p) || 0) + 1);\n // delete from tracked promises\n peers.delete(p);\n }\n });\n // clean up empty promises for a msgId\n if (!peers.size) {\n this.promises.delete(msgId);\n }\n });\n return result;\n }\n /**\n * Someone delivered a message, stop tracking promises for it\n * @param {string} msgIdStr\n * @returns {Promise<void>}\n */\n deliverMessage(msgIdStr) {\n return __awaiter(this, void 0, void 0, function* () {\n this.promises.delete(msgIdStr);\n });\n }\n /**\n * A message got rejected, so we can stop tracking promises and let the score penalty apply from invalid message delivery,\n * unless its an obviously invalid message.\n * @param {string} msgIdStr\n * @param {string} reason\n * @returns {Promise<void>}\n */\n rejectMessage(msgIdStr, reason) {\n return __awaiter(this, void 0, void 0, function* () {\n switch (reason) {\n case ERR_INVALID_SIGNATURE:\n case ERR_MISSING_SIGNATURE:\n return;\n }\n this.promises.delete(msgIdStr);\n });\n }\n clear() {\n this.promises.clear();\n }\n}\nexports.IWantTracer = IWantTracer;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createGossipRpc = void 0;\n/**\n * Create a gossipsub RPC object\n * @param {Array<RPC.IMessage>} msgs\n * @param {Partial<RPC.IControlMessage>} control\n * @returns {IRPC}\n */\nfunction createGossipRpc(msgs = [], control = {}) {\n return {\n subscriptions: [],\n msgs: msgs,\n control: Object.assign({ ihave: [], iwant: [], graft: [], prune: [] }, control)\n };\n}\nexports.createGossipRpc = createGossipRpc;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.hasGossipProtocol = void 0;\nconst constants_1 = require(\"../constants\");\nfunction hasGossipProtocol(protocol) {\n return (protocol === constants_1.GossipsubIDv10 || protocol === constants_1.GossipsubIDv11);\n}\nexports.hasGossipProtocol = hasGossipProtocol;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./create-gossip-rpc\"), exports);\n__exportStar(require(\"./shuffle\"), exports);\n__exportStar(require(\"./has-gossip-protocol\"), exports);\n__exportStar(require(\"./messageIdToString\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.messageIdFromString = exports.messageIdToString = void 0;\nconst from_string_1 = require(\"uint8arrays/from-string\");\nconst to_string_1 = require(\"uint8arrays/to-string\");\nfunction messageIdToString(msgId) {\n return to_string_1.toString(msgId, 'base64');\n}\nexports.messageIdToString = messageIdToString;\nfunction messageIdFromString(msgId) {\n return from_string_1.fromString(msgId, 'base64');\n}\nexports.messageIdFromString = messageIdFromString;\n","'use strict';\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.shuffle = void 0;\n/**\n * Pseudo-randomly shuffles an array\n *\n * Mutates the input array\n *\n * @param {Array} arr\n * @returns {Array}\n */\nfunction shuffle(arr) {\n if (arr.length <= 1) {\n return arr;\n }\n const randInt = () => {\n return Math.floor(Math.random() * Math.floor(arr.length));\n };\n for (let i = 0; i < arr.length; i++) {\n const j = randInt();\n const tmp = arr[i];\n arr[i] = arr[j];\n arr[j] = tmp;\n }\n return arr;\n}\nexports.shuffle = shuffle;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SimpleTimeCache = void 0;\n/**\n * This is similar to https://github.com/daviddias/time-cache/blob/master/src/index.js\n * for our own need, we don't use lodash throttle to improve performance.\n * This gives 4x - 5x performance gain compared to npm TimeCache\n */\nclass SimpleTimeCache {\n constructor(options) {\n this.lastPruneTime = 0;\n this.entries = new Map();\n this.validityMs = options.validityMs;\n // allow negative validityMs so that this does not cache anything, spec test compliance.spec.js\n // sends duplicate messages and expect peer to receive all. Application likely uses positive validityMs\n }\n put(key, value) {\n this.entries.set(key, { value, validUntilMs: Date.now() + this.validityMs });\n this.prune();\n }\n prune() {\n const now = Date.now();\n if (now - this.lastPruneTime < 200) {\n return;\n }\n this.lastPruneTime = now;\n for (const [k, v] of this.entries.entries()) {\n if (v.validUntilMs < now) {\n this.entries.delete(k);\n }\n else {\n // sort by insertion order\n break;\n }\n }\n }\n has(key) {\n return this.entries.has(key);\n }\n get(key) {\n const value = this.entries.get(key);\n return (value && value.validUntilMs >= Date.now()) ? value.value : undefined;\n }\n clear() {\n this.entries = new Map();\n this.lastPruneTime = 0;\n }\n}\nexports.SimpleTimeCache = SimpleTimeCache;\n","'use strict'\n\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\nconst errCode = require('err-code')\nconst { OPEN, CLOSING, CLOSED } = require('./status')\n\nconst connectionSymbol = Symbol.for('@libp2p/interface-connection/connection')\n\n/**\n * @typedef {import('../stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('./status').Status} Status\n */\n\n/**\n * @typedef {Object} Timeline\n * @property {number} open - connection opening timestamp.\n * @property {number} [upgraded] - connection upgraded timestamp.\n * @property {number} [close]\n *\n * @typedef {Object} ConectionStat\n * @property {'inbound' | 'outbound'} direction - connection establishment direction\n * @property {Timeline} timeline - connection relevant events timestamp.\n * @property {string} [multiplexer] - connection multiplexing identifier.\n * @property {string} [encryption] - connection encryption method identifier.\n *\n * @typedef {(protocols: string|string[]) => Promise<{stream: MuxedStream, protocol: string}>} CreatedMuxedStream\n *\n * @typedef {Object} ConnectionOptions\n * @property {Multiaddr} [localAddr] - local multiaddr of the connection if known.\n * @property {Multiaddr} remoteAddr - remote multiaddr of the connection.\n * @property {PeerId} localPeer - local peer-id.\n * @property {PeerId} remotePeer - remote peer-id.\n * @property {CreatedMuxedStream} newStream - new stream muxer function.\n * @property {() => Promise<void>} close - close raw connection function.\n * @property {() => MuxedStream[]} getStreams - get streams from muxer function.\n * @property {ConectionStat} stat - metadata of the connection.\n *\n * @typedef {Object} StreamData\n * @property {string} protocol - the protocol used by the stream\n * @property {Object} [metadata] - metadata of the stream\n */\n\n/**\n * An implementation of the js-libp2p connection.\n * Any libp2p transport should use an upgrader to return this connection.\n */\nclass Connection {\n /**\n * An implementation of the js-libp2p connection.\n * Any libp2p transport should use an upgrader to return this connection.\n *\n * @class\n * @param {ConnectionOptions} options\n */\n constructor ({ localAddr, remoteAddr, localPeer, remotePeer, newStream, close, getStreams, stat }) {\n validateArgs(localAddr, localPeer, remotePeer, newStream, close, getStreams, stat)\n\n /**\n * Connection identifier.\n */\n this.id = (parseInt(String(Math.random() * 1e9))).toString(36) + Date.now()\n\n /**\n * Observed multiaddr of the local peer\n */\n this.localAddr = localAddr\n\n /**\n * Observed multiaddr of the remote peer\n */\n this.remoteAddr = remoteAddr\n\n /**\n * Local peer id.\n */\n this.localPeer = localPeer\n\n /**\n * Remote peer id.\n */\n this.remotePeer = remotePeer\n\n /**\n * Connection metadata.\n *\n * @type {ConectionStat & {status: Status}}\n */\n this._stat = {\n ...stat,\n status: OPEN\n }\n\n /**\n * Reference to the new stream function of the multiplexer\n */\n this._newStream = newStream\n\n /**\n * Reference to the close function of the raw connection\n */\n this._close = close\n\n /**\n * Reference to the getStreams function of the muxer\n */\n this._getStreams = getStreams\n\n /**\n * Connection streams registry\n */\n this.registry = new Map()\n\n /**\n * User provided tags\n *\n * @type {string[]}\n */\n this.tags = []\n }\n\n get [Symbol.toStringTag] () {\n return 'Connection'\n }\n\n get [connectionSymbol] () {\n return true\n }\n\n /**\n * Checks if the given value is a `Connection` instance.\n *\n * @param {any} other\n * @returns {other is Connection}\n */\n static isConnection (other) {\n return Boolean(other && other[connectionSymbol])\n }\n\n /**\n * Get connection metadata\n *\n * @this {Connection}\n */\n get stat () {\n return this._stat\n }\n\n /**\n * Get all the streams of the muxer.\n *\n * @this {Connection}\n */\n get streams () {\n return this._getStreams()\n }\n\n /**\n * Create a new stream from this connection\n *\n * @param {string|string[]} protocols - intended protocol for the stream\n * @returns {Promise<{stream: MuxedStream, protocol: string}>} with muxed+multistream-selected stream and selected protocol\n */\n async newStream (protocols) {\n if (this.stat.status === CLOSING) {\n throw errCode(new Error('the connection is being closed'), 'ERR_CONNECTION_BEING_CLOSED')\n }\n\n if (this.stat.status === CLOSED) {\n throw errCode(new Error('the connection is closed'), 'ERR_CONNECTION_CLOSED')\n }\n\n if (!Array.isArray(protocols)) protocols = [protocols]\n\n const { stream, protocol } = await this._newStream(protocols)\n\n this.addStream(stream, { protocol })\n\n return {\n stream,\n protocol\n }\n }\n\n /**\n * Add a stream when it is opened to the registry.\n *\n * @param {MuxedStream} muxedStream - a muxed stream\n * @param {StreamData} data - the stream data to be registered\n * @returns {void}\n */\n addStream (muxedStream, { protocol, metadata = {} }) {\n // Add metadata for the stream\n this.registry.set(muxedStream.id, {\n protocol,\n ...metadata\n })\n }\n\n /**\n * Remove stream registry after it is closed.\n *\n * @param {string} id - identifier of the stream\n */\n removeStream (id) {\n this.registry.delete(id)\n }\n\n /**\n * Close the connection.\n *\n * @returns {Promise<void>}\n */\n async close () {\n if (this.stat.status === CLOSED) {\n return\n }\n\n if (this._closing) {\n return this._closing\n }\n\n this.stat.status = CLOSING\n\n // Close raw connection\n this._closing = await this._close()\n\n this._stat.timeline.close = Date.now()\n this.stat.status = CLOSED\n }\n}\n\nmodule.exports = Connection\n\n/**\n * @param {Multiaddr|undefined} localAddr\n * @param {PeerId} localPeer\n * @param {PeerId} remotePeer\n * @param {(protocols: string | string[]) => Promise<{ stream: import(\"../stream-muxer/types\").MuxedStream; protocol: string; }>} newStream\n * @param {() => Promise<void>} close\n * @param {() => import(\"../stream-muxer/types\").MuxedStream[]} getStreams\n * @param {{ direction: any; timeline: any; multiplexer?: string | undefined; encryption?: string | undefined; }} stat\n */\nfunction validateArgs (localAddr, localPeer, remotePeer, newStream, close, getStreams, stat) {\n if (localAddr && !Multiaddr.isMultiaddr(localAddr)) {\n throw errCode(new Error('localAddr must be an instance of multiaddr'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (!PeerId.isPeerId(localPeer)) {\n throw errCode(new Error('localPeer must be an instance of peer-id'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (!PeerId.isPeerId(remotePeer)) {\n throw errCode(new Error('remotePeer must be an instance of peer-id'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (typeof newStream !== 'function') {\n throw errCode(new Error('new stream must be a function'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (typeof close !== 'function') {\n throw errCode(new Error('close must be a function'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (typeof getStreams !== 'function') {\n throw errCode(new Error('getStreams must be a function'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (!stat) {\n throw errCode(new Error('connection metadata object must be provided'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (stat.direction !== 'inbound' && stat.direction !== 'outbound') {\n throw errCode(new Error('direction must be \"inbound\" or \"outbound\"'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (!stat.timeline) {\n throw errCode(new Error('connection timeline object must be provided in the stat object'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (!stat.timeline.open) {\n throw errCode(new Error('connection open timestamp must be provided'), 'ERR_INVALID_PARAMETERS')\n }\n\n if (!stat.timeline.upgraded) {\n throw errCode(new Error('connection upgraded timestamp must be provided'), 'ERR_INVALID_PARAMETERS')\n }\n}\n","'use strict'\n\nexports.Connection = require('./connection')\n","'use strict'\n\nconst STATUS = {\n OPEN: /** @type {'open'} */('open'),\n CLOSING: /** @type {'closing'} */('closing'),\n CLOSED: /** @type {'closed'} */('closed')\n}\nmodule.exports = STATUS\n\n/**\n * @typedef {STATUS[keyof STATUS]} Status\n */\n","'use strict'\n\nexports.codes = {\n /**\n * Signature policy is invalid\n */\n ERR_INVALID_SIGNATURE_POLICY: 'ERR_INVALID_SIGNATURE_POLICY',\n /**\n * Signature policy is unhandled\n */\n ERR_UNHANDLED_SIGNATURE_POLICY: 'ERR_UNHANDLED_SIGNATURE_POLICY',\n\n // Strict signing codes\n\n /**\n * Message expected to have a `signature`, but doesn't\n */\n ERR_MISSING_SIGNATURE: 'ERR_MISSING_SIGNATURE',\n /**\n * Message expected to have a `seqno`, but doesn't\n */\n ERR_MISSING_SEQNO: 'ERR_MISSING_SEQNO',\n /**\n * Message `signature` is invalid\n */\n ERR_INVALID_SIGNATURE: 'ERR_INVALID_SIGNATURE',\n\n // Strict no-signing codes\n\n /**\n * Message expected to not have a `from`, but does\n */\n ERR_UNEXPECTED_FROM: 'ERR_UNEXPECTED_FROM',\n /**\n * Message expected to not have a `signature`, but does\n */\n ERR_UNEXPECTED_SIGNATURE: 'ERR_UNEXPECTED_SIGNATURE',\n /**\n * Message expected to not have a `key`, but does\n */\n ERR_UNEXPECTED_KEY: 'ERR_UNEXPECTED_KEY',\n /**\n * Message expected to not have a `seqno`, but does\n */\n ERR_UNEXPECTED_SEQNO: 'ERR_UNEXPECTED_SEQNO'\n}\n","'use strict'\n\nconst debug = require('debug')\nconst { EventEmitter } = require('events')\nconst errcode = require('err-code')\n\nconst { pipe } = require('it-pipe')\nconst { default: Queue } = require('p-queue')\n\nconst MulticodecTopology = require('../topology/multicodec-topology')\nconst { codes } = require('./errors')\n\nconst { RPC } = require('./message/rpc')\nconst PeerStreams = require('./peer-streams')\nconst { SignaturePolicy } = require('./signature-policy')\nconst utils = require('./utils')\n\nconst {\n signMessage,\n verifySignature\n} = require('./message/sign')\n\n/**\n * @typedef {any} Libp2p\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('bl')} BufferList\n * @typedef {import('../stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../connection/connection')} Connection\n * @typedef {import('./signature-policy').SignaturePolicyType} SignaturePolicyType\n * @typedef {import('./message/rpc').IRPC} IRPC\n * @typedef {import('./message/rpc').RPC.SubOpts} RPCSubOpts\n * @typedef {import('./message/rpc').RPC.Message} RPCMessage\n */\n\n/**\n * @typedef {Object} InMessage\n * @property {string} [from]\n * @property {string} receivedFrom\n * @property {string[]} topicIDs\n * @property {Uint8Array} [seqno]\n * @property {Uint8Array} data\n * @property {Uint8Array} [signature]\n * @property {Uint8Array} [key]\n *\n * @typedef {Object} PubsubProperties\n * @property {string} debugName - log namespace\n * @property {Array<string>|string} multicodecs - protocol identificers to connect\n * @property {Libp2p} libp2p\n *\n * @typedef {Object} PubsubOptions\n * @property {SignaturePolicyType} [globalSignaturePolicy = SignaturePolicy.StrictSign] - defines how signatures should be handled\n * @property {boolean} [canRelayMessage = false] - if can relay messages not subscribed\n * @property {boolean} [emitSelf = false] - if publish should emit to self, if subscribed\n * @property {number} [messageProcessingConcurrency = 10] - handle this many incoming pubsub messages concurrently\n */\n\n/**\n * PubsubBaseProtocol handles the peers and connections logic for pubsub routers\n * and specifies the API that pubsub routers should have.\n */\nclass PubsubBaseProtocol extends EventEmitter {\n /**\n * @param {PubsubProperties & PubsubOptions} props\n * @abstract\n */\n constructor ({\n debugName,\n multicodecs,\n libp2p,\n globalSignaturePolicy = SignaturePolicy.StrictSign,\n canRelayMessage = false,\n emitSelf = false,\n messageProcessingConcurrency = 10\n }) {\n if (typeof debugName !== 'string') {\n throw new Error('a debugname `string` is required')\n }\n\n if (!multicodecs) {\n throw new Error('multicodecs are required')\n }\n\n if (!libp2p) {\n throw new Error('libp2p is required')\n }\n\n super()\n\n this.log = Object.assign(debug(debugName), {\n err: debug(`${debugName}:error`)\n })\n\n /**\n * @type {Array<string>}\n */\n this.multicodecs = utils.ensureArray(multicodecs)\n this._libp2p = libp2p\n this.registrar = libp2p.registrar\n /**\n * @type {PeerId}\n */\n this.peerId = libp2p.peerId\n\n this.started = false\n\n /**\n * Map of topics to which peers are subscribed to\n *\n * @type {Map<string, Set<string>>}\n */\n this.topics = new Map()\n\n /**\n * List of our subscriptions\n *\n * @type {Set<string>}\n */\n this.subscriptions = new Set()\n\n /**\n * Map of peer streams\n *\n * @type {Map<string, import('./peer-streams')>}\n */\n this.peers = new Map()\n\n // validate signature policy\n if (!SignaturePolicy[globalSignaturePolicy]) {\n throw errcode(new Error('Invalid global signature policy'), codes.ERR_INVALID_SIGNATURE_POLICY)\n }\n\n /**\n * The signature policy to follow by default\n *\n * @type {string}\n */\n this.globalSignaturePolicy = globalSignaturePolicy\n\n /**\n * If router can relay received messages, even if not subscribed\n *\n * @type {boolean}\n */\n this.canRelayMessage = canRelayMessage\n\n /**\n * if publish should emit to self, if subscribed\n *\n * @type {boolean}\n */\n this.emitSelf = emitSelf\n\n /**\n * Topic validator function\n *\n * @typedef {function(string, InMessage): Promise<void>} validator\n */\n /**\n * Topic validator map\n *\n * Keyed by topic\n * Topic validators are functions with the following input:\n *\n * @type {Map<string, validator>}\n */\n this.topicValidators = new Map()\n\n /**\n * @type {Queue}\n */\n this.queue = new Queue({ concurrency: messageProcessingConcurrency })\n\n this._registrarId = undefined\n this._onIncomingStream = this._onIncomingStream.bind(this)\n this._onPeerConnected = this._onPeerConnected.bind(this)\n this._onPeerDisconnected = this._onPeerDisconnected.bind(this)\n }\n\n // LIFECYCLE METHODS\n\n /**\n * Register the pubsub protocol onto the libp2p node\n */\n async start () {\n if (this.started) {\n return\n }\n this.log('starting')\n\n // Incoming streams\n // Called after a peer dials us\n this.registrar.handle(this.multicodecs, this._onIncomingStream)\n\n // register protocol with topology\n // Topology callbacks called on connection manager changes\n const topology = new MulticodecTopology({\n multicodecs: this.multicodecs,\n handlers: {\n onConnect: this._onPeerConnected,\n onDisconnect: this._onPeerDisconnected\n }\n })\n this._registrarId = await this.registrar.register(topology)\n\n this.log('started')\n this.started = true\n }\n\n /**\n * Unregister the pubsub protocol and the streams with other peers will be closed.\n */\n async stop () {\n if (!this.started) {\n return\n }\n\n // unregister protocol and handlers\n this.registrar.unregister(this._registrarId)\n\n this.log('stopping')\n this.peers.forEach((peerStreams) => peerStreams.close())\n\n this.peers = new Map()\n this.subscriptions = new Set()\n this.started = false\n this.log('stopped')\n }\n\n /**\n * On an inbound stream opened.\n *\n * @protected\n * @param {Object} props\n * @param {string} props.protocol\n * @param {MuxedStream} props.stream\n * @param {Connection} props.connection - connection\n */\n _onIncomingStream ({ protocol, stream, connection }) {\n const peerId = connection.remotePeer\n const idB58Str = peerId.toB58String()\n const peer = this._addPeer(peerId, protocol)\n const inboundStream = peer.attachInboundStream(stream)\n\n this._processMessages(idB58Str, inboundStream, peer)\n }\n\n /**\n * Registrar notifies an established connection with pubsub protocol.\n *\n * @protected\n * @param {PeerId} peerId - remote peer-id\n * @param {Connection} conn - connection to the peer\n */\n async _onPeerConnected (peerId, conn) {\n const idB58Str = peerId.toB58String()\n this.log('connected', idB58Str)\n\n try {\n const { stream, protocol } = await conn.newStream(this.multicodecs)\n const peer = this._addPeer(peerId, protocol)\n await peer.attachOutboundStream(stream)\n } catch (/** @type {any} */ err) {\n this.log.err(err)\n }\n\n // Immediately send my own subscriptions to the newly established conn\n this._sendSubscriptions(idB58Str, Array.from(this.subscriptions), true)\n }\n\n /**\n * Registrar notifies a closing connection with pubsub protocol.\n *\n * @protected\n * @param {PeerId} peerId - peerId\n * @param {Error} [err] - error for connection end\n */\n _onPeerDisconnected (peerId, err) {\n const idB58Str = peerId.toB58String()\n\n this.log('connection ended', idB58Str, err ? err.message : '')\n this._removePeer(peerId)\n }\n\n /**\n * Notifies the router that a peer has been connected\n *\n * @protected\n * @param {PeerId} peerId\n * @param {string} protocol\n * @returns {PeerStreams}\n */\n _addPeer (peerId, protocol) {\n const id = peerId.toB58String()\n const existing = this.peers.get(id)\n\n // If peer streams already exists, do nothing\n if (existing) {\n return existing\n }\n\n // else create a new peer streams\n this.log('new peer', id)\n\n const peerStreams = new PeerStreams({\n id: peerId,\n protocol\n })\n\n this.peers.set(id, peerStreams)\n peerStreams.once('close', () => this._removePeer(peerId))\n\n return peerStreams\n }\n\n /**\n * Notifies the router that a peer has been disconnected.\n *\n * @protected\n * @param {PeerId} peerId\n * @returns {PeerStreams | undefined}\n */\n _removePeer (peerId) {\n if (!peerId) return\n const id = peerId.toB58String()\n const peerStreams = this.peers.get(id)\n if (!peerStreams) return\n\n // close peer streams\n peerStreams.removeAllListeners()\n peerStreams.close()\n\n // delete peer streams\n this.log('delete peer', id)\n this.peers.delete(id)\n\n // remove peer from topics map\n for (const peers of this.topics.values()) {\n peers.delete(id)\n }\n\n return peerStreams\n }\n\n // MESSAGE METHODS\n\n /**\n * Responsible for processing each RPC message received by other peers.\n *\n * @param {string} idB58Str - peer id string in base58\n * @param {AsyncIterable<Uint8Array|BufferList>} stream - inbound stream\n * @param {PeerStreams} peerStreams - PubSub peer\n * @returns {Promise<void>}\n */\n async _processMessages (idB58Str, stream, peerStreams) {\n try {\n await pipe(\n stream,\n async (source) => {\n for await (const data of source) {\n const rpcBytes = data instanceof Uint8Array ? data : data.slice()\n const rpcMsg = this._decodeRpc(rpcBytes)\n\n // Since _processRpc may be overridden entirely in unsafe ways,\n // the simplest/safest option here is to wrap in a function and capture all errors\n // to prevent a top-level unhandled exception\n // This processing of rpc messages should happen without awaiting full validation/execution of prior messages\n ;(async () => {\n try {\n await this._processRpc(idB58Str, peerStreams, rpcMsg)\n } catch (/** @type {any} */ err) {\n this.log.err(err)\n }\n })()\n }\n }\n )\n } catch (/** @type {any} */ err) {\n this._onPeerDisconnected(peerStreams.id, err)\n }\n }\n\n /**\n * Handles an rpc request from a peer\n *\n * @param {string} idB58Str\n * @param {PeerStreams} peerStreams\n * @param {RPC} rpc\n * @returns {Promise<boolean>}\n */\n async _processRpc (idB58Str, peerStreams, rpc) {\n this.log('rpc from', idB58Str)\n const subs = rpc.subscriptions\n const msgs = rpc.msgs\n\n if (subs.length) {\n // update peer subscriptions\n subs.forEach((subOpt) => {\n this._processRpcSubOpt(idB58Str, subOpt)\n })\n this.emit('pubsub:subscription-change', peerStreams.id, subs)\n }\n\n if (!this._acceptFrom(idB58Str)) {\n this.log('received message from unacceptable peer %s', idB58Str)\n return false\n }\n\n if (msgs.length) {\n this.queue.addAll(msgs.map(message => async () => {\n if (!(this.canRelayMessage || (message.topicIDs && message.topicIDs.some((topic) => this.subscriptions.has(topic))))) {\n this.log('received message we didn\\'t subscribe to. Dropping.')\n return\n }\n\n try {\n const msg = utils.normalizeInRpcMessage(message, idB58Str)\n\n await this._processRpcMessage(msg)\n } catch (/** @type {any} */ err) {\n this.log.err(err)\n }\n }))\n }\n return true\n }\n\n /**\n * Handles a subscription change from a peer\n *\n * @param {string} id\n * @param {RPC.ISubOpts} subOpt\n */\n _processRpcSubOpt (id, subOpt) {\n const t = subOpt.topicID\n\n if (!t) {\n return\n }\n\n let topicSet = this.topics.get(t)\n if (!topicSet) {\n topicSet = new Set()\n this.topics.set(t, topicSet)\n }\n\n if (subOpt.subscribe) {\n // subscribe peer to new topic\n topicSet.add(id)\n } else {\n // unsubscribe from existing topic\n topicSet.delete(id)\n }\n }\n\n /**\n * Handles an message from a peer\n *\n * @param {InMessage} msg\n * @returns {Promise<void>}\n */\n async _processRpcMessage (msg) {\n if (this.peerId.toB58String() === msg.from && !this.emitSelf) {\n return\n }\n\n // Ensure the message is valid before processing it\n try {\n await this.validate(msg)\n } catch (/** @type {any} */ err) {\n this.log('Message is invalid, dropping it. %O', err)\n return\n }\n\n // Emit to self\n this._emitMessage(msg)\n\n return this._publish(utils.normalizeOutRpcMessage(msg))\n }\n\n /**\n * Emit a message from a peer\n *\n * @param {InMessage} message\n */\n _emitMessage (message) {\n message.topicIDs.forEach((topic) => {\n if (this.subscriptions.has(topic)) {\n this.emit(topic, message)\n }\n })\n }\n\n /**\n * The default msgID implementation\n * Child class can override this.\n *\n * @param {InMessage} msg - the message object\n * @returns {Promise<Uint8Array> | Uint8Array} message id as bytes\n */\n getMsgId (msg) {\n const signaturePolicy = this.globalSignaturePolicy\n switch (signaturePolicy) {\n case SignaturePolicy.StrictSign:\n // @ts-ignore seqno is optional in protobuf definition but it will exist\n return utils.msgId(msg.from, msg.seqno)\n case SignaturePolicy.StrictNoSign:\n return utils.noSignMsgId(msg.data)\n default:\n throw errcode(new Error('Cannot get message id: unhandled signature policy: ' + signaturePolicy), codes.ERR_UNHANDLED_SIGNATURE_POLICY)\n }\n }\n\n /**\n * Whether to accept a message from a peer\n * Override to create a graylist\n *\n * @param {string} id\n * @returns {boolean}\n */\n _acceptFrom (id) {\n return true\n }\n\n /**\n * Decode Uint8Array into an RPC object.\n * This can be override to use a custom router protobuf.\n *\n * @param {Uint8Array} bytes\n * @returns {RPC}\n */\n _decodeRpc (bytes) {\n return RPC.decode(bytes)\n }\n\n /**\n * Encode RPC object into a Uint8Array.\n * This can be override to use a custom router protobuf.\n *\n * @param {IRPC} rpc\n * @returns {Uint8Array}\n */\n _encodeRpc (rpc) {\n return RPC.encode(rpc).finish()\n }\n\n /**\n * Send an rpc object to a peer\n *\n * @param {string} id - peer id\n * @param {IRPC} rpc\n * @returns {void}\n */\n _sendRpc (id, rpc) {\n const peerStreams = this.peers.get(id)\n if (!peerStreams || !peerStreams.isWritable) {\n const msg = `Cannot send RPC to ${id} as there is no open stream to it available`\n\n this.log.err(msg)\n return\n }\n peerStreams.write(this._encodeRpc(rpc))\n }\n\n /**\n * Send subscroptions to a peer\n *\n * @param {string} id - peer id\n * @param {string[]} topics\n * @param {boolean} subscribe - set to false for unsubscriptions\n * @returns {void}\n */\n _sendSubscriptions (id, topics, subscribe) {\n return this._sendRpc(id, {\n subscriptions: topics.map(t => ({ topicID: t, subscribe: subscribe }))\n })\n }\n\n /**\n * Validates the given message. The signature will be checked for authenticity.\n * Throws an error on invalid messages\n *\n * @param {InMessage} message\n * @returns {Promise<void>}\n */\n async validate (message) { // eslint-disable-line require-await\n const signaturePolicy = this.globalSignaturePolicy\n switch (signaturePolicy) {\n case SignaturePolicy.StrictNoSign:\n if (message.from) {\n throw errcode(new Error('StrictNoSigning: from should not be present'), codes.ERR_UNEXPECTED_FROM)\n }\n if (message.signature) {\n throw errcode(new Error('StrictNoSigning: signature should not be present'), codes.ERR_UNEXPECTED_SIGNATURE)\n }\n if (message.key) {\n throw errcode(new Error('StrictNoSigning: key should not be present'), codes.ERR_UNEXPECTED_KEY)\n }\n if (message.seqno) {\n throw errcode(new Error('StrictNoSigning: seqno should not be present'), codes.ERR_UNEXPECTED_SEQNO)\n }\n break\n case SignaturePolicy.StrictSign:\n if (!message.signature) {\n throw errcode(new Error('StrictSigning: Signing required and no signature was present'), codes.ERR_MISSING_SIGNATURE)\n }\n if (!message.seqno) {\n throw errcode(new Error('StrictSigning: Signing required and no seqno was present'), codes.ERR_MISSING_SEQNO)\n }\n if (!(await verifySignature(message))) {\n throw errcode(new Error('StrictSigning: Invalid message signature'), codes.ERR_INVALID_SIGNATURE)\n }\n break\n default:\n throw errcode(new Error('Cannot validate message: unhandled signature policy: ' + signaturePolicy), codes.ERR_UNHANDLED_SIGNATURE_POLICY)\n }\n\n for (const topic of message.topicIDs) {\n const validatorFn = this.topicValidators.get(topic)\n if (validatorFn) {\n await validatorFn(topic, message)\n }\n }\n }\n\n /**\n * Normalizes the message and signs it, if signing is enabled.\n * Should be used by the routers to create the message to send.\n *\n * @protected\n * @param {InMessage} message\n * @returns {Promise<InMessage>}\n */\n _buildMessage (message) {\n const signaturePolicy = this.globalSignaturePolicy\n switch (signaturePolicy) {\n case SignaturePolicy.StrictSign:\n message.from = this.peerId.toB58String()\n message.seqno = utils.randomSeqno()\n return signMessage(this.peerId, message)\n case SignaturePolicy.StrictNoSign:\n return Promise.resolve(message)\n default:\n throw errcode(new Error('Cannot build message: unhandled signature policy: ' + signaturePolicy), codes.ERR_UNHANDLED_SIGNATURE_POLICY)\n }\n }\n\n // API METHODS\n\n /**\n * Get a list of the peer-ids that are subscribed to one topic.\n *\n * @param {string} topic\n * @returns {Array<string>}\n */\n getSubscribers (topic) {\n if (!this.started) {\n throw errcode(new Error('not started yet'), 'ERR_NOT_STARTED_YET')\n }\n\n if (!topic || typeof topic !== 'string') {\n throw errcode(new Error('a string topic must be provided'), 'ERR_NOT_VALID_TOPIC')\n }\n\n const peersInTopic = this.topics.get(topic)\n if (!peersInTopic) {\n return []\n }\n return Array.from(peersInTopic)\n }\n\n /**\n * Publishes messages to all subscribed peers\n *\n * @param {string} topic\n * @param {Uint8Array} message\n * @returns {Promise<void>}\n */\n async publish (topic, message) {\n if (!this.started) {\n throw new Error('Pubsub has not started')\n }\n\n this.log('publish', topic, message)\n\n const from = this.peerId.toB58String()\n const msgObject = {\n receivedFrom: from,\n data: message,\n topicIDs: [topic]\n }\n\n // ensure that the message follows the signature policy\n const outMsg = await this._buildMessage(msgObject)\n // @ts-ignore different type as from is converted\n const msg = utils.normalizeInRpcMessage(outMsg)\n\n // Emit to self if I'm interested and emitSelf enabled\n this.emitSelf && this._emitMessage(msg)\n\n // send to all the other peers\n await this._publish(msg)\n }\n\n /**\n * Overriding the implementation of publish should handle the appropriate algorithms for the publish/subscriber implementation.\n * For example, a Floodsub implementation might simply publish each message to each topic for every peer\n *\n * @abstract\n * @param {InMessage|RPCMessage} message\n * @returns {Promise<void>}\n *\n */\n _publish (message) {\n throw errcode(new Error('publish must be implemented by the subclass'), 'ERR_NOT_IMPLEMENTED')\n }\n\n /**\n * Subscribes to a given topic.\n *\n * @abstract\n * @param {string} topic\n * @returns {void}\n */\n subscribe (topic) {\n if (!this.started) {\n throw new Error('Pubsub has not started')\n }\n\n if (!this.subscriptions.has(topic)) {\n this.subscriptions.add(topic)\n this.peers.forEach((_, id) => this._sendSubscriptions(id, [topic], true))\n }\n }\n\n /**\n * Unsubscribe from the given topic.\n *\n * @param {string} topic\n * @returns {void}\n */\n unsubscribe (topic) {\n if (!this.started) {\n throw new Error('Pubsub is not started')\n }\n\n if (this.subscriptions.has(topic) && this.listenerCount(topic) === 0) {\n this.subscriptions.delete(topic)\n this.peers.forEach((_, id) => this._sendSubscriptions(id, [topic], false))\n }\n }\n\n /**\n * Get the list of topics which the peer is subscribed to.\n *\n * @returns {Array<string>}\n */\n getTopics () {\n if (!this.started) {\n throw new Error('Pubsub is not started')\n }\n\n return Array.from(this.subscriptions)\n }\n}\n\nPubsubBaseProtocol.utils = utils\nPubsubBaseProtocol.SignaturePolicy = SignaturePolicy\n\nmodule.exports = PubsubBaseProtocol\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-pubsub-rpc\"] || ($protobuf.roots[\"libp2p-pubsub-rpc\"] = {});\n\n$root.RPC = (function() {\n\n /**\n * Properties of a RPC.\n * @exports IRPC\n * @interface IRPC\n * @property {Array.<RPC.ISubOpts>|null} [subscriptions] RPC subscriptions\n * @property {Array.<RPC.IMessage>|null} [msgs] RPC msgs\n */\n\n /**\n * Constructs a new RPC.\n * @exports RPC\n * @classdesc Represents a RPC.\n * @implements IRPC\n * @constructor\n * @param {IRPC=} [p] Properties to set\n */\n function RPC(p) {\n this.subscriptions = [];\n this.msgs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * RPC subscriptions.\n * @member {Array.<RPC.ISubOpts>} subscriptions\n * @memberof RPC\n * @instance\n */\n RPC.prototype.subscriptions = $util.emptyArray;\n\n /**\n * RPC msgs.\n * @member {Array.<RPC.IMessage>} msgs\n * @memberof RPC\n * @instance\n */\n RPC.prototype.msgs = $util.emptyArray;\n\n /**\n * Encodes the specified RPC message. Does not implicitly {@link RPC.verify|verify} messages.\n * @function encode\n * @memberof RPC\n * @static\n * @param {IRPC} m RPC message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n RPC.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.subscriptions != null && m.subscriptions.length) {\n for (var i = 0; i < m.subscriptions.length; ++i)\n $root.RPC.SubOpts.encode(m.subscriptions[i], w.uint32(10).fork()).ldelim();\n }\n if (m.msgs != null && m.msgs.length) {\n for (var i = 0; i < m.msgs.length; ++i)\n $root.RPC.Message.encode(m.msgs[i], w.uint32(18).fork()).ldelim();\n }\n return w;\n };\n\n /**\n * Decodes a RPC message from the specified reader or buffer.\n * @function decode\n * @memberof RPC\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC} RPC\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n RPC.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.subscriptions && m.subscriptions.length))\n m.subscriptions = [];\n m.subscriptions.push($root.RPC.SubOpts.decode(r, r.uint32()));\n break;\n case 2:\n if (!(m.msgs && m.msgs.length))\n m.msgs = [];\n m.msgs.push($root.RPC.Message.decode(r, r.uint32()));\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a RPC message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC} RPC\n */\n RPC.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC)\n return d;\n var m = new $root.RPC();\n if (d.subscriptions) {\n if (!Array.isArray(d.subscriptions))\n throw TypeError(\".RPC.subscriptions: array expected\");\n m.subscriptions = [];\n for (var i = 0; i < d.subscriptions.length; ++i) {\n if (typeof d.subscriptions[i] !== \"object\")\n throw TypeError(\".RPC.subscriptions: object expected\");\n m.subscriptions[i] = $root.RPC.SubOpts.fromObject(d.subscriptions[i]);\n }\n }\n if (d.msgs) {\n if (!Array.isArray(d.msgs))\n throw TypeError(\".RPC.msgs: array expected\");\n m.msgs = [];\n for (var i = 0; i < d.msgs.length; ++i) {\n if (typeof d.msgs[i] !== \"object\")\n throw TypeError(\".RPC.msgs: object expected\");\n m.msgs[i] = $root.RPC.Message.fromObject(d.msgs[i]);\n }\n }\n return m;\n };\n\n /**\n * Creates a plain object from a RPC message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC\n * @static\n * @param {RPC} m RPC\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n RPC.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.subscriptions = [];\n d.msgs = [];\n }\n if (m.subscriptions && m.subscriptions.length) {\n d.subscriptions = [];\n for (var j = 0; j < m.subscriptions.length; ++j) {\n d.subscriptions[j] = $root.RPC.SubOpts.toObject(m.subscriptions[j], o);\n }\n }\n if (m.msgs && m.msgs.length) {\n d.msgs = [];\n for (var j = 0; j < m.msgs.length; ++j) {\n d.msgs[j] = $root.RPC.Message.toObject(m.msgs[j], o);\n }\n }\n return d;\n };\n\n /**\n * Converts this RPC to JSON.\n * @function toJSON\n * @memberof RPC\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n RPC.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n RPC.SubOpts = (function() {\n\n /**\n * Properties of a SubOpts.\n * @memberof RPC\n * @interface ISubOpts\n * @property {boolean|null} [subscribe] SubOpts subscribe\n * @property {string|null} [topicID] SubOpts topicID\n */\n\n /**\n * Constructs a new SubOpts.\n * @memberof RPC\n * @classdesc Represents a SubOpts.\n * @implements ISubOpts\n * @constructor\n * @param {RPC.ISubOpts=} [p] Properties to set\n */\n function SubOpts(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * SubOpts subscribe.\n * @member {boolean|null|undefined} subscribe\n * @memberof RPC.SubOpts\n * @instance\n */\n SubOpts.prototype.subscribe = null;\n\n /**\n * SubOpts topicID.\n * @member {string|null|undefined} topicID\n * @memberof RPC.SubOpts\n * @instance\n */\n SubOpts.prototype.topicID = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * SubOpts _subscribe.\n * @member {\"subscribe\"|undefined} _subscribe\n * @memberof RPC.SubOpts\n * @instance\n */\n Object.defineProperty(SubOpts.prototype, \"_subscribe\", {\n get: $util.oneOfGetter($oneOfFields = [\"subscribe\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * SubOpts _topicID.\n * @member {\"topicID\"|undefined} _topicID\n * @memberof RPC.SubOpts\n * @instance\n */\n Object.defineProperty(SubOpts.prototype, \"_topicID\", {\n get: $util.oneOfGetter($oneOfFields = [\"topicID\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified SubOpts message. Does not implicitly {@link RPC.SubOpts.verify|verify} messages.\n * @function encode\n * @memberof RPC.SubOpts\n * @static\n * @param {RPC.ISubOpts} m SubOpts message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n SubOpts.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.subscribe != null && Object.hasOwnProperty.call(m, \"subscribe\"))\n w.uint32(8).bool(m.subscribe);\n if (m.topicID != null && Object.hasOwnProperty.call(m, \"topicID\"))\n w.uint32(18).string(m.topicID);\n return w;\n };\n\n /**\n * Decodes a SubOpts message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.SubOpts\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.SubOpts} SubOpts\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n SubOpts.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.SubOpts();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.subscribe = r.bool();\n break;\n case 2:\n m.topicID = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a SubOpts message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.SubOpts\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.SubOpts} SubOpts\n */\n SubOpts.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.SubOpts)\n return d;\n var m = new $root.RPC.SubOpts();\n if (d.subscribe != null) {\n m.subscribe = Boolean(d.subscribe);\n }\n if (d.topicID != null) {\n m.topicID = String(d.topicID);\n }\n return m;\n };\n\n /**\n * Creates a plain object from a SubOpts message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.SubOpts\n * @static\n * @param {RPC.SubOpts} m SubOpts\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n SubOpts.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (m.subscribe != null && m.hasOwnProperty(\"subscribe\")) {\n d.subscribe = m.subscribe;\n if (o.oneofs)\n d._subscribe = \"subscribe\";\n }\n if (m.topicID != null && m.hasOwnProperty(\"topicID\")) {\n d.topicID = m.topicID;\n if (o.oneofs)\n d._topicID = \"topicID\";\n }\n return d;\n };\n\n /**\n * Converts this SubOpts to JSON.\n * @function toJSON\n * @memberof RPC.SubOpts\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n SubOpts.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return SubOpts;\n })();\n\n RPC.Message = (function() {\n\n /**\n * Properties of a Message.\n * @memberof RPC\n * @interface IMessage\n * @property {Uint8Array|null} [from] Message from\n * @property {Uint8Array|null} [data] Message data\n * @property {Uint8Array|null} [seqno] Message seqno\n * @property {Array.<string>|null} [topicIDs] Message topicIDs\n * @property {Uint8Array|null} [signature] Message signature\n * @property {Uint8Array|null} [key] Message key\n */\n\n /**\n * Constructs a new Message.\n * @memberof RPC\n * @classdesc Represents a Message.\n * @implements IMessage\n * @constructor\n * @param {RPC.IMessage=} [p] Properties to set\n */\n function Message(p) {\n this.topicIDs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Message from.\n * @member {Uint8Array|null|undefined} from\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.from = null;\n\n /**\n * Message data.\n * @member {Uint8Array|null|undefined} data\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.data = null;\n\n /**\n * Message seqno.\n * @member {Uint8Array|null|undefined} seqno\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.seqno = null;\n\n /**\n * Message topicIDs.\n * @member {Array.<string>} topicIDs\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.topicIDs = $util.emptyArray;\n\n /**\n * Message signature.\n * @member {Uint8Array|null|undefined} signature\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.signature = null;\n\n /**\n * Message key.\n * @member {Uint8Array|null|undefined} key\n * @memberof RPC.Message\n * @instance\n */\n Message.prototype.key = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Message _from.\n * @member {\"from\"|undefined} _from\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_from\", {\n get: $util.oneOfGetter($oneOfFields = [\"from\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _data.\n * @member {\"data\"|undefined} _data\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_data\", {\n get: $util.oneOfGetter($oneOfFields = [\"data\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _seqno.\n * @member {\"seqno\"|undefined} _seqno\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_seqno\", {\n get: $util.oneOfGetter($oneOfFields = [\"seqno\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _signature.\n * @member {\"signature\"|undefined} _signature\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_signature\", {\n get: $util.oneOfGetter($oneOfFields = [\"signature\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Message _key.\n * @member {\"key\"|undefined} _key\n * @memberof RPC.Message\n * @instance\n */\n Object.defineProperty(Message.prototype, \"_key\", {\n get: $util.oneOfGetter($oneOfFields = [\"key\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Message message. Does not implicitly {@link RPC.Message.verify|verify} messages.\n * @function encode\n * @memberof RPC.Message\n * @static\n * @param {RPC.IMessage} m Message message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Message.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.from != null && Object.hasOwnProperty.call(m, \"from\"))\n w.uint32(10).bytes(m.from);\n if (m.data != null && Object.hasOwnProperty.call(m, \"data\"))\n w.uint32(18).bytes(m.data);\n if (m.seqno != null && Object.hasOwnProperty.call(m, \"seqno\"))\n w.uint32(26).bytes(m.seqno);\n if (m.topicIDs != null && m.topicIDs.length) {\n for (var i = 0; i < m.topicIDs.length; ++i)\n w.uint32(34).string(m.topicIDs[i]);\n }\n if (m.signature != null && Object.hasOwnProperty.call(m, \"signature\"))\n w.uint32(42).bytes(m.signature);\n if (m.key != null && Object.hasOwnProperty.call(m, \"key\"))\n w.uint32(50).bytes(m.key);\n return w;\n };\n\n /**\n * Decodes a Message message from the specified reader or buffer.\n * @function decode\n * @memberof RPC.Message\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {RPC.Message} Message\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Message.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.RPC.Message();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.from = r.bytes();\n break;\n case 2:\n m.data = r.bytes();\n break;\n case 3:\n m.seqno = r.bytes();\n break;\n case 4:\n if (!(m.topicIDs && m.topicIDs.length))\n m.topicIDs = [];\n m.topicIDs.push(r.string());\n break;\n case 5:\n m.signature = r.bytes();\n break;\n case 6:\n m.key = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Message message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof RPC.Message\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {RPC.Message} Message\n */\n Message.fromObject = function fromObject(d) {\n if (d instanceof $root.RPC.Message)\n return d;\n var m = new $root.RPC.Message();\n if (d.from != null) {\n if (typeof d.from === \"string\")\n $util.base64.decode(d.from, m.from = $util.newBuffer($util.base64.length(d.from)), 0);\n else if (d.from.length)\n m.from = d.from;\n }\n if (d.data != null) {\n if (typeof d.data === \"string\")\n $util.base64.decode(d.data, m.data = $util.newBuffer($util.base64.length(d.data)), 0);\n else if (d.data.length)\n m.data = d.data;\n }\n if (d.seqno != null) {\n if (typeof d.seqno === \"string\")\n $util.base64.decode(d.seqno, m.seqno = $util.newBuffer($util.base64.length(d.seqno)), 0);\n else if (d.seqno.length)\n m.seqno = d.seqno;\n }\n if (d.topicIDs) {\n if (!Array.isArray(d.topicIDs))\n throw TypeError(\".RPC.Message.topicIDs: array expected\");\n m.topicIDs = [];\n for (var i = 0; i < d.topicIDs.length; ++i) {\n m.topicIDs[i] = String(d.topicIDs[i]);\n }\n }\n if (d.signature != null) {\n if (typeof d.signature === \"string\")\n $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0);\n else if (d.signature.length)\n m.signature = d.signature;\n }\n if (d.key != null) {\n if (typeof d.key === \"string\")\n $util.base64.decode(d.key, m.key = $util.newBuffer($util.base64.length(d.key)), 0);\n else if (d.key.length)\n m.key = d.key;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Message message. Also converts values to other types if specified.\n * @function toObject\n * @memberof RPC.Message\n * @static\n * @param {RPC.Message} m Message\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Message.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.topicIDs = [];\n }\n if (m.from != null && m.hasOwnProperty(\"from\")) {\n d.from = o.bytes === String ? $util.base64.encode(m.from, 0, m.from.length) : o.bytes === Array ? Array.prototype.slice.call(m.from) : m.from;\n if (o.oneofs)\n d._from = \"from\";\n }\n if (m.data != null && m.hasOwnProperty(\"data\")) {\n d.data = o.bytes === String ? $util.base64.encode(m.data, 0, m.data.length) : o.bytes === Array ? Array.prototype.slice.call(m.data) : m.data;\n if (o.oneofs)\n d._data = \"data\";\n }\n if (m.seqno != null && m.hasOwnProperty(\"seqno\")) {\n d.seqno = o.bytes === String ? $util.base64.encode(m.seqno, 0, m.seqno.length) : o.bytes === Array ? Array.prototype.slice.call(m.seqno) : m.seqno;\n if (o.oneofs)\n d._seqno = \"seqno\";\n }\n if (m.topicIDs && m.topicIDs.length) {\n d.topicIDs = [];\n for (var j = 0; j < m.topicIDs.length; ++j) {\n d.topicIDs[j] = m.topicIDs[j];\n }\n }\n if (m.signature != null && m.hasOwnProperty(\"signature\")) {\n d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature;\n if (o.oneofs)\n d._signature = \"signature\";\n }\n if (m.key != null && m.hasOwnProperty(\"key\")) {\n d.key = o.bytes === String ? $util.base64.encode(m.key, 0, m.key.length) : o.bytes === Array ? Array.prototype.slice.call(m.key) : m.key;\n if (o.oneofs)\n d._key = \"key\";\n }\n return d;\n };\n\n /**\n * Converts this Message to JSON.\n * @function toJSON\n * @memberof RPC.Message\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Message.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Message;\n })();\n\n return RPC;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst PeerId = require('peer-id')\nconst { RPC } = require('./rpc')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst SignPrefix = uint8ArrayFromString('libp2p-pubsub:')\nconst { normalizeOutRpcMessage } = require('../utils')\n\n/**\n * @typedef {import('..').InMessage}\n */\n\n/**\n * Signs the provided message with the given `peerId`\n *\n * @param {PeerId} peerId\n * @param {InMessage} message\n * @returns {Promise<InMessage>}\n */\nasync function signMessage (peerId, message) {\n // Get the message in bytes, and prepend with the pubsub prefix\n const bytes = uint8ArrayConcat([\n SignPrefix,\n RPC.Message.encode(normalizeOutRpcMessage(message)).finish()\n ])\n\n const signature = await peerId.privKey.sign(bytes)\n\n return {\n ...message,\n signature: signature,\n key: peerId.pubKey.bytes\n }\n}\n\n/**\n * Verifies the signature of the given message\n *\n * @param {InMessage} message\n * @returns {Promise<boolean>}\n */\nasync function verifySignature (message) {\n if (!message.signature) {\n throw new Error('Message must contain a signature to be verified')\n }\n\n if (!message.from) {\n throw new Error('Message must contain a from property to be verified')\n }\n\n // Get message sans the signature\n const bytes = uint8ArrayConcat([\n SignPrefix,\n RPC.Message.encode({\n ...message,\n from: PeerId.createFromB58String(message.from).toBytes(),\n signature: undefined,\n key: undefined\n }).finish()\n ])\n\n // Get the public key\n const pubKey = await messagePublicKey(message)\n\n // verify the base message\n return pubKey.verify(bytes, message.signature)\n}\n\n/**\n * Returns the PublicKey associated with the given message.\n * If no, valid PublicKey can be retrieved an error will be returned.\n *\n * @param {InMessage} message\n * @returns {Promise<PublicKey>}\n */\nasync function messagePublicKey (message) {\n // should be available in the from property of the message (peer id)\n if (!message.from) {\n throw new Error('Could not get the public key from the originator id')\n }\n\n const from = PeerId.createFromB58String(message.from)\n\n if (message.key) {\n const keyPeerId = await PeerId.createFromPubKey(message.key)\n\n // the key belongs to the sender, return the key\n if (keyPeerId.equals(from)) return keyPeerId.pubKey\n // We couldn't validate pubkey is from the originator, error\n throw new Error('Public Key does not match the originator')\n } else if (from.pubKey) {\n return from.pubKey\n } else {\n throw new Error('Could not get the public key from the originator id')\n }\n}\n\n/**\n * @typedef {import('..').InMessage} InMessage\n * @typedef {import('libp2p-crypto').PublicKey} PublicKey\n */\n\nmodule.exports = {\n messagePublicKey,\n signMessage,\n SignPrefix,\n verifySignature\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p-pubsub:peer-streams'), {\n error: debug('libp2p-pubsub:peer-streams:err')\n})\nconst { EventEmitter } = require('events')\n\nconst lp = require('it-length-prefixed')\nconst pushable = require('it-pushable')\nconst { pipe } = require('it-pipe')\nconst { source: abortable } = require('abortable-iterator')\n\n/**\n * @typedef {import('../stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('it-pushable').Pushable<Uint8Array>} PushableStream\n */\n\n/**\n * Thin wrapper around a peer's inbound / outbound pubsub streams\n */\nclass PeerStreams extends EventEmitter {\n /**\n * @param {object} properties - properties of the PeerStreams.\n * @param {PeerId} properties.id\n * @param {string} properties.protocol\n */\n constructor ({ id, protocol }) {\n super()\n\n /**\n * @type {import('peer-id')}\n */\n this.id = id\n /**\n * Established protocol\n *\n * @type {string}\n */\n this.protocol = protocol\n /**\n * The raw outbound stream, as retrieved from conn.newStream\n *\n * @private\n * @type {null|MuxedStream}\n */\n this._rawOutboundStream = null\n /**\n * The raw inbound stream, as retrieved from the callback from libp2p.handle\n *\n * @private\n * @type {null|MuxedStream}\n */\n this._rawInboundStream = null\n /**\n * An AbortController for controlled shutdown of the inbound stream\n *\n * @private\n * @type {AbortController}\n */\n this._inboundAbortController = new AbortController()\n /**\n * Write stream -- its preferable to use the write method\n *\n * @type {null|PushableStream}\n */\n this.outboundStream = null\n /**\n * Read stream\n *\n * @type {null| AsyncIterable<Uint8Array>}\n */\n this.inboundStream = null\n }\n\n /**\n * Do we have a connection to read from?\n *\n * @type {boolean}\n */\n get isReadable () {\n return Boolean(this.inboundStream)\n }\n\n /**\n * Do we have a connection to write on?\n *\n * @type {boolean}\n */\n get isWritable () {\n return Boolean(this.outboundStream)\n }\n\n /**\n * Send a message to this peer.\n * Throws if there is no `stream` to write to available.\n *\n * @param {Uint8Array} data\n * @returns {void}\n */\n write (data) {\n if (!this.outboundStream) {\n const id = this.id.toB58String()\n throw new Error('No writable connection to ' + id)\n }\n\n this.outboundStream.push(data)\n }\n\n /**\n * Attach a raw inbound stream and setup a read stream\n *\n * @param {MuxedStream} stream\n * @returns {AsyncIterable<Uint8Array>}\n */\n attachInboundStream (stream) {\n // Create and attach a new inbound stream\n // The inbound stream is:\n // - abortable, set to only return on abort, rather than throw\n // - transformed with length-prefix transform\n this._rawInboundStream = stream\n this.inboundStream = abortable(\n pipe(\n this._rawInboundStream,\n lp.decode()\n ),\n this._inboundAbortController.signal,\n { returnOnAbort: true }\n )\n\n this.emit('stream:inbound')\n return this.inboundStream\n }\n\n /**\n * Attach a raw outbound stream and setup a write stream\n *\n * @param {MuxedStream} stream\n * @returns {Promise<void>}\n */\n async attachOutboundStream (stream) {\n // If an outbound stream already exists, gently close it\n const _prevStream = this.outboundStream\n if (this.outboundStream) {\n // End the stream without emitting a close event\n await this.outboundStream.end()\n }\n\n this._rawOutboundStream = stream\n this.outboundStream = pushable({\n onEnd: (shouldEmit) => {\n // close writable side of the stream\n this._rawOutboundStream && this._rawOutboundStream.reset && this._rawOutboundStream.reset()\n this._rawOutboundStream = null\n this.outboundStream = null\n if (shouldEmit) {\n this.emit('close')\n }\n }\n })\n\n pipe(\n this.outboundStream,\n lp.encode(),\n this._rawOutboundStream\n ).catch(/** @param {Error} err */ err => {\n log.error(err)\n })\n\n // Only emit if the connection is new\n if (!_prevStream) {\n this.emit('stream:outbound')\n }\n }\n\n /**\n * Closes the open connection to peer\n *\n * @returns {void}\n */\n close () {\n // End the outbound stream\n if (this.outboundStream) {\n this.outboundStream.end()\n }\n // End the inbound stream\n if (this.inboundStream) {\n this._inboundAbortController.abort()\n }\n\n this._rawOutboundStream = null\n this.outboundStream = null\n this._rawInboundStream = null\n this.inboundStream = null\n this.emit('close')\n }\n}\n\nmodule.exports = PeerStreams\n","'use strict'\n\n/**\n * Enum for Signature Policy\n * Details how message signatures are produced/consumed\n */\nconst SignaturePolicy = {\n /**\n * On the producing side:\n * * Build messages with the signature, key (from may be enough for certain inlineable public key types), from and seqno fields.\n *\n * On the consuming side:\n * * Enforce the fields to be present, reject otherwise.\n * * Propagate only if the fields are valid and signature can be verified, reject otherwise.\n */\n StrictSign: /** @type {'StrictSign'} */ ('StrictSign'),\n /**\n * On the producing side:\n * * Build messages without the signature, key, from and seqno fields.\n * * The corresponding protobuf key-value pairs are absent from the marshalled message, not just empty.\n *\n * On the consuming side:\n * * Enforce the fields to be absent, reject otherwise.\n * * Propagate only if the fields are absent, reject otherwise.\n * * A message_id function will not be able to use the above fields, and should instead rely on the data field. A commonplace strategy is to calculate a hash.\n */\n StrictNoSign: /** @type {'StrictNoSign'} */ ('StrictNoSign')\n}\nexports.SignaturePolicy = SignaturePolicy\n\n/**\n * @typedef {SignaturePolicy[keyof SignaturePolicy]} SignaturePolicyType\n */\n","'use strict'\n\n// @ts-ignore libp2p crypto has no types\nconst randomBytes = require('libp2p-crypto/src/random-bytes')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst PeerId = require('peer-id')\nconst { sha256 } = require('multiformats/hashes/sha2')\n\n/**\n * @typedef {import('./message/rpc').RPC.IMessage} IMessage\n * @typedef {import('./message/rpc').RPC.Message} Message\n * @typedef {import('.').InMessage} NormalizedIMessage\n */\n\n/**\n * Generatea random sequence number.\n *\n * @returns {Uint8Array}\n * @private\n */\nconst randomSeqno = () => {\n return randomBytes(8)\n}\n\n/**\n * Generate a message id, based on the `from` and `seqno`.\n *\n * @param {Uint8Array|string} from\n * @param {Uint8Array} seqno\n * @returns {Uint8Array}\n * @private\n */\nconst msgId = (from, seqno) => {\n let fromBytes\n\n if (from instanceof Uint8Array) {\n fromBytes = PeerId.createFromBytes(from).id\n } else {\n fromBytes = PeerId.parse(from).id\n }\n\n const msgId = new Uint8Array(fromBytes.length + seqno.length)\n msgId.set(fromBytes, 0)\n msgId.set(seqno, fromBytes.length)\n return msgId\n}\n\n/**\n * Generate a message id, based on message `data`.\n *\n * @param {Uint8Array} data\n * @private\n */\nconst noSignMsgId = (data) => sha256.encode(data)\n\n/**\n * Check if any member of the first set is also a member\n * of the second set.\n *\n * @param {Set<number>|Array<number>} a\n * @param {Set<number>|Array<number>} b\n * @returns {boolean}\n * @private\n */\nconst anyMatch = (a, b) => {\n let bHas\n if (Array.isArray(b)) {\n /**\n * @param {number} val\n */\n bHas = (val) => b.indexOf(val) > -1\n } else {\n /**\n * @param {number} val\n */\n bHas = (val) => b.has(val)\n }\n\n for (const val of a) {\n if (bHas(val)) {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Make everything an array.\n *\n * @template T\n * @param {T|T[]} maybeArray\n * @returns {T[]}\n * @private\n */\nconst ensureArray = (maybeArray) => {\n if (!Array.isArray(maybeArray)) {\n return [maybeArray]\n }\n\n return maybeArray\n}\n\n/**\n * Ensures `message.from` is base58 encoded\n *\n * @template {{from?:any}} T\n * @param {T & IMessage} message\n * @param {string} [peerId]\n * @returns {NormalizedIMessage}\n */\nconst normalizeInRpcMessage = (message, peerId) => {\n /** @type {NormalizedIMessage} */\n // @ts-ignore receivedFrom not yet defined\n const m = Object.assign({}, message)\n if (message.from instanceof Uint8Array) {\n m.from = uint8ArrayToString(message.from, 'base58btc')\n }\n if (peerId) {\n m.receivedFrom = peerId\n }\n return m\n}\n\n/**\n * @template {{from?:any, data?:any}} T\n *\n * @param {T & NormalizedIMessage} message\n * @returns {Message}\n */\nconst normalizeOutRpcMessage = (message) => {\n /** @type {Message} */\n // @ts-ignore from not yet defined\n const m = Object.assign({}, message)\n if (typeof message.from === 'string') {\n m.from = uint8ArrayFromString(message.from, 'base58btc')\n }\n if (typeof message.data === 'string') {\n m.data = uint8ArrayFromString(message.data)\n }\n return m\n}\n\nmodule.exports = {\n randomSeqno,\n msgId,\n noSignMsgId,\n anyMatch,\n ensureArray,\n normalizeInRpcMessage,\n normalizeOutRpcMessage\n}\n","'use strict'\n\nconst noop = () => {}\nconst topologySymbol = Symbol.for('@libp2p/js-interfaces/topology')\n\n/**\n * @typedef {import('peer-id')} PeerId\n */\n\n/**\n * @typedef {Object} Options\n * @property {number} [min=0] - minimum needed connections.\n * @property {number} [max=Infinity] - maximum needed connections.\n * @property {Handlers} [handlers]\n *\n * @typedef {Object} Handlers\n * @property {(peerId: PeerId, conn: Connection) => void} [onConnect] - protocol \"onConnect\" handler\n * @property {(peerId: PeerId, error?:Error) => void} [onDisconnect] - protocol \"onDisconnect\" handler\n *\n * @typedef {import('../connection/connection')} Connection\n */\n\nclass Topology {\n /**\n * @param {Options} options\n */\n constructor ({\n min = 0,\n max = Infinity,\n handlers = {}\n }) {\n this.min = min\n this.max = max\n\n // Handlers\n this._onConnect = handlers.onConnect || noop\n this._onDisconnect = handlers.onDisconnect || noop\n\n /**\n * Set of peers that support the protocol.\n *\n * @type {Set<string>}\n */\n this.peers = new Set()\n }\n\n get [Symbol.toStringTag] () {\n return 'Topology'\n }\n\n get [topologySymbol] () {\n return true\n }\n\n /**\n * Checks if the given value is a Topology instance.\n *\n * @param {any} other\n * @returns {other is Topology}\n */\n static isTopology (other) {\n return Boolean(other && other[topologySymbol])\n }\n\n /**\n * @param {any} registrar\n */\n async setRegistrar (registrar) {\n this._registrar = registrar\n }\n\n /**\n * Notify about peer disconnected event.\n *\n * @param {PeerId} peerId\n * @returns {void}\n */\n disconnect (peerId) {\n this._onDisconnect(peerId)\n }\n}\n\nmodule.exports = Topology\n","'use strict'\n\nconst Topology = require('./index')\nconst multicodecTopologySymbol = Symbol.for('@libp2p/js-interfaces/topology/multicodec-topology')\nconst debug = require('debug')\n\nconst log = Object.assign(debug('libp2p:topology:multicodec-topology'), {\n error: debug('libp2p:topology:multicodec-topology:error')\n})\n\nclass MulticodecTopology extends Topology {\n /**\n * @param {TopologyOptions & MulticodecOptions} props\n */\n constructor ({\n min,\n max,\n multicodecs,\n handlers\n }) {\n super({ min, max, handlers })\n\n if (!multicodecs) {\n throw new Error('one or more multicodec should be provided')\n }\n\n if (!handlers) {\n throw new Error('the handlers should be provided')\n }\n\n if (typeof handlers.onConnect !== 'function') {\n throw new Error('the \\'onConnect\\' handler must be provided')\n }\n\n if (typeof handlers.onDisconnect !== 'function') {\n throw new Error('the \\'onDisconnect\\' handler must be provided')\n }\n\n this.multicodecs = Array.isArray(multicodecs) ? multicodecs : [multicodecs]\n this._registrar = undefined\n\n this._onProtocolChange = this._onProtocolChange.bind(this)\n this._onPeerConnect = this._onPeerConnect.bind(this)\n }\n\n get [Symbol.toStringTag] () {\n return 'Topology'\n }\n\n get [multicodecTopologySymbol] () {\n return true\n }\n\n /**\n * Checks if the given value is a `MulticodecTopology` instance.\n *\n * @param {any} other\n * @returns {other is MulticodecTopology}\n */\n static isMulticodecTopology (other) {\n return Boolean(other && other[multicodecTopologySymbol])\n }\n\n /**\n * @param {any} registrar\n */\n async setRegistrar (registrar) { // eslint-disable-line\n this._registrar = registrar\n this._registrar.peerStore.on('change:protocols', this._onProtocolChange)\n this._registrar.connectionManager.on('peer:connect', this._onPeerConnect)\n\n // Update topology peers\n await this._updatePeers(this._registrar.peerStore.getPeers())\n }\n\n /**\n * Update topology.\n *\n * @param {AsyncIterable<any> | Iterable<any>} peerDataIterable\n */\n async _updatePeers (peerDataIterable) {\n for await (const { id, protocols } of peerDataIterable) {\n if (this.multicodecs.filter(multicodec => protocols.includes(multicodec)).length) {\n // Add the peer regardless of whether or not there is currently a connection\n this.peers.add(id.toB58String())\n // If there is a connection, call _onConnect\n const connection = this._registrar.getConnection(id)\n connection && this._onConnect(id, connection)\n } else {\n // Remove any peers we might be tracking that are no longer of value to us\n this.peers.delete(id.toB58String())\n }\n }\n }\n\n /**\n * Check if a new peer support the multicodecs for this topology.\n *\n * @param {Object} props\n * @param {PeerId} props.peerId\n * @param {Array<string>} props.protocols\n */\n async _onProtocolChange ({ peerId, protocols }) {\n try {\n const hadPeer = this.peers.has(peerId.toB58String())\n const hasProtocol = protocols.filter(protocol => this.multicodecs.includes(protocol))\n\n // Not supporting the protocol anymore?\n if (hadPeer && hasProtocol.length === 0) {\n this._onDisconnect(peerId)\n }\n\n // New to protocol support\n for (const protocol of protocols) {\n if (this.multicodecs.includes(protocol)) {\n const peerData = await this._registrar.peerStore.get(peerId)\n await this._updatePeers([peerData])\n return\n }\n }\n } catch (err) {\n log.error(err)\n }\n }\n\n /**\n * Verify if a new connected peer has a topology multicodec and call _onConnect.\n *\n * @param {Connection} connection\n */\n async _onPeerConnect (connection) {\n try {\n // @ts-ignore - remotePeer does not existist on Connection\n const peerId = connection.remotePeer\n const protocols = await this._registrar.peerStore.protoBook.get(peerId)\n\n if (!protocols) {\n return\n }\n\n if (this.multicodecs.find(multicodec => protocols.includes(multicodec))) {\n this.peers.add(peerId.toB58String())\n this._onConnect(peerId, connection)\n }\n } catch (err) {\n log.error(err)\n }\n }\n}\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr')} Multiaddr\n * @typedef {import('../connection/connection')} Connection\n * @typedef {import('.').Options} TopologyOptions\n * @typedef {Object} MulticodecOptions\n * @property {string[]} multicodecs - protocol multicodecs\n * @property {Required<Handlers>} handlers\n * @typedef {import('.').Handlers} Handlers\n */\nmodule.exports = MulticodecTopology\n","'use strict'\n\nconst varint = require('varint')\nconst BufferList = require('bl/BufferList')\n\n// Decode a chunk and yield an _array_ of decoded messages\nmodule.exports = source => (async function * decode () {\n const decoder = new Decoder()\n for await (const chunk of source) {\n const msgs = decoder.write(chunk)\n if (msgs.length) yield msgs\n }\n})()\n\nclass Decoder {\n constructor () {\n this._buffer = new BufferList()\n // optimization to allow varint to take a BufferList (well a proxy to)\n this._bufferProxy = new Proxy({}, {\n get: (_, prop) => prop[0] === 'l' ? this._buffer[prop] : this._buffer.get(parseInt(prop))\n })\n this._headerInfo = null\n }\n\n /**\n * @param {Uint8Array|BufferList} chunk\n * @returns {object[]} An array of message objects\n */\n write (chunk) {\n if (!chunk || !chunk.length) return []\n\n this._buffer.append(chunk)\n const msgs = []\n\n while (this._buffer.length) {\n if (!this._headerInfo) {\n try {\n this._headerInfo = this._decodeHeader(this._bufferProxy)\n } catch (_) {\n break // We haven't received enough data yet\n }\n }\n\n const { id, type, length, offset } = this._headerInfo\n const bufferedDataLength = this._buffer.length - offset\n\n if (bufferedDataLength < length) break // not enough data yet\n\n msgs.push({ id, type, data: this._buffer.shallowSlice(offset, offset + length) })\n\n this._buffer.consume(offset + length)\n this._headerInfo = null\n }\n\n return msgs\n }\n\n /**\n * Attempts to decode the message header from the buffer\n *\n * @private\n * @param {Uint8Array} data\n * @returns {*} message header (id, type, offset, length)\n */\n _decodeHeader (data) {\n const h = varint.decode(data)\n let offset = varint.decode.bytes\n const length = varint.decode(data, offset)\n offset += varint.decode.bytes\n return { id: h >> 3, type: h & 7, offset, length }\n }\n}\n","'use strict'\n\nconst varint = require('varint')\nconst BufferList = require('bl/BufferList')\n\nconst POOL_SIZE = 10 * 1024\n\nclass Encoder {\n constructor () {\n this._pool = new Uint8Array(POOL_SIZE)\n this._poolOffset = 0\n }\n\n /**\n * Encodes the given message and returns it and its header\n *\n * @param {*} msg - The message object to encode\n * @returns {Uint8Array|Uint8Array[]}\n */\n write (msg) {\n const pool = this._pool\n let offset = this._poolOffset\n\n varint.encode(msg.id << 3 | msg.type, pool, offset)\n offset += varint.encode.bytes\n varint.encode(msg.data ? msg.data.length : 0, pool, offset)\n offset += varint.encode.bytes\n\n const header = pool.subarray(this._poolOffset, offset)\n\n if (POOL_SIZE - offset < 100) {\n this._pool = new Uint8Array(POOL_SIZE)\n this._poolOffset = 0\n } else {\n this._poolOffset = offset\n }\n\n if (!msg.data) return header\n\n return [header, msg.data]\n }\n}\n\nconst encoder = new Encoder()\n\n// Encode one or more messages and yield a BufferList of encoded messages\nmodule.exports = source => (async function * encode () {\n for await (const msg of source) {\n if (Array.isArray(msg)) {\n yield new BufferList(msg.map(m => encoder.write(m)))\n } else {\n yield new BufferList(encoder.write(msg))\n }\n }\n})()\n","'use strict'\n\nexports.encode = require('./encode')\nexports.decode = require('./decode')\n","'use strict'\n\nmodule.exports = require('./mplex')\n","'use strict'\n\nconst MessageTypes = Object.freeze({\n NEW_STREAM: 0,\n MESSAGE_RECEIVER: 1,\n MESSAGE_INITIATOR: 2,\n CLOSE_RECEIVER: 3,\n CLOSE_INITIATOR: 4,\n RESET_RECEIVER: 5,\n RESET_INITIATOR: 6\n})\n\nexports.MessageTypes = MessageTypes\n\nexports.InitiatorMessageTypes = Object.freeze({\n NEW_STREAM: MessageTypes.NEW_STREAM,\n MESSAGE: MessageTypes.MESSAGE_INITIATOR,\n CLOSE: MessageTypes.CLOSE_INITIATOR,\n RESET: MessageTypes.RESET_INITIATOR\n})\n\nexports.ReceiverMessageTypes = Object.freeze({\n MESSAGE: MessageTypes.MESSAGE_RECEIVER,\n CLOSE: MessageTypes.CLOSE_RECEIVER,\n RESET: MessageTypes.RESET_RECEIVER\n})\n\nexports.MessageTypeNames = Object.freeze(\n Object.entries(MessageTypes).reduce((obj, e) => {\n obj[e[1]] = e[0]\n return obj\n }, {})\n)\n","'use strict'\n\nconst pipe = require('it-pipe')\nconst pushable = require('it-pushable')\nconst log = require('debug')('libp2p:mplex')\nconst abortable = require('abortable-iterator')\nconst Coder = require('./coder')\nconst restrictSize = require('./restrict-size')\nconst { MessageTypes, MessageTypeNames } = require('./message-types')\nconst createStream = require('./stream')\n\nclass Mplex {\n /**\n * @class\n * @param {object} options\n * @param {function(*)} options.onStream - Called whenever an inbound stream is created\n * @param {function(*)} options.onStreamEnd - Called whenever a stream ends\n * @param {AbortSignal} options.signal - An AbortController signal\n */\n constructor (options) {\n options = options || {}\n options = typeof options === 'function' ? { onStream: options } : options\n\n this._streamId = 0\n this._streams = {\n /**\n * @type {Map<number, *>} Stream to ids map\n */\n initiators: new Map(),\n /**\n * @type {Map<number, *>} Stream to ids map\n */\n receivers: new Map()\n }\n this._options = options\n\n /**\n * An iterable sink\n */\n this.sink = this._createSink()\n\n /**\n * An iterable source\n */\n this.source = this._createSource()\n\n /**\n * @property {Function} onStream\n */\n this.onStream = options.onStream\n\n /**\n * @property {Function} onStreamEnd\n */\n this.onStreamEnd = options.onStreamEnd\n }\n\n /**\n * Returns a Map of streams and their ids\n *\n * @returns {Map<number,*>}\n */\n get streams () {\n // Inbound and Outbound streams may have the same ids, so we need to make those unique\n const streams = []\n this._streams.initiators.forEach(stream => {\n streams.push(stream)\n })\n this._streams.receivers.forEach(stream => {\n streams.push(stream)\n })\n return streams\n }\n\n /**\n * Initiate a new stream with the given name. If no name is\n * provided, the id of th stream will be used.\n *\n * @param {string} [name] - If name is not a string it will be cast to one\n * @returns {Stream}\n */\n newStream (name) {\n const id = this._streamId++\n name = name == null ? id.toString() : String(name)\n const registry = this._streams.initiators\n return this._newStream({ id, name, type: 'initiator', registry })\n }\n\n /**\n * Called whenever an inbound stream is created\n *\n * @private\n * @param {*} options\n * @param {number} options.id\n * @param {string} options.name\n * @returns {*} A muxed stream\n */\n _newReceiverStream ({ id, name }) {\n const registry = this._streams.receivers\n return this._newStream({ id, name, type: 'receiver', registry })\n }\n\n /**\n * Creates a new stream\n *\n * @private\n * @param {object} options\n * @param {number} options.id\n * @param {string} options.name\n * @param {string} options.type\n * @param {Map<number, *>} options.registry - A map of streams to their ids\n * @returns {*} A muxed stream\n */\n _newStream ({ id, name, type, registry }) {\n if (registry.has(id)) {\n throw new Error(`${type} stream ${id} already exists!`)\n }\n log('new %s stream %s %s', type, id, name)\n const send = msg => {\n if (log.enabled) {\n log('%s stream %s %s send', type, id, name, { ...msg, type: MessageTypeNames[msg.type], data: msg.data && msg.data.slice() })\n }\n return this.source.push(msg)\n }\n const onEnd = () => {\n log('%s stream %s %s ended', type, id, name)\n registry.delete(id)\n this.onStreamEnd && this.onStreamEnd(stream)\n }\n const stream = createStream({ id, name, send, type, onEnd, maxMsgSize: this._options.maxMsgSize })\n registry.set(id, stream)\n return stream\n }\n\n /**\n * Creates a sink with an abortable source. Incoming messages will\n * also have their size restricted. All messages will be varint decoded.\n *\n * @private\n * @returns {*} Returns an iterable sink\n */\n _createSink () {\n return async source => {\n if (this._options.signal) {\n source = abortable(source, this._options.signal)\n }\n\n try {\n await pipe(\n source,\n Coder.decode,\n restrictSize(this._options.maxMsgSize),\n async source => {\n for await (const msgs of source) {\n for (const msg of msgs) {\n this._handleIncoming(msg)\n }\n }\n }\n )\n } catch (err) {\n log('error in sink', err)\n return this.source.end(err) // End the source with an error\n }\n\n this.source.end()\n }\n }\n\n /**\n * Creates a source that restricts outgoing message sizes\n * and varint encodes them.\n *\n * @private\n * @returns {*} An iterable source\n */\n _createSource () {\n const onEnd = err => {\n const { initiators, receivers } = this._streams\n // Abort all the things!\n for (const s of initiators.values()) s.abort(err)\n for (const s of receivers.values()) s.abort(err)\n }\n const source = pushable({ onEnd, writev: true })\n return Object.assign(Coder.encode(source), {\n push: source.push,\n end: source.end,\n return: source.return\n })\n }\n\n /**\n * @private\n * @param {object} options\n * @param {number} options.id\n * @param {string} options.type\n * @param {Uint8Array|BufferList} options.data\n * @returns {void}\n */\n _handleIncoming ({ id, type, data }) {\n if (log.enabled) {\n log('incoming message', { id, type: MessageTypeNames[type], data: data.slice() })\n }\n\n // Create a new stream?\n if (type === MessageTypes.NEW_STREAM && this.onStream) {\n const stream = this._newReceiverStream({ id, name: data.toString() })\n return this.onStream(stream)\n }\n\n const list = type & 1 ? this._streams.initiators : this._streams.receivers\n const stream = list.get(id)\n\n if (!stream) return log('missing stream %s', id)\n\n switch (type) {\n case MessageTypes.MESSAGE_INITIATOR:\n case MessageTypes.MESSAGE_RECEIVER:\n stream.source.push(data)\n break\n case MessageTypes.CLOSE_INITIATOR:\n case MessageTypes.CLOSE_RECEIVER:\n stream.close()\n break\n case MessageTypes.RESET_INITIATOR:\n case MessageTypes.RESET_RECEIVER:\n stream.reset()\n break\n default:\n log('unknown message type %s', type)\n }\n }\n}\n\nMplex.multicodec = '/mplex/6.7.0'\n\nmodule.exports = Mplex\n","'use strict'\n\nconst MAX_MSG_SIZE = 1 << 20 // 1MB\n\n/**\n * Creates an iterable transform that restricts message sizes to\n * the given maximum size.\n *\n * @param {number} [max] - The maximum message size. Defaults to 1MB\n * @returns {*} An iterable transform.\n */\nmodule.exports = max => {\n max = max || MAX_MSG_SIZE\n\n const checkSize = msg => {\n if (msg.data && msg.data.length > max) {\n throw Object.assign(new Error('message size too large!'), { code: 'ERR_MSG_TOO_BIG' })\n }\n }\n\n return source => {\n return (async function * restrictSize () {\n for await (const msg of source) {\n if (Array.isArray(msg)) {\n msg.forEach(checkSize)\n } else {\n checkSize(msg)\n }\n yield msg\n }\n })()\n }\n}\n\nmodule.exports.MAX_MSG_SIZE = MAX_MSG_SIZE\n","'use strict'\n\nconst abortable = require('abortable-iterator')\nconst AbortController = require('abort-controller')\nconst log = require('debug')('libp2p:mplex:stream')\nconst pushable = require('it-pushable')\nconst BufferList = require('bl/BufferList')\nconst errCode = require('err-code')\nconst { MAX_MSG_SIZE } = require('./restrict-size')\nconst { InitiatorMessageTypes, ReceiverMessageTypes } = require('./message-types')\n\nconst ERR_MPLEX_STREAM_RESET = 'ERR_MPLEX_STREAM_RESET'\nconst ERR_MPLEX_STREAM_ABORT = 'ERR_MPLEX_STREAM_ABORT'\n\n/**\n * @param {object} options\n * @param {number} options.id\n * @param {string} options.name\n * @param {function(*)} options.send - Called to send data through the stream\n * @param {function(Error)} [options.onEnd] - Called whenever the stream ends\n * @param {string} [options.type] - One of ['initiator','receiver']. Defaults to 'initiator'\n * @param {number} [options.maxMsgSize] - Max size of an mplex message in bytes. Writes > size are automatically split. Defaults to 1MB\n * @returns {*} A muxed stream\n */\nmodule.exports = ({ id, name, send, onEnd = () => {}, type = 'initiator', maxMsgSize = MAX_MSG_SIZE }) => {\n const abortController = new AbortController()\n const resetController = new AbortController()\n const Types = type === 'initiator' ? InitiatorMessageTypes : ReceiverMessageTypes\n const externalId = type === 'initiator' ? (`i${id}`) : `r${id}`\n\n name = String(name == null ? id : name)\n\n let sourceEnded = false\n let sinkEnded = false\n let endErr\n\n const onSourceEnd = err => {\n if (sourceEnded) return\n sourceEnded = true\n log('%s stream %s source end', type, name, err)\n if (err && !endErr) endErr = err\n if (sinkEnded) {\n stream.timeline.close = Date.now()\n onEnd(endErr)\n }\n }\n\n const onSinkEnd = err => {\n if (sinkEnded) return\n sinkEnded = true\n log('%s stream %s sink end', type, name, err)\n if (err && !endErr) endErr = err\n if (sourceEnded) {\n stream.timeline.close = Date.now()\n onEnd(endErr)\n }\n }\n\n const stream = {\n // Close for reading\n close: () => stream.source.end(),\n // Close for reading and writing (local error)\n abort: err => {\n log('%s stream %s abort', type, name, err)\n // End the source with the passed error\n stream.source.end(err)\n abortController.abort()\n onSinkEnd(err)\n },\n // Close immediately for reading and writing (remote error)\n reset: () => {\n const err = errCode(new Error('stream reset'), ERR_MPLEX_STREAM_RESET)\n resetController.abort()\n stream.source.end(err)\n onSinkEnd(err)\n },\n sink: async source => {\n source = abortable(source, [\n { signal: abortController.signal, options: { abortMessage: 'stream aborted', abortCode: ERR_MPLEX_STREAM_ABORT } },\n { signal: resetController.signal, options: { abortMessage: 'stream reset', abortCode: ERR_MPLEX_STREAM_RESET } }\n ])\n\n if (type === 'initiator') { // If initiator, open a new stream\n send({ id, type: Types.NEW_STREAM, data: name })\n }\n\n try {\n for await (let data of source) {\n while (data.length) {\n if (data.length <= maxMsgSize) {\n send({ id, type: Types.MESSAGE, data })\n break\n }\n data = BufferList.isBufferList(data) ? data : new BufferList(data)\n send({ id, type: Types.MESSAGE, data: data.shallowSlice(0, maxMsgSize) })\n data.consume(maxMsgSize)\n }\n }\n } catch (err) {\n // Send no more data if this stream was remotely reset\n if (err.code === ERR_MPLEX_STREAM_RESET) {\n log('%s stream %s reset', type, name)\n } else {\n log('%s stream %s error', type, name, err)\n send({ id, type: Types.RESET })\n }\n\n stream.source.end(err)\n return onSinkEnd(err)\n }\n\n send({ id, type: Types.CLOSE })\n onSinkEnd()\n },\n source: pushable(onSourceEnd),\n timeline: {\n open: Date.now(),\n close: null\n },\n id: externalId\n }\n\n return stream\n}\n","'use strict'\n\nconst isPrivate = require('./multiaddr/is-private')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * @typedef {Object} Address\n * @property {Multiaddr} multiaddr peer multiaddr.\n * @property {boolean} isCertified obtained from a signed peer record.\n */\n\n/**\n * Compare function for array.sort().\n * This sort aims to move the private adresses to the end of the array.\n * In case of equality, a certified address will come first.\n *\n * @param {Address} a\n * @param {Address} b\n * @returns {number}\n */\nfunction addressesPublicFirstCompareFunction (a, b) {\n const isAPrivate = isPrivate(a.multiaddr)\n const isBPrivate = isPrivate(b.multiaddr)\n\n if (isAPrivate && !isBPrivate) {\n return 1\n } else if (!isAPrivate && isBPrivate) {\n return -1\n }\n // Check certified?\n if (a.isCertified && !b.isCertified) {\n return -1\n } else if (!a.isCertified && b.isCertified) {\n return 1\n }\n\n return 0\n}\n\n/**\n * Sort given addresses by putting public addresses first.\n * In case of equality, a certified address will come first.\n *\n * @param {Array<Address>} addresses\n * @returns {Array<Address>}\n */\nfunction publicAddressesFirst (addresses) {\n return [...addresses].sort(addressesPublicFirstCompareFunction)\n}\n\nmodule.exports.publicAddressesFirst = publicAddressesFirst\n","'use strict'\n\n/**\n * Verify if two arrays of non primitive types with the \"equals\" function are equal.\n * Compatible with multiaddr, peer-id and others.\n *\n * @param {Array<*>} a\n * @param {Array<*>} b\n * @returns {boolean}\n */\nfunction arrayEquals (a, b) {\n return a.length === b.length && b.sort() && a.sort().every((item, index) => b[index].equals(item))\n}\n\nmodule.exports = arrayEquals\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:ip-port-to-multiaddr'), {\n error: debug('libp2p:ip-port-to-multiaddr:err')\n})\nconst { Multiaddr } = require('multiaddr')\nconst errCode = require('err-code')\nconst { Address4, Address6 } = require('ip-address')\n\nconst errors = {\n ERR_INVALID_IP_PARAMETER: 'ERR_INVALID_IP_PARAMETER',\n ERR_INVALID_PORT_PARAMETER: 'ERR_INVALID_PORT_PARAMETER',\n ERR_INVALID_IP: 'ERR_INVALID_IP'\n}\n\n/**\n * Transform an IP, Port pair into a multiaddr\n *\n * @param {string} ip\n * @param {number|string} port\n */\nfunction ipPortToMultiaddr (ip, port) {\n if (typeof ip !== 'string') {\n throw errCode(new Error(`invalid ip provided: ${ip}`), errors.ERR_INVALID_IP_PARAMETER)\n }\n\n if (typeof port === 'string') {\n port = parseInt(port)\n }\n\n if (isNaN(port)) {\n throw errCode(new Error(`invalid port provided: ${port}`), errors.ERR_INVALID_PORT_PARAMETER)\n }\n\n try {\n // Test valid IPv4\n new Address4(ip) // eslint-disable-line no-new\n return new Multiaddr(`/ip4/${ip}/tcp/${port}`)\n } catch {}\n\n try {\n // Test valid IPv6\n const ip6 = new Address6(ip)\n return ip6.is4()\n ? new Multiaddr(`/ip4/${ip6.to4().correctForm()}/tcp/${port}`)\n : new Multiaddr(`/ip6/${ip}/tcp/${port}`)\n } catch (err) {\n const errMsg = `invalid ip:port for creating a multiaddr: ${ip}:${port}`\n log.error(errMsg)\n throw errCode(new Error(errMsg), errors.ERR_INVALID_IP)\n }\n}\n\nmodule.exports = ipPortToMultiaddr\n\nmodule.exports.Errors = errors\n","'use strict'\n\n// @ts-ignore is-loopback-addr does not publish types\nconst isLoopbackAddr = require('is-loopback-addr')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * Check if a given multiaddr is a loopback address.\n *\n * @param {Multiaddr} ma\n * @returns {boolean}\n */\nfunction isLoopback (ma) {\n const { address } = ma.nodeAddress()\n\n return isLoopbackAddr(address)\n}\n\nmodule.exports = isLoopback\n","'use strict'\n\n// @ts-ignore private-ip does not publish types\nconst isIpPrivate = require('private-ip')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * Check if a given multiaddr has a private address.\n *\n * @param {Multiaddr} ma\n * @returns {boolean}\n */\nfunction isPrivate (ma) {\n const { address } = ma.nodeAddress()\n\n return isIpPrivate(address)\n}\n\nmodule.exports = isPrivate\n","'use strict'\n\nconst { source: abortable } = require('abortable-iterator')\nconst debug = require('debug')\nconst log = debug('libp2p:stream:converter')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n *\n * @typedef {Object} Timeline\n * @property {number} open - connection opening timestamp.\n * @property {number} [upgraded] - connection upgraded timestamp.\n * @property {number} [close]\n */\n\n/**\n * Convert a duplex iterable into a MultiaddrConnection.\n * https://github.com/libp2p/interface-transport#multiaddrconnection\n *\n * @param {object} streamProperties\n * @param {MuxedStream} streamProperties.stream\n * @param {Multiaddr} streamProperties.remoteAddr\n * @param {Multiaddr} streamProperties.localAddr\n * @param {object} [options]\n * @param {AbortSignal} [options.signal]\n * @returns {import('libp2p-interfaces/src/transport/types').MultiaddrConnection}\n */\nfunction streamToMaConnection ({ stream, remoteAddr, localAddr }, options = {}) {\n const { sink, source } = stream\n const maConn = {\n /**\n * @param {Uint8Array} source\n */\n async sink (source) {\n if (options.signal) {\n // @ts-ignore ts infers source template will be a number\n source = abortable(source, options.signal)\n }\n\n try {\n await sink(source)\n } catch (err) {\n // If aborted we can safely ignore\n if (err.type !== 'aborted') {\n // If the source errored the socket will already have been destroyed by\n // toIterable.duplex(). If the socket errored it will already be\n // destroyed. There's nothing to do here except log the error & return.\n log(err)\n }\n }\n close()\n },\n source: options.signal ? abortable(source, options.signal) : source,\n conn: stream,\n localAddr,\n remoteAddr,\n /** @type {Timeline} */\n timeline: { open: Date.now(), close: undefined },\n close () {\n sink(new Uint8Array(0))\n return close()\n }\n }\n\n function close () {\n if (!maConn.timeline.close) {\n maConn.timeline.close = Date.now()\n }\n return Promise.resolve()\n }\n\n return maConn\n}\n\nmodule.exports = streamToMaConnection\n","'use strict'\n\n// p2p multi-address code\nexports.CODE_P2P = 421\nexports.CODE_CIRCUIT = 290\n\nexports.CODE_TCP = 6\nexports.CODE_WS = 477\nexports.CODE_WSS = 478\n\n// Time to wait for a connection to close gracefully before destroying it manually\nexports.CLOSE_TIMEOUT = 2000\n","'use strict'\n\nconst mafmt = require('mafmt')\nconst {\n CODE_CIRCUIT,\n CODE_P2P,\n CODE_TCP,\n CODE_WS,\n CODE_WSS\n} = require('./constants')\n\nmodule.exports = {\n all: (multiaddrs) => multiaddrs.filter((ma) => {\n if (ma.protoCodes().includes(CODE_CIRCUIT)) {\n return false\n }\n\n const testMa = ma.decapsulateCode(CODE_P2P)\n\n return mafmt.WebSockets.matches(testMa) ||\n mafmt.WebSocketsSecure.matches(testMa)\n }),\n dnsWss: (multiaddrs) => multiaddrs.filter((ma) => {\n if (ma.protoCodes().includes(CODE_CIRCUIT)) {\n return false\n }\n\n const testMa = ma.decapsulateCode(CODE_P2P)\n\n return mafmt.WebSocketsSecure.matches(testMa) &&\n mafmt.DNS.matches(testMa.decapsulateCode(CODE_TCP).decapsulateCode(CODE_WSS))\n }),\n dnsWsOrWss: (multiaddrs) => multiaddrs.filter((ma) => {\n if (ma.protoCodes().includes(CODE_CIRCUIT)) {\n return false\n }\n\n const testMa = ma.decapsulateCode(CODE_P2P)\n\n // WS\n if (mafmt.WebSockets.matches(testMa)) {\n return mafmt.DNS.matches(testMa.decapsulateCode(CODE_TCP).decapsulateCode(CODE_WS))\n }\n\n // WSS\n return mafmt.WebSocketsSecure.matches(testMa) &&\n mafmt.DNS.matches(testMa.decapsulateCode(CODE_TCP).decapsulateCode(CODE_WSS))\n })\n}\n","'use strict'\n\nconst connect = require('it-ws/client')\nconst withIs = require('class-is')\nconst toUri = require('multiaddr-to-uri')\nconst { AbortError } = require('abortable-iterator')\nconst pDefer = require('p-defer')\n\nconst debug = require('debug')\nconst log = debug('libp2p:websockets')\nlog.error = debug('libp2p:websockets:error')\nconst env = require('ipfs-utils/src/env')\n\nconst createListener = require('./listener')\nconst toConnection = require('./socket-to-conn')\nconst filters = require('./filters')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * @class WebSockets\n */\nclass WebSockets {\n /**\n * @class\n * @param {object} options\n * @param {Upgrader} options.upgrader\n * @param {(multiaddrs: Array<Multiaddr>) => Array<Multiaddr>} options.filter - override transport addresses filter\n */\n constructor ({ upgrader, filter }) {\n if (!upgrader) {\n throw new Error('An upgrader must be provided. See https://github.com/libp2p/interface-transport#upgrader.')\n }\n this._upgrader = upgrader\n this._filter = filter\n }\n\n /**\n * @async\n * @param {Multiaddr} ma\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] - Used to abort dial requests\n * @returns {Connection} An upgraded Connection\n */\n async dial (ma, options = {}) {\n log('dialing %s', ma)\n\n const socket = await this._connect(ma, options)\n const maConn = toConnection(socket, { remoteAddr: ma, signal: options.signal })\n log('new outbound connection %s', maConn.remoteAddr)\n\n const conn = await this._upgrader.upgradeOutbound(maConn)\n log('outbound connection %s upgraded', maConn.remoteAddr)\n return conn\n }\n\n /**\n * @private\n * @param {Multiaddr} ma\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] - Used to abort dial requests\n * @returns {Promise<WebSocket>} Resolves a extended duplex iterable on top of a WebSocket\n */\n async _connect (ma, options = {}) {\n if (options.signal && options.signal.aborted) {\n throw new AbortError()\n }\n const cOpts = ma.toOptions()\n log('dialing %s:%s', cOpts.host, cOpts.port)\n\n const errorPromise = pDefer()\n const errfn = (err) => {\n const msg = `connection error: ${err.message}`\n log.error(msg)\n\n errorPromise.reject(err)\n }\n\n const rawSocket = connect(toUri(ma), Object.assign({ binary: true }, options))\n\n if (rawSocket.socket.on) {\n rawSocket.socket.on('error', errfn)\n } else {\n rawSocket.socket.onerror = errfn\n }\n\n if (!options.signal) {\n await Promise.race([rawSocket.connected(), errorPromise.promise])\n\n log('connected %s', ma)\n return rawSocket\n }\n\n // Allow abort via signal during connect\n let onAbort\n const abort = new Promise((resolve, reject) => {\n onAbort = () => {\n reject(new AbortError())\n // FIXME: https://github.com/libp2p/js-libp2p-websockets/issues/121\n setTimeout(() => {\n rawSocket.close()\n })\n }\n\n // Already aborted?\n if (options.signal.aborted) return onAbort()\n options.signal.addEventListener('abort', onAbort)\n })\n\n try {\n await Promise.race([abort, errorPromise.promise, rawSocket.connected()])\n } finally {\n options.signal.removeEventListener('abort', onAbort)\n }\n\n log('connected %s', ma)\n return rawSocket\n }\n\n /**\n * Creates a Websockets listener. The provided `handler` function will be called\n * anytime a new incoming Connection has been successfully upgraded via\n * `upgrader.upgradeInbound`.\n *\n * @param {object} [options]\n * @param {http.Server} [options.server] - A pre-created Node.js HTTP/S server.\n * @param {function (Connection)} handler\n * @returns {Listener} A Websockets listener\n */\n createListener (options = {}, handler) {\n if (typeof options === 'function') {\n handler = options\n options = {}\n }\n\n return createListener({ handler, upgrader: this._upgrader }, options)\n }\n\n /**\n * Takes a list of `Multiaddr`s and returns only valid Websockets addresses.\n * By default, in a browser environment only DNS+WSS multiaddr is accepted,\n * while in a Node.js environment DNS+{WS, WSS} multiaddrs are accepted.\n *\n * @param {Multiaddr[]} multiaddrs\n * @returns {Multiaddr[]} Valid Websockets multiaddrs\n */\n filter (multiaddrs) {\n multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs]\n\n if (this._filter) {\n return this._filter(multiaddrs)\n }\n\n // Browser\n if (env.isBrowser || env.isWebWorker) {\n return filters.dnsWss(multiaddrs)\n }\n\n return filters.all(multiaddrs)\n }\n}\n\nmodule.exports = withIs(WebSockets, {\n className: 'WebSockets',\n symbolName: '@libp2p/js-libp2p-websockets/websockets'\n})\n","'use strict'\n\nmodule.exports = function () {\n throw new Error('WebSocket Servers can not be created in the browser!')\n}\n","'use strict'\n\nconst abortable = require('abortable-iterator')\nconst { CLOSE_TIMEOUT } = require('./constants')\nconst toMultiaddr = require('libp2p-utils/src/ip-port-to-multiaddr')\n\nconst pTimeout = require('p-timeout')\n\nconst debug = require('debug')\nconst log = debug('libp2p:websockets:socket')\nlog.error = debug('libp2p:websockets:socket:error')\n\n// Convert a stream into a MultiaddrConnection\n// https://github.com/libp2p/interface-transport#multiaddrconnection\nmodule.exports = (stream, options = {}) => {\n const maConn = {\n async sink (source) {\n if (options.signal) {\n source = abortable(source, options.signal)\n }\n\n try {\n await stream.sink((async function * () {\n for await (const chunk of source) {\n // Convert BufferList to Buffer\n yield chunk instanceof Uint8Array ? chunk : chunk.slice()\n }\n })())\n } catch (err) {\n if (err.type !== 'aborted') {\n log.error(err)\n }\n }\n },\n\n source: options.signal ? abortable(stream.source, options.signal) : stream.source,\n\n conn: stream,\n\n localAddr: options.localAddr || (stream.localAddress && stream.localPort\n ? toMultiaddr(stream.localAddress, stream.localPort)\n : undefined),\n\n // If the remote address was passed, use it - it may have the peer ID encapsulated\n remoteAddr: options.remoteAddr || toMultiaddr(stream.remoteAddress, stream.remotePort),\n\n timeline: { open: Date.now() },\n\n async close () {\n const start = Date.now()\n\n try {\n await pTimeout(stream.close(), CLOSE_TIMEOUT)\n } catch (err) {\n const { host, port } = maConn.remoteAddr.toOptions()\n log('timeout closing stream to %s:%s after %dms, destroying it manually',\n host, port, Date.now() - start)\n\n stream.destroy()\n } finally {\n maConn.timeline.close = Date.now()\n }\n }\n }\n\n stream.socket.once && stream.socket.once('close', () => {\n // In instances where `close` was not explicitly called,\n // such as an iterable stream ending, ensure we have set the close\n // timeline\n if (!maConn.timeline.close) {\n maConn.timeline.close = Date.now()\n }\n })\n\n return maConn\n}\n","const { AbortController } = globalThis\n\n/**\n * Takes an array of AbortSignals and returns a single signal.\n * If any signals are aborted, the returned signal will be aborted.\n * @param {Array<AbortSignal>} signals\n * @returns {AbortSignal}\n */\nfunction anySignal (signals) {\n const controller = new AbortController()\n\n function onAbort () {\n controller.abort()\n\n for (const signal of signals) {\n if (!signal || !signal.removeEventListener) continue\n signal.removeEventListener('abort', onAbort)\n }\n }\n\n for (const signal of signals) {\n if (!signal || !signal.addEventListener) continue\n if (signal.aborted) {\n onAbort()\n break\n }\n signal.addEventListener('abort', onAbort)\n }\n\n return controller.signal\n}\n\nmodule.exports = anySignal\nmodule.exports.anySignal = anySignal\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.streamingIterables = {}));\n}(this, (function (exports) { 'use strict';\n\n async function* _batch(size, iterable) {\n let dataBatch = [];\n for await (const data of iterable) {\n dataBatch.push(data);\n if (dataBatch.length === size) {\n yield dataBatch;\n dataBatch = [];\n }\n }\n if (dataBatch.length > 0) {\n yield dataBatch;\n }\n }\n function* _syncBatch(size, iterable) {\n let dataBatch = [];\n for (const data of iterable) {\n dataBatch.push(data);\n if (dataBatch.length === size) {\n yield dataBatch;\n dataBatch = [];\n }\n }\n if (dataBatch.length > 0) {\n yield dataBatch;\n }\n }\n function batch(size, iterable) {\n if (iterable === undefined) {\n return curriedIterable => batch(size, curriedIterable);\n }\n if (iterable[Symbol.asyncIterator]) {\n return _batch(size, iterable);\n }\n return _syncBatch(size, iterable);\n }\n\n function getIterator(iterable) {\n if (typeof iterable.next === 'function') {\n return iterable;\n }\n if (typeof iterable[Symbol.iterator] === 'function') {\n return iterable[Symbol.iterator]();\n }\n if (typeof iterable[Symbol.asyncIterator] === 'function') {\n return iterable[Symbol.asyncIterator]();\n }\n throw new TypeError('\"values\" does not to conform to any of the iterator or iterable protocols');\n }\n\n function defer() {\n let reject;\n let resolve;\n const promise = new Promise((resolveFunc, rejectFunc) => {\n resolve = resolveFunc;\n reject = rejectFunc;\n });\n return {\n promise,\n reject,\n resolve,\n };\n }\n\n /// <reference lib=\"esnext.asynciterable\" />\n function _buffer(size, iterable) {\n const iterator = getIterator(iterable);\n const resultQueue = [];\n const readQueue = [];\n let reading = false;\n let ended = false;\n function fulfillReadQueue() {\n while (readQueue.length > 0 && resultQueue.length > 0) {\n const readDeferred = readQueue.shift();\n const { error, value } = resultQueue.shift();\n if (error) {\n readDeferred.reject(error);\n }\n else {\n readDeferred.resolve({ done: false, value });\n }\n }\n while (readQueue.length > 0 && ended) {\n const { resolve } = readQueue.shift();\n resolve({ done: true, value: undefined });\n }\n }\n async function fillQueue() {\n if (ended) {\n return;\n }\n if (reading) {\n return;\n }\n if (resultQueue.length >= size) {\n return;\n }\n reading = true;\n try {\n const { done, value } = await iterator.next();\n if (done) {\n ended = true;\n }\n else {\n resultQueue.push({ value });\n }\n }\n catch (error) {\n ended = true;\n resultQueue.push({ error });\n }\n fulfillReadQueue();\n reading = false;\n fillQueue();\n }\n async function next() {\n if (resultQueue.length > 0) {\n const { error, value } = resultQueue.shift();\n if (error) {\n throw error;\n }\n fillQueue();\n return { done: false, value };\n }\n if (ended) {\n return { done: true, value: undefined }; // stupid ts\n }\n const deferred = defer();\n readQueue.push(deferred);\n fillQueue();\n return deferred.promise;\n }\n const asyncIterableIterator = {\n next,\n [Symbol.asyncIterator]: () => asyncIterableIterator,\n };\n return asyncIterableIterator;\n }\n function* syncBuffer(size, iterable) {\n const valueQueue = [];\n let e;\n try {\n for (const value of iterable) {\n valueQueue.push(value);\n if (valueQueue.length <= size) {\n continue;\n }\n yield valueQueue.shift();\n }\n }\n catch (error) {\n e = error;\n }\n for (const value of valueQueue) {\n yield value;\n }\n if (e) {\n throw e;\n }\n }\n function buffer(size, iterable) {\n if (iterable === undefined) {\n return curriedIterable => buffer(size, curriedIterable);\n }\n if (size === 0) {\n return iterable;\n }\n if (iterable[Symbol.asyncIterator]) {\n return _buffer(size, iterable);\n }\n return syncBuffer(size, iterable);\n }\n\n async function _collect(iterable) {\n const values = [];\n for await (const value of iterable) {\n values.push(value);\n }\n return values;\n }\n function collect(iterable) {\n if (iterable[Symbol.asyncIterator]) {\n return _collect(iterable);\n }\n return Array.from(iterable);\n }\n\n async function* _concat(iterables) {\n for await (const iterable of iterables) {\n yield* iterable;\n }\n }\n function* _syncConcat(iterables) {\n for (const iterable of iterables) {\n yield* iterable;\n }\n }\n function concat(...iterables) {\n const hasAnyAsync = iterables.find(itr => itr[Symbol.asyncIterator] !== undefined);\n if (hasAnyAsync) {\n return _concat(iterables);\n }\n else {\n return _syncConcat(iterables);\n }\n }\n\n async function _consume(iterable) {\n for await (const val of iterable) {\n // do nothing\n }\n }\n function consume(iterable) {\n if (iterable[Symbol.asyncIterator]) {\n return _consume(iterable);\n }\n for (const val of iterable) {\n // do nothing\n }\n }\n\n async function* _filter(filterFunc, iterable) {\n for await (const data of iterable) {\n if (await filterFunc(data)) {\n yield data;\n }\n }\n }\n function filter(filterFunc, iterable) {\n if (iterable === undefined) {\n return (curriedIterable) => _filter(filterFunc, curriedIterable);\n }\n return _filter(filterFunc, iterable);\n }\n\n async function* flatten(iterable) {\n for await (const maybeItr of iterable) {\n if (maybeItr && typeof maybeItr !== 'string' && (maybeItr[Symbol.iterator] || maybeItr[Symbol.asyncIterator])) {\n yield* flatten(maybeItr);\n }\n else {\n yield maybeItr;\n }\n }\n }\n\n async function* _map(func, iterable) {\n for await (const val of iterable) {\n yield await func(val);\n }\n }\n function map(func, iterable) {\n if (iterable === undefined) {\n return curriedIterable => _map(func, curriedIterable);\n }\n return _map(func, iterable);\n }\n\n function flatMap(func, iterable) {\n if (iterable === undefined) {\n return curriedIterable => flatMap(func, curriedIterable);\n }\n return filter(i => i !== undefined && i !== null, flatten(map(func, iterable)));\n }\n\n function _flatTransform(concurrency, func, iterable) {\n const iterator = getIterator(iterable);\n const resultQueue = [];\n const readQueue = [];\n let ended = false;\n let reading = false;\n let inflightCount = 0;\n let lastError = null;\n function fulfillReadQueue() {\n while (readQueue.length > 0 && resultQueue.length > 0) {\n const { resolve } = readQueue.shift();\n const value = resultQueue.shift();\n resolve({ done: false, value });\n }\n while (readQueue.length > 0 && inflightCount === 0 && ended) {\n const { resolve, reject } = readQueue.shift();\n if (lastError) {\n reject(lastError);\n lastError = null;\n }\n else {\n resolve({ done: true, value: undefined });\n }\n }\n }\n async function fillQueue() {\n if (ended) {\n fulfillReadQueue();\n return;\n }\n if (reading) {\n return;\n }\n if (inflightCount + resultQueue.length >= concurrency) {\n return;\n }\n reading = true;\n inflightCount++;\n try {\n const { done, value } = await iterator.next();\n if (done) {\n ended = true;\n inflightCount--;\n fulfillReadQueue();\n }\n else {\n mapAndQueue(value);\n }\n }\n catch (error) {\n ended = true;\n inflightCount--;\n lastError = error;\n fulfillReadQueue();\n }\n reading = false;\n fillQueue();\n }\n async function mapAndQueue(itrValue) {\n try {\n const value = await func(itrValue);\n if (value && value[Symbol.asyncIterator]) {\n for await (const asyncVal of value) {\n resultQueue.push(asyncVal);\n }\n }\n else {\n resultQueue.push(value);\n }\n }\n catch (error) {\n ended = true;\n lastError = error;\n }\n inflightCount--;\n fulfillReadQueue();\n fillQueue();\n }\n async function next() {\n if (resultQueue.length === 0) {\n const deferred = defer();\n readQueue.push(deferred);\n fillQueue();\n return deferred.promise;\n }\n const value = resultQueue.shift();\n fillQueue();\n return { done: false, value };\n }\n const asyncIterableIterator = {\n next,\n [Symbol.asyncIterator]: () => asyncIterableIterator,\n };\n return asyncIterableIterator;\n }\n function flatTransform(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => curriedIterable\n ? flatTransform(concurrency, curriedFunc, curriedIterable)\n : flatTransform(concurrency, curriedFunc);\n }\n if (iterable === undefined) {\n return (curriedIterable) => flatTransform(concurrency, func, curriedIterable);\n }\n return filter(i => i !== undefined && i !== null, flatten(_flatTransform(concurrency, func, iterable)));\n }\n\n async function onceReadable(stream) {\n return new Promise(resolve => {\n stream.once('readable', () => {\n resolve();\n });\n });\n }\n async function* _fromStream(stream) {\n while (true) {\n const data = stream.read();\n if (data !== null) {\n yield data;\n continue;\n }\n if (stream._readableState.ended) {\n break;\n }\n await onceReadable(stream);\n }\n }\n function fromStream(stream) {\n if (typeof stream[Symbol.asyncIterator] === 'function') {\n return stream;\n }\n return _fromStream(stream);\n }\n\n async function* merge(...iterables) {\n const sources = new Set(iterables.map(getIterator));\n while (sources.size > 0) {\n for (const iterator of sources) {\n const nextVal = await iterator.next();\n if (nextVal.done) {\n sources.delete(iterator);\n }\n else {\n yield nextVal.value;\n }\n }\n }\n }\n\n function pipeline(firstFn, ...fns) {\n let previousFn = firstFn();\n for (const func of fns) {\n previousFn = func(previousFn);\n }\n return previousFn;\n }\n\n async function* _parallelMap(concurrency, func, iterable) {\n let transformError = null;\n const wrapFunc = value => ({\n value: func(value),\n });\n const stopOnError = async function* (source) {\n for await (const value of source) {\n if (transformError) {\n return;\n }\n yield value;\n }\n };\n const output = pipeline(() => iterable, buffer(1), stopOnError, map(wrapFunc), buffer(concurrency - 1));\n const itr = getIterator(output);\n while (true) {\n const { value, done } = await itr.next();\n if (done) {\n break;\n }\n try {\n const val = await value.value;\n if (!transformError) {\n yield val;\n }\n }\n catch (error) {\n transformError = error;\n }\n }\n if (transformError) {\n throw transformError;\n }\n }\n function parallelMap(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => parallelMap(concurrency, curriedFunc, curriedIterable);\n }\n if (iterable === undefined) {\n return curriedIterable => parallelMap(concurrency, func, curriedIterable);\n }\n if (concurrency === 1) {\n return map(func, iterable);\n }\n return _parallelMap(concurrency, func, iterable);\n }\n\n function parallelFlatMap(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => curriedIterable\n ? parallelFlatMap(concurrency, curriedFunc, curriedIterable)\n : parallelFlatMap(concurrency, curriedFunc);\n }\n if (iterable === undefined) {\n return (curriedIterable) => parallelFlatMap(concurrency, func, curriedIterable);\n }\n return filter(i => i !== undefined && i !== null, flatten(parallelMap(concurrency, func, iterable)));\n }\n\n /// <reference lib=\"esnext.asynciterable\" />\n async function* parallelMerge(...iterables) {\n const inputs = iterables.map(getIterator);\n const concurrentWork = new Set();\n const values = new Map();\n let lastError = null;\n let errCb = null;\n let valueCb = null;\n const notifyError = err => {\n lastError = err;\n if (errCb) {\n errCb(err);\n }\n };\n const notifyDone = value => {\n if (valueCb) {\n valueCb(value);\n }\n };\n const waitForQueue = () => new Promise((resolve, reject) => {\n if (lastError) {\n reject(lastError);\n }\n if (values.size > 0) {\n return resolve();\n }\n valueCb = resolve;\n errCb = reject;\n });\n const queueNext = input => {\n const nextVal = Promise.resolve(input.next()).then(async ({ done, value }) => {\n if (!done) {\n values.set(input, value);\n }\n concurrentWork.delete(nextVal);\n });\n concurrentWork.add(nextVal);\n nextVal.then(notifyDone, notifyError);\n };\n for (const input of inputs) {\n queueNext(input);\n }\n while (true) {\n // We technically don't have to check `values.size` as the for loop should have emptied it\n // However I haven't yet found specs verifying that behavior, only tests\n // the guard in waitForQueue() checking for values is in place for the same reason\n if (concurrentWork.size === 0 && values.size === 0) {\n return;\n }\n await waitForQueue();\n for (const [input, value] of values) {\n values.delete(input);\n yield value;\n queueNext(input);\n }\n }\n }\n\n async function _reduce(func, start, iterable) {\n let value = start;\n for await (const nextItem of iterable) {\n value = await func(value, nextItem);\n }\n return value;\n }\n function reduce(func, start, iterable) {\n if (start === undefined) {\n return (curriedStart, curriedIterable) => curriedIterable ? _reduce(func, curriedStart, curriedIterable) : reduce(func, curriedStart);\n }\n if (iterable === undefined) {\n return (curriedIterable) => reduce(func, start, curriedIterable);\n }\n return _reduce(func, start, iterable);\n }\n\n async function* _take(count, iterable) {\n let taken = 0;\n for await (const val of iterable) {\n yield await val;\n taken++;\n if (taken >= count) {\n break;\n }\n }\n }\n function* _syncTake(count, iterable) {\n let taken = 0;\n for (const val of iterable) {\n yield val;\n taken++;\n if (taken >= count) {\n break;\n }\n }\n }\n function take(count, iterable) {\n if (iterable === undefined) {\n return curriedIterable => take(count, curriedIterable);\n }\n if (iterable[Symbol.asyncIterator]) {\n return _take(count, iterable);\n }\n return _syncTake(count, iterable);\n }\n\n async function* _asyncTap(func, iterable) {\n for await (const val of iterable) {\n await func(val);\n yield val;\n }\n }\n function tap(func, iterable) {\n if (iterable === undefined) {\n return (curriedIterable) => _asyncTap(func, curriedIterable);\n }\n return _asyncTap(func, iterable);\n }\n\n function addTime(a, b) {\n let seconds = a[0] + b[0];\n let nanoseconds = a[1] + b[1];\n if (nanoseconds >= 1000000000) {\n const remainder = nanoseconds % 1000000000;\n seconds += (nanoseconds - remainder) / 1000000000;\n nanoseconds = remainder;\n }\n return [seconds, nanoseconds];\n }\n async function* _asyncTime(config, iterable) {\n const itr = iterable[Symbol.asyncIterator]();\n let total = [0, 0];\n while (true) {\n const start = process.hrtime();\n const { value, done } = await itr.next();\n const delta = process.hrtime(start);\n total = addTime(total, delta);\n if (config.progress) {\n config.progress(delta, total);\n }\n if (done) {\n if (config.total) {\n config.total(total);\n }\n return value;\n }\n yield value;\n }\n }\n function* _syncTime(config, iterable) {\n const itr = iterable[Symbol.iterator]();\n let total = [0, 0];\n while (true) {\n const start = process.hrtime();\n const { value, done } = itr.next();\n const delta = process.hrtime(start);\n total = addTime(total, delta);\n if (config.progress) {\n config.progress(delta, total);\n }\n if (done) {\n if (config.total) {\n config.total(total);\n }\n return value;\n }\n yield value;\n }\n }\n function time(config = {}, iterable) {\n if (iterable === undefined) {\n return curriedIterable => time(config, curriedIterable);\n }\n if (iterable[Symbol.asyncIterator] !== undefined) {\n return _asyncTime(config, iterable);\n }\n else {\n return _syncTime(config, iterable);\n }\n }\n\n function _transform(concurrency, func, iterable) {\n const iterator = getIterator(iterable);\n const resultQueue = [];\n const readQueue = [];\n let ended = false;\n let reading = false;\n let inflightCount = 0;\n let lastError = null;\n function fulfillReadQueue() {\n while (readQueue.length > 0 && resultQueue.length > 0) {\n const { resolve } = readQueue.shift();\n const value = resultQueue.shift();\n resolve({ done: false, value });\n }\n while (readQueue.length > 0 && inflightCount === 0 && ended) {\n const { resolve, reject } = readQueue.shift();\n if (lastError) {\n reject(lastError);\n lastError = null;\n }\n else {\n resolve({ done: true, value: undefined });\n }\n }\n }\n async function fillQueue() {\n if (ended) {\n fulfillReadQueue();\n return;\n }\n if (reading) {\n return;\n }\n if (inflightCount + resultQueue.length >= concurrency) {\n return;\n }\n reading = true;\n inflightCount++;\n try {\n const { done, value } = await iterator.next();\n if (done) {\n ended = true;\n inflightCount--;\n fulfillReadQueue();\n }\n else {\n mapAndQueue(value);\n }\n }\n catch (error) {\n ended = true;\n inflightCount--;\n lastError = error;\n fulfillReadQueue();\n }\n reading = false;\n fillQueue();\n }\n async function mapAndQueue(itrValue) {\n try {\n const value = await func(itrValue);\n resultQueue.push(value);\n }\n catch (error) {\n ended = true;\n lastError = error;\n }\n inflightCount--;\n fulfillReadQueue();\n fillQueue();\n }\n async function next() {\n if (resultQueue.length === 0) {\n const deferred = defer();\n readQueue.push(deferred);\n fillQueue();\n return deferred.promise;\n }\n const value = resultQueue.shift();\n fillQueue();\n return { done: false, value };\n }\n const asyncIterableIterator = {\n next,\n [Symbol.asyncIterator]: () => asyncIterableIterator,\n };\n return asyncIterableIterator;\n }\n function transform(concurrency, func, iterable) {\n if (func === undefined) {\n return (curriedFunc, curriedIterable) => curriedIterable\n ? transform(concurrency, curriedFunc, curriedIterable)\n : transform(concurrency, curriedFunc);\n }\n if (iterable === undefined) {\n return (curriedIterable) => transform(concurrency, func, curriedIterable);\n }\n return _transform(concurrency, func, iterable);\n }\n\n async function _writeToStream(stream, iterable) {\n let lastError = null;\n let errCb = null;\n let drainCb = null;\n const notifyError = err => {\n lastError = err;\n if (errCb) {\n errCb(err);\n }\n };\n const notifyDrain = () => {\n if (drainCb) {\n drainCb();\n }\n };\n const cleanup = () => {\n stream.removeListener('error', notifyError);\n stream.removeListener('drain', notifyDrain);\n };\n stream.once('error', notifyError);\n const waitForDrain = () => new Promise((resolve, reject) => {\n if (lastError) {\n return reject(lastError);\n }\n stream.once('drain', notifyDrain);\n drainCb = resolve;\n errCb = reject;\n });\n for await (const value of iterable) {\n if (stream.write(value) === false) {\n await waitForDrain();\n }\n if (lastError) {\n break;\n }\n }\n cleanup();\n if (lastError) {\n throw lastError;\n }\n }\n function writeToStream(stream, iterable) {\n if (iterable === undefined) {\n return (curriedIterable) => _writeToStream(stream, curriedIterable);\n }\n return _writeToStream(stream, iterable);\n }\n\n exports.batch = batch;\n exports.buffer = buffer;\n exports.collect = collect;\n exports.concat = concat;\n exports.consume = consume;\n exports.filter = filter;\n exports.flatMap = flatMap;\n exports.flatTransform = flatTransform;\n exports.flatten = flatten;\n exports.fromStream = fromStream;\n exports.getIterator = getIterator;\n exports.map = map;\n exports.merge = merge;\n exports.parallelFlatMap = parallelFlatMap;\n exports.parallelMap = parallelMap;\n exports.parallelMerge = parallelMerge;\n exports.pipeline = pipeline;\n exports.reduce = reduce;\n exports.take = take;\n exports.tap = tap;\n exports.time = time;\n exports.transform = transform;\n exports.writeToStream = writeToStream;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","'use strict'\n\nconst { EventEmitter } = require('events')\nconst { Multiaddr } = require('multiaddr')\nconst PeerId = require('peer-id')\n\n/**\n * @typedef {Object} AddressManagerOptions\n * @property {string[]} [listen = []] - list of multiaddrs string representation to listen.\n * @property {string[]} [announce = []] - list of multiaddrs string representation to announce.\n */\n\n/**\n * @fires AddressManager#change:addresses Emitted when a addresses change.\n */\nclass AddressManager extends EventEmitter {\n /**\n * Responsible for managing the peer addresses.\n * Peers can specify their listen and announce addresses.\n * The listen addresses will be used by the libp2p transports to listen for new connections,\n * while the announce addresses will be used for the peer addresses' to other peers in the network.\n *\n * @class\n * @param {PeerId} peerId - The Peer ID of the node\n * @param {object} [options]\n * @param {Array<string>} [options.listen = []] - list of multiaddrs string representation to listen.\n * @param {Array<string>} [options.announce = []] - list of multiaddrs string representation to announce.\n */\n constructor (peerId, { listen = [], announce = [] } = {}) {\n super()\n\n this.peerId = peerId\n this.listen = new Set(listen.map(ma => ma.toString()))\n this.announce = new Set(announce.map(ma => ma.toString()))\n this.observed = new Set()\n }\n\n /**\n * Get peer listen multiaddrs.\n *\n * @returns {Multiaddr[]}\n */\n getListenAddrs () {\n return Array.from(this.listen).map((a) => new Multiaddr(a))\n }\n\n /**\n * Get peer announcing multiaddrs.\n *\n * @returns {Multiaddr[]}\n */\n getAnnounceAddrs () {\n return Array.from(this.announce).map((a) => new Multiaddr(a))\n }\n\n /**\n * Get observed multiaddrs.\n *\n * @returns {Array<Multiaddr>}\n */\n getObservedAddrs () {\n return Array.from(this.observed).map((a) => new Multiaddr(a))\n }\n\n /**\n * Add peer observed addresses\n *\n * @param {string | Multiaddr} addr\n */\n addObservedAddr (addr) {\n let ma = new Multiaddr(addr)\n const remotePeer = ma.getPeerId()\n\n // strip our peer id if it has been passed\n if (remotePeer) {\n const remotePeerId = PeerId.createFromB58String(remotePeer)\n\n // use same encoding for comparison\n if (remotePeerId.equals(this.peerId)) {\n ma = ma.decapsulate(new Multiaddr(`/p2p/${this.peerId}`))\n }\n }\n\n const addrString = ma.toString()\n\n // do not trigger the change:addresses event if we already know about this address\n if (this.observed.has(addrString)) {\n return\n }\n\n this.observed.add(addrString)\n this.emit('change:addresses')\n }\n}\n\nmodule.exports = AddressManager\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:auto-relay'), {\n error: debug('libp2p:auto-relay:err')\n})\n\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { Multiaddr } = require('multiaddr')\nconst all = require('it-all')\n\nconst { relay: multicodec } = require('./multicodec')\nconst { canHop } = require('./circuit/hop')\nconst { namespaceToCid } = require('./utils')\nconst {\n CIRCUIT_PROTO_CODE,\n HOP_METADATA_KEY,\n HOP_METADATA_VALUE,\n RELAY_RENDEZVOUS_NS\n} = require('./constants')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('../peer-store/types').Address} Address\n * @typedef {import('peer-id')} PeerId\n */\n\n/**\n * @typedef {Object} AutoRelayProperties\n * @property {import('../')} libp2p\n *\n * @typedef {Object} AutoRelayOptions\n * @property {number} [maxListeners = 1] - maximum number of relays to listen.\n * @property {(error: Error, msg?: string) => {}} [onError]\n */\n\nclass AutoRelay {\n /**\n * Creates an instance of AutoRelay.\n *\n * @class\n * @param {AutoRelayProperties & AutoRelayOptions} props\n */\n constructor ({ libp2p, maxListeners = 1, onError }) {\n this._libp2p = libp2p\n this._peerId = libp2p.peerId\n this._peerStore = libp2p.peerStore\n this._connectionManager = libp2p.connectionManager\n this._transportManager = libp2p.transportManager\n this._addressSorter = libp2p.dialer.addressSorter\n\n this.maxListeners = maxListeners\n\n /**\n * @type {Set<string>}\n */\n this._listenRelays = new Set()\n\n this._onProtocolChange = this._onProtocolChange.bind(this)\n this._onPeerDisconnected = this._onPeerDisconnected.bind(this)\n\n this._peerStore.on('change:protocols', this._onProtocolChange)\n this._connectionManager.on('peer:disconnect', this._onPeerDisconnected)\n\n /**\n * @param {Error} error\n * @param {string} [msg]\n */\n this._onError = (error, msg) => {\n log.error(msg || error)\n onError && onError(error, msg)\n }\n }\n\n /**\n * Check if a peer supports the relay protocol.\n * If the protocol is not supported, check if it was supported before and remove it as a listen relay.\n * If the protocol is supported, check if the peer supports **HOP** and add it as a listener if\n * inside the threshold.\n *\n * @param {Object} props\n * @param {PeerId} props.peerId\n * @param {string[]} props.protocols\n * @returns {Promise<void>}\n */\n async _onProtocolChange ({ peerId, protocols }) {\n const id = peerId.toB58String()\n\n // Check if it has the protocol\n const hasProtocol = protocols.find(protocol => protocol === multicodec)\n\n // If no protocol, check if we were keeping the peer before as a listenRelay\n if (!hasProtocol && this._listenRelays.has(id)) {\n await this._removeListenRelay(id)\n return\n } else if (!hasProtocol || this._listenRelays.has(id)) {\n return\n }\n\n // If protocol, check if can hop, store info in the metadataBook and listen on it\n try {\n const connection = this._connectionManager.get(peerId)\n if (!connection) {\n return\n }\n\n // Do not hop on a relayed connection\n if (connection.remoteAddr.protoCodes().includes(CIRCUIT_PROTO_CODE)) {\n log(`relayed connection to ${id} will not be used to hop on`)\n return\n }\n\n const supportsHop = await canHop({ connection })\n\n if (supportsHop) {\n await this._peerStore.metadataBook.setValue(peerId, HOP_METADATA_KEY, uint8ArrayFromString(HOP_METADATA_VALUE))\n await this._addListenRelay(connection, id)\n }\n } catch (/** @type {any} */ err) {\n this._onError(err)\n }\n }\n\n /**\n * Peer disconnects.\n *\n * @param {Connection} connection - connection to the peer\n */\n _onPeerDisconnected (connection) {\n const peerId = connection.remotePeer\n const id = peerId.toB58String()\n\n // Not listening on this relay\n if (!this._listenRelays.has(id)) {\n return\n }\n\n this._removeListenRelay(id).catch(err => {\n log.error(err)\n })\n }\n\n /**\n * Attempt to listen on the given relay connection.\n *\n * @private\n * @param {Connection} connection - connection to the peer\n * @param {string} id - peer identifier string\n * @returns {Promise<void>}\n */\n async _addListenRelay (connection, id) {\n try {\n // Check if already listening on enough relays\n if (this._listenRelays.size >= this.maxListeners) {\n return\n }\n\n // Get peer known addresses and sort them per public addresses first\n const remoteAddrs = await this._peerStore.addressBook.getMultiaddrsForPeer(\n connection.remotePeer, this._addressSorter\n )\n\n // Attempt to listen on relay\n const result = await Promise.all(\n remoteAddrs.map(async addr => {\n try {\n // Announce multiaddrs will update on listen success by TransportManager event being triggered\n await this._transportManager.listen([new Multiaddr(`${addr.toString()}/p2p-circuit`)])\n return true\n } catch (/** @type {any} */ err) {\n this._onError(err)\n }\n\n return false\n })\n )\n\n if (result.includes(true)) {\n this._listenRelays.add(id)\n }\n } catch (/** @type {any} */ err) {\n this._onError(err)\n this._listenRelays.delete(id)\n }\n }\n\n /**\n * Remove listen relay.\n *\n * @private\n * @param {string} id - peer identifier string.\n */\n async _removeListenRelay (id) {\n if (this._listenRelays.delete(id)) {\n // TODO: this should be responsibility of the connMgr\n await this._listenOnAvailableHopRelays([id])\n }\n }\n\n /**\n * Try to listen on available hop relay connections.\n * The following order will happen while we do not have enough relays.\n * 1. Check the metadata store for known relays, try to listen on the ones we are already connected.\n * 2. Dial and try to listen on the peers we know that support hop but are not connected.\n * 3. Search the network.\n *\n * @param {string[]} [peersToIgnore]\n */\n async _listenOnAvailableHopRelays (peersToIgnore = []) {\n // TODO: The peer redial issue on disconnect should be handled by connection gating\n // Check if already listening on enough relays\n if (this._listenRelays.size >= this.maxListeners) {\n return\n }\n\n const knownHopsToDial = []\n const peers = await all(this._peerStore.getPeers())\n\n // Check if we have known hop peers to use and attempt to listen on the already connected\n for await (const { id, metadata } of peers) {\n const idStr = id.toB58String()\n\n // Continue to next if listening on this or peer to ignore\n if (this._listenRelays.has(idStr)) {\n continue\n }\n\n if (peersToIgnore.includes(idStr)) {\n continue\n }\n\n const supportsHop = metadata.get(HOP_METADATA_KEY)\n\n // Continue to next if it does not support Hop\n if (!supportsHop || uint8ArrayToString(supportsHop) !== HOP_METADATA_VALUE) {\n continue\n }\n\n const connection = this._connectionManager.get(id)\n\n // If not connected, store for possible later use.\n if (!connection) {\n knownHopsToDial.push(id)\n continue\n }\n\n await this._addListenRelay(connection, idStr)\n\n // Check if already listening on enough relays\n if (this._listenRelays.size >= this.maxListeners) {\n return\n }\n }\n\n // Try to listen on known peers that are not connected\n for (const peerId of knownHopsToDial) {\n await this._tryToListenOnRelay(peerId)\n\n // Check if already listening on enough relays\n if (this._listenRelays.size >= this.maxListeners) {\n return\n }\n }\n\n // Try to find relays to hop on the network\n try {\n const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)\n for await (const provider of this._libp2p.contentRouting.findProviders(cid)) {\n if (!provider.multiaddrs.length) {\n continue\n }\n\n const peerId = provider.id\n await this._peerStore.addressBook.add(peerId, provider.multiaddrs)\n\n await this._tryToListenOnRelay(peerId)\n\n // Check if already listening on enough relays\n if (this._listenRelays.size >= this.maxListeners) {\n return\n }\n }\n } catch (/** @type {any} */ err) {\n this._onError(err)\n }\n }\n\n /**\n * @param {PeerId} peerId\n */\n async _tryToListenOnRelay (peerId) {\n try {\n const connection = await this._libp2p.dial(peerId)\n await this._addListenRelay(connection, peerId.toB58String())\n } catch (/** @type {any} */ err) {\n this._onError(err, `could not connect and listen on known hop relay ${peerId.toB58String()}`)\n }\n }\n}\n\nmodule.exports = AutoRelay\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit:hop'), {\n error: debug('libp2p:circuit:hop:err')\n})\nconst errCode = require('err-code')\n\nconst PeerId = require('peer-id')\nconst { validateAddrs } = require('./utils')\nconst StreamHandler = require('./stream-handler')\nconst { CircuitRelay: CircuitPB } = require('../protocol')\nconst { pipe } = require('it-pipe')\nconst { codes: Errors } = require('../../errors')\n\nconst { stop } = require('./stop')\n\nconst multicodec = require('./../multicodec')\n\n/**\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../transport')} Transport\n */\n\n/**\n * @typedef {Object} HopRequest\n * @property {Connection} connection\n * @property {ICircuitRelay} request\n * @property {StreamHandler} streamHandler\n * @property {Transport} circuit\n */\n\n/**\n * @param {HopRequest} options\n * @returns {Promise<void>}\n */\nasync function handleHop ({\n connection,\n request,\n streamHandler,\n circuit\n}) {\n // Ensure hop is enabled\n if (!circuit._options.hop.enabled) {\n log('HOP request received but we are not acting as a relay')\n return streamHandler.end({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.HOP_CANT_SPEAK_RELAY\n })\n }\n\n // Validate the HOP request has the required input\n try {\n validateAddrs(request, streamHandler)\n } catch (/** @type {any} */ err) {\n return log.error('invalid hop request via peer %s', connection.remotePeer.toB58String(), err)\n }\n\n if (!request.dstPeer) {\n log('HOP request received but we do not receive a dstPeer')\n return\n }\n\n // Get the connection to the destination (stop) peer\n const destinationPeer = new PeerId(request.dstPeer.id)\n\n const destinationConnection = circuit._connectionManager.get(destinationPeer)\n if (!destinationConnection && !circuit._options.hop.active) {\n log('HOP request received but we are not connected to the destination peer')\n return streamHandler.end({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.HOP_NO_CONN_TO_DST\n })\n }\n\n // TODO: Handle being an active relay\n if (!destinationConnection) {\n return\n }\n\n // Handle the incoming HOP request by performing a STOP request\n const stopRequest = {\n type: CircuitPB.Type.STOP,\n dstPeer: request.dstPeer,\n srcPeer: request.srcPeer\n }\n\n let destinationStream\n try {\n destinationStream = await stop({\n connection: destinationConnection,\n request: stopRequest\n })\n } catch (/** @type {any} */ err) {\n return log.error(err)\n }\n\n log('hop request from %s is valid', connection.remotePeer.toB58String())\n streamHandler.write({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.SUCCESS\n })\n const sourceStream = streamHandler.rest()\n\n // Short circuit the two streams to create the relayed connection\n return pipe(\n sourceStream,\n destinationStream,\n sourceStream\n )\n}\n\n/**\n * Performs a HOP request to a relay peer, to request a connection to another\n * peer. A new, virtual, connection will be created between the two via the relay.\n *\n * @param {object} options\n * @param {Connection} options.connection - Connection to the relay\n * @param {ICircuitRelay} options.request\n * @returns {Promise<MuxedStream>}\n */\nasync function hop ({\n connection,\n request\n}) {\n // Create a new stream to the relay\n const { stream } = await connection.newStream([multicodec.relay])\n // Send the HOP request\n const streamHandler = new StreamHandler({ stream })\n streamHandler.write(request)\n\n const response = await streamHandler.read()\n\n if (!response) {\n throw errCode(new Error('HOP request had no response'), Errors.ERR_HOP_REQUEST_FAILED)\n }\n\n if (response.code === CircuitPB.Status.SUCCESS) {\n log('hop request was successful')\n return streamHandler.rest()\n }\n\n log('hop request failed with code %d, closing stream', response.code)\n streamHandler.close()\n throw errCode(new Error(`HOP request failed with code ${response.code}`), Errors.ERR_HOP_REQUEST_FAILED)\n}\n\n/**\n * Performs a CAN_HOP request to a relay peer, in order to understand its capabilities.\n *\n * @param {object} options\n * @param {Connection} options.connection - Connection to the relay\n * @returns {Promise<boolean>}\n */\nasync function canHop ({\n connection\n}) {\n // Create a new stream to the relay\n const { stream } = await connection.newStream([multicodec.relay])\n // Send the HOP request\n const streamHandler = new StreamHandler({ stream })\n streamHandler.write({\n type: CircuitPB.Type.CAN_HOP\n })\n\n const response = await streamHandler.read()\n await streamHandler.close()\n\n if (!response || response.code !== CircuitPB.Status.SUCCESS) {\n return false\n }\n\n return true\n}\n\n/**\n * Creates an unencoded CAN_HOP response based on the Circuits configuration\n *\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {StreamHandler} options.streamHandler\n * @param {Transport} options.circuit\n * @private\n */\nfunction handleCanHop ({\n connection,\n streamHandler,\n circuit\n}) {\n const canHop = circuit._options.hop.enabled\n log('can hop (%s) request from %s', canHop, connection.remotePeer.toB58String())\n streamHandler.end({\n type: CircuitPB.Type.STATUS,\n code: canHop ? CircuitPB.Status.SUCCESS : CircuitPB.Status.HOP_CANT_SPEAK_RELAY\n })\n}\n\nmodule.exports = {\n handleHop,\n hop,\n canHop,\n handleCanHop\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit:stop'), {\n error: debug('libp2p:circuit:stop:err')\n})\n\nconst { CircuitRelay: CircuitPB } = require('../protocol')\nconst multicodec = require('../multicodec')\nconst StreamHandler = require('./stream-handler')\nconst { validateAddrs } = require('./utils')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n */\n\n/**\n * Handles incoming STOP requests\n *\n * @private\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {ICircuitRelay} options.request - The CircuitRelay protobuf request (unencoded)\n * @param {StreamHandler} options.streamHandler\n * @returns {Promise<MuxedStream>|void} Resolves a duplex iterable\n */\nmodule.exports.handleStop = function handleStop ({\n connection,\n request,\n streamHandler\n}) {\n // Validate the STOP request has the required input\n try {\n validateAddrs(request, streamHandler)\n } catch (/** @type {any} */ err) {\n return log.error('invalid stop request via peer %s', connection.remotePeer.toB58String(), err)\n }\n\n // The request is valid\n log('stop request is valid')\n streamHandler.write({\n type: CircuitPB.Type.STATUS,\n code: CircuitPB.Status.SUCCESS\n })\n return streamHandler.rest()\n}\n\n/**\n * Creates a STOP request\n *\n * @private\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {ICircuitRelay} options.request - The CircuitRelay protobuf request (unencoded)\n * @returns {Promise<MuxedStream|void>} Resolves a duplex iterable\n */\nmodule.exports.stop = async function stop ({\n connection,\n request\n}) {\n const { stream } = await connection.newStream([multicodec.relay])\n log('starting stop request to %s', connection.remotePeer.toB58String())\n const streamHandler = new StreamHandler({ stream })\n\n streamHandler.write(request)\n const response = await streamHandler.read()\n\n if (!response) {\n return streamHandler.close()\n }\n\n if (response.code === CircuitPB.Status.SUCCESS) {\n log('stop request to %s was successful', connection.remotePeer.toB58String())\n return streamHandler.rest()\n }\n\n log('stop request failed with code %d', response.code)\n streamHandler.close()\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit:stream-handler'), {\n error: debug('libp2p:circuit:stream-handler:err')\n})\n\nconst lp = require('it-length-prefixed')\n// @ts-ignore it-handshake does not export types\nconst handshake = require('it-handshake')\nconst { CircuitRelay } = require('../protocol')\n\n/**\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n */\n\nclass StreamHandler {\n /**\n * Create a stream handler for connection\n *\n * @class\n * @param {object} options\n * @param {MuxedStream} options.stream - A duplex iterable\n * @param {number} [options.maxLength = 4096] - max bytes length of message\n */\n constructor ({ stream, maxLength = 4096 }) {\n this.stream = stream\n\n this.shake = handshake(this.stream)\n // @ts-ignore options are not optional\n this.decoder = lp.decode.fromReader(this.shake.reader, { maxDataLength: maxLength })\n }\n\n /**\n * Read and decode message\n *\n * @async\n */\n async read () {\n const msg = await this.decoder.next()\n if (msg.value) {\n const value = CircuitRelay.decode(msg.value.slice())\n log('read message type', value.type)\n return value\n }\n\n log('read received no value, closing stream')\n // End the stream, we didn't get data\n this.close()\n }\n\n /**\n * Encode and write array of buffers\n *\n * @param {ICircuitRelay} msg - An unencoded CircuitRelay protobuf message\n * @returns {void}\n */\n write (msg) {\n log('write message type %s', msg.type)\n // @ts-ignore lp.encode expects type type 'Buffer | BufferList', not 'Uint8Array'\n this.shake.write(lp.encode.single(CircuitRelay.encode(msg).finish()))\n }\n\n /**\n * Return the handshake rest stream and invalidate handler\n *\n * @returns {*} A duplex iterable\n */\n rest () {\n this.shake.rest()\n return this.shake.stream\n }\n\n /**\n * @param {ICircuitRelay} msg - An unencoded CircuitRelay protobuf message\n */\n end (msg) {\n this.write(msg)\n this.close()\n }\n\n /**\n * Close the stream\n *\n * @returns {void}\n */\n close () {\n log('closing the stream')\n this.rest().sink([])\n }\n}\n\nmodule.exports = StreamHandler\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\nconst { CircuitRelay } = require('../protocol')\n\n/**\n * @typedef {import('./stream-handler')} StreamHandler\n * @typedef {import('../protocol').ICircuitRelay} ICircuitRelay\n */\n\n/**\n * Write a response\n *\n * @param {StreamHandler} streamHandler\n * @param {import('../protocol').CircuitRelay.Status} status\n */\nfunction writeResponse (streamHandler, status) {\n streamHandler.write({\n type: CircuitRelay.Type.STATUS,\n code: status\n })\n}\n\n/**\n * Validate incomming HOP/STOP message\n *\n * @param {ICircuitRelay} msg - A CircuitRelay unencoded protobuf message\n * @param {StreamHandler} streamHandler\n */\nfunction validateAddrs (msg, streamHandler) {\n try {\n if (msg.dstPeer && msg.dstPeer.addrs) {\n msg.dstPeer.addrs.forEach((addr) => {\n return new Multiaddr(addr)\n })\n }\n } catch (/** @type {any} */ err) {\n writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP\n ? CircuitRelay.Status.HOP_DST_MULTIADDR_INVALID\n : CircuitRelay.Status.STOP_DST_MULTIADDR_INVALID)\n throw err\n }\n\n try {\n if (msg.srcPeer && msg.srcPeer.addrs) {\n msg.srcPeer.addrs.forEach((addr) => {\n return new Multiaddr(addr)\n })\n }\n } catch (/** @type {any} */ err) {\n writeResponse(streamHandler, msg.type === CircuitRelay.Type.HOP\n ? CircuitRelay.Status.HOP_SRC_MULTIADDR_INVALID\n : CircuitRelay.Status.STOP_SRC_MULTIADDR_INVALID)\n throw err\n }\n}\n\nmodule.exports = {\n validateAddrs\n}\n","'use strict'\n\nconst minute = 60 * 1000\n\nmodule.exports = {\n ADVERTISE_BOOT_DELAY: 15 * minute, // Delay before HOP relay service is advertised on the network\n ADVERTISE_TTL: 30 * minute, // Delay Between HOP relay service advertisements on the network\n CIRCUIT_PROTO_CODE: 290, // Multicodec code\n HOP_METADATA_KEY: 'hop_relay', // PeerStore metadaBook key for HOP relay service\n HOP_METADATA_VALUE: 'true', // PeerStore metadaBook value for HOP relay service\n RELAY_RENDEZVOUS_NS: '/libp2p/relay' // Relay HOP relay service namespace for discovery\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:relay'), {\n error: debug('libp2p:relay:err')\n})\nconst { codes } = require('./../errors')\nconst {\n setDelayedInterval,\n clearDelayedInterval\n// @ts-ignore set-delayed-interval does not export types\n} = require('set-delayed-interval')\n\nconst AutoRelay = require('./auto-relay')\nconst { namespaceToCid } = require('./utils')\nconst {\n RELAY_RENDEZVOUS_NS\n} = require('./constants')\n\n/**\n * @typedef {import('../')} Libp2p\n *\n * @typedef {Object} RelayAdvertiseOptions\n * @property {number} [bootDelay = ADVERTISE_BOOT_DELAY]\n * @property {boolean} [enabled = true]\n * @property {number} [ttl = ADVERTISE_TTL]\n *\n * @typedef {Object} HopOptions\n * @property {boolean} [enabled = false]\n * @property {boolean} [active = false]\n *\n * @typedef {Object} AutoRelayOptions\n * @property {number} [maxListeners = 2] - maximum number of relays to listen.\n * @property {boolean} [enabled = false]\n */\n\nclass Relay {\n /**\n * Creates an instance of Relay.\n *\n * @class\n * @param {Libp2p} libp2p\n */\n constructor (libp2p) {\n this._libp2p = libp2p\n this._options = {\n ...libp2p._config.relay\n }\n\n // Create autoRelay if enabled\n this._autoRelay = this._options.autoRelay.enabled && new AutoRelay({ libp2p, ...this._options.autoRelay })\n\n this._advertiseService = this._advertiseService.bind(this)\n }\n\n /**\n * Start Relay service.\n *\n * @returns {void}\n */\n start () {\n // Advertise service if HOP enabled\n const canHop = this._options.hop.enabled\n\n if (canHop && this._options.advertise.enabled) {\n this._timeout = setDelayedInterval(\n this._advertiseService, this._options.advertise.ttl, this._options.advertise.bootDelay\n )\n }\n }\n\n /**\n * Stop Relay service.\n *\n * @returns {void}\n */\n stop () {\n clearDelayedInterval(this._timeout)\n }\n\n /**\n * Advertise hop relay service in the network.\n *\n * @returns {Promise<void>}\n */\n async _advertiseService () {\n try {\n const cid = await namespaceToCid(RELAY_RENDEZVOUS_NS)\n await this._libp2p.contentRouting.provide(cid)\n } catch (/** @type {any} */ err) {\n if (err.code === codes.ERR_NO_ROUTERS_AVAILABLE) {\n log.error('a content router, such as a DHT, must be provided in order to advertise the relay service', err)\n // Stop the advertise\n this.stop()\n } else {\n log.error(err)\n }\n }\n }\n}\n\nmodule.exports = Relay\n","'use strict'\n\nconst { EventEmitter } = require('events')\nconst { Multiaddr } = require('multiaddr')\n\n/**\n * @typedef {import('libp2p-interfaces/src/transport/types').Listener} Listener\n */\n\n/**\n * @param {import('../')} libp2p\n * @returns {Listener} a transport listener\n */\nmodule.exports = (libp2p) => {\n const listeningAddrs = new Map()\n\n /**\n * Add swarm handler and listen for incoming connections\n *\n * @param {Multiaddr} addr\n * @returns {Promise<void>}\n */\n async function listen (addr) {\n const addrString = String(addr).split('/p2p-circuit').find(a => a !== '')\n\n const relayConn = await libp2p.dial(new Multiaddr(addrString))\n const relayedAddr = relayConn.remoteAddr.encapsulate('/p2p-circuit')\n\n listeningAddrs.set(relayConn.remotePeer.toB58String(), relayedAddr)\n listener.emit('listening')\n }\n\n /**\n * Get fixed up multiaddrs\n *\n * NOTE: This method will grab the peers multiaddrs and expand them such that:\n *\n * a) If it's an existing /p2p-circuit address for a specific relay i.e.\n * `/ip4/0.0.0.0/tcp/0/ipfs/QmRelay/p2p-circuit` this method will expand the\n * address to `/ip4/0.0.0.0/tcp/0/ipfs/QmRelay/p2p-circuit/ipfs/QmPeer` where\n * `QmPeer` is this peers id\n * b) If it's not a /p2p-circuit address, it will encapsulate the address as a /p2p-circuit\n * addr, such when dialing over a relay with this address, it will create the circuit using\n * the encapsulated transport address. This is useful when for example, a peer should only\n * be dialed over TCP rather than any other transport\n *\n * @returns {Multiaddr[]}\n */\n function getAddrs () {\n const addrs = []\n for (const addr of listeningAddrs.values()) {\n addrs.push(addr)\n }\n return addrs\n }\n\n /** @type Listener */\n const listener = Object.assign(new EventEmitter(), {\n close: () => Promise.resolve(),\n listen,\n getAddrs\n })\n\n // Remove listeningAddrs when a peer disconnects\n libp2p.connectionManager.on('peer:disconnect', (connection) => {\n const deleted = listeningAddrs.delete(connection.remotePeer.toB58String())\n\n if (deleted) {\n // Announce listen addresses change\n listener.emit('close')\n }\n })\n\n return listener\n}\n","'use strict'\n\nmodule.exports = {\n relay: '/libp2p/circuit/relay/0.1.0'\n}\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-circuit\"] || ($protobuf.roots[\"libp2p-circuit\"] = {});\n\n$root.CircuitRelay = (function() {\n\n /**\n * Properties of a CircuitRelay.\n * @exports ICircuitRelay\n * @interface ICircuitRelay\n * @property {CircuitRelay.Type|null} [type] CircuitRelay type\n * @property {CircuitRelay.IPeer|null} [srcPeer] CircuitRelay srcPeer\n * @property {CircuitRelay.IPeer|null} [dstPeer] CircuitRelay dstPeer\n * @property {CircuitRelay.Status|null} [code] CircuitRelay code\n */\n\n /**\n * Constructs a new CircuitRelay.\n * @exports CircuitRelay\n * @classdesc Represents a CircuitRelay.\n * @implements ICircuitRelay\n * @constructor\n * @param {ICircuitRelay=} [p] Properties to set\n */\n function CircuitRelay(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * CircuitRelay type.\n * @member {CircuitRelay.Type} type\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.type = 1;\n\n /**\n * CircuitRelay srcPeer.\n * @member {CircuitRelay.IPeer|null|undefined} srcPeer\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.srcPeer = null;\n\n /**\n * CircuitRelay dstPeer.\n * @member {CircuitRelay.IPeer|null|undefined} dstPeer\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.dstPeer = null;\n\n /**\n * CircuitRelay code.\n * @member {CircuitRelay.Status} code\n * @memberof CircuitRelay\n * @instance\n */\n CircuitRelay.prototype.code = 100;\n\n /**\n * Encodes the specified CircuitRelay message. Does not implicitly {@link CircuitRelay.verify|verify} messages.\n * @function encode\n * @memberof CircuitRelay\n * @static\n * @param {ICircuitRelay} m CircuitRelay message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n CircuitRelay.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.type != null && Object.hasOwnProperty.call(m, \"type\"))\n w.uint32(8).int32(m.type);\n if (m.srcPeer != null && Object.hasOwnProperty.call(m, \"srcPeer\"))\n $root.CircuitRelay.Peer.encode(m.srcPeer, w.uint32(18).fork()).ldelim();\n if (m.dstPeer != null && Object.hasOwnProperty.call(m, \"dstPeer\"))\n $root.CircuitRelay.Peer.encode(m.dstPeer, w.uint32(26).fork()).ldelim();\n if (m.code != null && Object.hasOwnProperty.call(m, \"code\"))\n w.uint32(32).int32(m.code);\n return w;\n };\n\n /**\n * Decodes a CircuitRelay message from the specified reader or buffer.\n * @function decode\n * @memberof CircuitRelay\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {CircuitRelay} CircuitRelay\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n CircuitRelay.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.CircuitRelay();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.type = r.int32();\n break;\n case 2:\n m.srcPeer = $root.CircuitRelay.Peer.decode(r, r.uint32());\n break;\n case 3:\n m.dstPeer = $root.CircuitRelay.Peer.decode(r, r.uint32());\n break;\n case 4:\n m.code = r.int32();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a CircuitRelay message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof CircuitRelay\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {CircuitRelay} CircuitRelay\n */\n CircuitRelay.fromObject = function fromObject(d) {\n if (d instanceof $root.CircuitRelay)\n return d;\n var m = new $root.CircuitRelay();\n switch (d.type) {\n case \"HOP\":\n case 1:\n m.type = 1;\n break;\n case \"STOP\":\n case 2:\n m.type = 2;\n break;\n case \"STATUS\":\n case 3:\n m.type = 3;\n break;\n case \"CAN_HOP\":\n case 4:\n m.type = 4;\n break;\n }\n if (d.srcPeer != null) {\n if (typeof d.srcPeer !== \"object\")\n throw TypeError(\".CircuitRelay.srcPeer: object expected\");\n m.srcPeer = $root.CircuitRelay.Peer.fromObject(d.srcPeer);\n }\n if (d.dstPeer != null) {\n if (typeof d.dstPeer !== \"object\")\n throw TypeError(\".CircuitRelay.dstPeer: object expected\");\n m.dstPeer = $root.CircuitRelay.Peer.fromObject(d.dstPeer);\n }\n switch (d.code) {\n case \"SUCCESS\":\n case 100:\n m.code = 100;\n break;\n case \"HOP_SRC_ADDR_TOO_LONG\":\n case 220:\n m.code = 220;\n break;\n case \"HOP_DST_ADDR_TOO_LONG\":\n case 221:\n m.code = 221;\n break;\n case \"HOP_SRC_MULTIADDR_INVALID\":\n case 250:\n m.code = 250;\n break;\n case \"HOP_DST_MULTIADDR_INVALID\":\n case 251:\n m.code = 251;\n break;\n case \"HOP_NO_CONN_TO_DST\":\n case 260:\n m.code = 260;\n break;\n case \"HOP_CANT_DIAL_DST\":\n case 261:\n m.code = 261;\n break;\n case \"HOP_CANT_OPEN_DST_STREAM\":\n case 262:\n m.code = 262;\n break;\n case \"HOP_CANT_SPEAK_RELAY\":\n case 270:\n m.code = 270;\n break;\n case \"HOP_CANT_RELAY_TO_SELF\":\n case 280:\n m.code = 280;\n break;\n case \"STOP_SRC_ADDR_TOO_LONG\":\n case 320:\n m.code = 320;\n break;\n case \"STOP_DST_ADDR_TOO_LONG\":\n case 321:\n m.code = 321;\n break;\n case \"STOP_SRC_MULTIADDR_INVALID\":\n case 350:\n m.code = 350;\n break;\n case \"STOP_DST_MULTIADDR_INVALID\":\n case 351:\n m.code = 351;\n break;\n case \"STOP_RELAY_REFUSED\":\n case 390:\n m.code = 390;\n break;\n case \"MALFORMED_MESSAGE\":\n case 400:\n m.code = 400;\n break;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a CircuitRelay message. Also converts values to other types if specified.\n * @function toObject\n * @memberof CircuitRelay\n * @static\n * @param {CircuitRelay} m CircuitRelay\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n CircuitRelay.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.type = o.enums === String ? \"HOP\" : 1;\n d.srcPeer = null;\n d.dstPeer = null;\n d.code = o.enums === String ? \"SUCCESS\" : 100;\n }\n if (m.type != null && m.hasOwnProperty(\"type\")) {\n d.type = o.enums === String ? $root.CircuitRelay.Type[m.type] : m.type;\n }\n if (m.srcPeer != null && m.hasOwnProperty(\"srcPeer\")) {\n d.srcPeer = $root.CircuitRelay.Peer.toObject(m.srcPeer, o);\n }\n if (m.dstPeer != null && m.hasOwnProperty(\"dstPeer\")) {\n d.dstPeer = $root.CircuitRelay.Peer.toObject(m.dstPeer, o);\n }\n if (m.code != null && m.hasOwnProperty(\"code\")) {\n d.code = o.enums === String ? $root.CircuitRelay.Status[m.code] : m.code;\n }\n return d;\n };\n\n /**\n * Converts this CircuitRelay to JSON.\n * @function toJSON\n * @memberof CircuitRelay\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n CircuitRelay.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * Status enum.\n * @name CircuitRelay.Status\n * @enum {number}\n * @property {number} SUCCESS=100 SUCCESS value\n * @property {number} HOP_SRC_ADDR_TOO_LONG=220 HOP_SRC_ADDR_TOO_LONG value\n * @property {number} HOP_DST_ADDR_TOO_LONG=221 HOP_DST_ADDR_TOO_LONG value\n * @property {number} HOP_SRC_MULTIADDR_INVALID=250 HOP_SRC_MULTIADDR_INVALID value\n * @property {number} HOP_DST_MULTIADDR_INVALID=251 HOP_DST_MULTIADDR_INVALID value\n * @property {number} HOP_NO_CONN_TO_DST=260 HOP_NO_CONN_TO_DST value\n * @property {number} HOP_CANT_DIAL_DST=261 HOP_CANT_DIAL_DST value\n * @property {number} HOP_CANT_OPEN_DST_STREAM=262 HOP_CANT_OPEN_DST_STREAM value\n * @property {number} HOP_CANT_SPEAK_RELAY=270 HOP_CANT_SPEAK_RELAY value\n * @property {number} HOP_CANT_RELAY_TO_SELF=280 HOP_CANT_RELAY_TO_SELF value\n * @property {number} STOP_SRC_ADDR_TOO_LONG=320 STOP_SRC_ADDR_TOO_LONG value\n * @property {number} STOP_DST_ADDR_TOO_LONG=321 STOP_DST_ADDR_TOO_LONG value\n * @property {number} STOP_SRC_MULTIADDR_INVALID=350 STOP_SRC_MULTIADDR_INVALID value\n * @property {number} STOP_DST_MULTIADDR_INVALID=351 STOP_DST_MULTIADDR_INVALID value\n * @property {number} STOP_RELAY_REFUSED=390 STOP_RELAY_REFUSED value\n * @property {number} MALFORMED_MESSAGE=400 MALFORMED_MESSAGE value\n */\n CircuitRelay.Status = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[100] = \"SUCCESS\"] = 100;\n values[valuesById[220] = \"HOP_SRC_ADDR_TOO_LONG\"] = 220;\n values[valuesById[221] = \"HOP_DST_ADDR_TOO_LONG\"] = 221;\n values[valuesById[250] = \"HOP_SRC_MULTIADDR_INVALID\"] = 250;\n values[valuesById[251] = \"HOP_DST_MULTIADDR_INVALID\"] = 251;\n values[valuesById[260] = \"HOP_NO_CONN_TO_DST\"] = 260;\n values[valuesById[261] = \"HOP_CANT_DIAL_DST\"] = 261;\n values[valuesById[262] = \"HOP_CANT_OPEN_DST_STREAM\"] = 262;\n values[valuesById[270] = \"HOP_CANT_SPEAK_RELAY\"] = 270;\n values[valuesById[280] = \"HOP_CANT_RELAY_TO_SELF\"] = 280;\n values[valuesById[320] = \"STOP_SRC_ADDR_TOO_LONG\"] = 320;\n values[valuesById[321] = \"STOP_DST_ADDR_TOO_LONG\"] = 321;\n values[valuesById[350] = \"STOP_SRC_MULTIADDR_INVALID\"] = 350;\n values[valuesById[351] = \"STOP_DST_MULTIADDR_INVALID\"] = 351;\n values[valuesById[390] = \"STOP_RELAY_REFUSED\"] = 390;\n values[valuesById[400] = \"MALFORMED_MESSAGE\"] = 400;\n return values;\n })();\n\n /**\n * Type enum.\n * @name CircuitRelay.Type\n * @enum {number}\n * @property {number} HOP=1 HOP value\n * @property {number} STOP=2 STOP value\n * @property {number} STATUS=3 STATUS value\n * @property {number} CAN_HOP=4 CAN_HOP value\n */\n CircuitRelay.Type = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[1] = \"HOP\"] = 1;\n values[valuesById[2] = \"STOP\"] = 2;\n values[valuesById[3] = \"STATUS\"] = 3;\n values[valuesById[4] = \"CAN_HOP\"] = 4;\n return values;\n })();\n\n CircuitRelay.Peer = (function() {\n\n /**\n * Properties of a Peer.\n * @memberof CircuitRelay\n * @interface IPeer\n * @property {Uint8Array} id Peer id\n * @property {Array.<Uint8Array>|null} [addrs] Peer addrs\n */\n\n /**\n * Constructs a new Peer.\n * @memberof CircuitRelay\n * @classdesc Represents a Peer.\n * @implements IPeer\n * @constructor\n * @param {CircuitRelay.IPeer=} [p] Properties to set\n */\n function Peer(p) {\n this.addrs = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Peer id.\n * @member {Uint8Array} id\n * @memberof CircuitRelay.Peer\n * @instance\n */\n Peer.prototype.id = $util.newBuffer([]);\n\n /**\n * Peer addrs.\n * @member {Array.<Uint8Array>} addrs\n * @memberof CircuitRelay.Peer\n * @instance\n */\n Peer.prototype.addrs = $util.emptyArray;\n\n /**\n * Encodes the specified Peer message. Does not implicitly {@link CircuitRelay.Peer.verify|verify} messages.\n * @function encode\n * @memberof CircuitRelay.Peer\n * @static\n * @param {CircuitRelay.IPeer} m Peer message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Peer.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(10).bytes(m.id);\n if (m.addrs != null && m.addrs.length) {\n for (var i = 0; i < m.addrs.length; ++i)\n w.uint32(18).bytes(m.addrs[i]);\n }\n return w;\n };\n\n /**\n * Decodes a Peer message from the specified reader or buffer.\n * @function decode\n * @memberof CircuitRelay.Peer\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {CircuitRelay.Peer} Peer\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Peer.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.CircuitRelay.Peer();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.id = r.bytes();\n break;\n case 2:\n if (!(m.addrs && m.addrs.length))\n m.addrs = [];\n m.addrs.push(r.bytes());\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"id\"))\n throw $util.ProtocolError(\"missing required 'id'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a Peer message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof CircuitRelay.Peer\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {CircuitRelay.Peer} Peer\n */\n Peer.fromObject = function fromObject(d) {\n if (d instanceof $root.CircuitRelay.Peer)\n return d;\n var m = new $root.CircuitRelay.Peer();\n if (d.id != null) {\n if (typeof d.id === \"string\")\n $util.base64.decode(d.id, m.id = $util.newBuffer($util.base64.length(d.id)), 0);\n else if (d.id.length)\n m.id = d.id;\n }\n if (d.addrs) {\n if (!Array.isArray(d.addrs))\n throw TypeError(\".CircuitRelay.Peer.addrs: array expected\");\n m.addrs = [];\n for (var i = 0; i < d.addrs.length; ++i) {\n if (typeof d.addrs[i] === \"string\")\n $util.base64.decode(d.addrs[i], m.addrs[i] = $util.newBuffer($util.base64.length(d.addrs[i])), 0);\n else if (d.addrs[i].length)\n m.addrs[i] = d.addrs[i];\n }\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Peer message. Also converts values to other types if specified.\n * @function toObject\n * @memberof CircuitRelay.Peer\n * @static\n * @param {CircuitRelay.Peer} m Peer\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Peer.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.addrs = [];\n }\n if (o.defaults) {\n if (o.bytes === String)\n d.id = \"\";\n else {\n d.id = [];\n if (o.bytes !== Array)\n d.id = $util.newBuffer(d.id);\n }\n }\n if (m.id != null && m.hasOwnProperty(\"id\")) {\n d.id = o.bytes === String ? $util.base64.encode(m.id, 0, m.id.length) : o.bytes === Array ? Array.prototype.slice.call(m.id) : m.id;\n }\n if (m.addrs && m.addrs.length) {\n d.addrs = [];\n for (var j = 0; j < m.addrs.length; ++j) {\n d.addrs[j] = o.bytes === String ? $util.base64.encode(m.addrs[j], 0, m.addrs[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.addrs[j]) : m.addrs[j];\n }\n }\n return d;\n };\n\n /**\n * Converts this Peer to JSON.\n * @function toJSON\n * @memberof CircuitRelay.Peer\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Peer.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Peer;\n })();\n\n return CircuitRelay;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:circuit'), {\n error: debug('libp2p:circuit:err')\n})\n\nconst errCode = require('err-code')\nconst mafmt = require('mafmt')\nconst { Multiaddr } = require('multiaddr')\nconst PeerId = require('peer-id')\nconst { CircuitRelay: CircuitPB } = require('./protocol')\nconst { codes } = require('../errors')\n\nconst toConnection = require('libp2p-utils/src/stream-to-ma-conn')\n\nconst { relay: multicodec } = require('./multicodec')\nconst createListener = require('./listener')\nconst { handleCanHop, handleHop, hop } = require('./circuit/hop')\nconst { handleStop } = require('./circuit/stop')\nconst StreamHandler = require('./circuit/stream-handler')\n\nconst transportSymbol = Symbol.for('@libp2p/js-libp2p-circuit/circuit')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n */\n\nclass Circuit {\n /**\n * Creates an instance of the Circuit Transport.\n *\n * @class\n * @param {object} options\n * @param {import('../')} options.libp2p\n * @param {import('../upgrader')} options.upgrader\n */\n constructor ({ libp2p, upgrader }) {\n this._dialer = libp2p.dialer\n this._registrar = libp2p.registrar\n this._connectionManager = libp2p.connectionManager\n this._upgrader = upgrader\n this._options = libp2p._config.relay\n this._libp2p = libp2p\n this.peerId = libp2p.peerId\n\n this._registrar.handle(multicodec, this._onProtocol.bind(this))\n }\n\n /**\n * @param {Object} props\n * @param {Connection} props.connection\n * @param {MuxedStream} props.stream\n */\n async _onProtocol ({ connection, stream }) {\n /** @type {import('./circuit/stream-handler')} */\n const streamHandler = new StreamHandler({ stream })\n const request = await streamHandler.read()\n\n if (!request) {\n return\n }\n\n const circuit = this\n let virtualConnection\n\n switch (request.type) {\n case CircuitPB.Type.CAN_HOP: {\n log('received CAN_HOP request from %s', connection.remotePeer.toB58String())\n await handleCanHop({ circuit, connection, streamHandler })\n break\n }\n case CircuitPB.Type.HOP: {\n log('received HOP request from %s', connection.remotePeer.toB58String())\n virtualConnection = await handleHop({\n connection,\n request,\n streamHandler,\n circuit\n })\n break\n }\n case CircuitPB.Type.STOP: {\n log('received STOP request from %s', connection.remotePeer.toB58String())\n virtualConnection = await handleStop({\n connection,\n request,\n streamHandler\n })\n break\n }\n default: {\n log('Request of type %s not supported', request.type)\n }\n }\n\n if (virtualConnection) {\n // @ts-ignore dst peer will not be undefined\n const remoteAddr = new Multiaddr(request.dstPeer.addrs[0])\n // @ts-ignore src peer will not be undefined\n const localAddr = new Multiaddr(request.srcPeer.addrs[0])\n const maConn = toConnection({\n stream: virtualConnection,\n remoteAddr,\n localAddr\n })\n const type = request.type === CircuitPB.Type.HOP ? 'relay' : 'inbound'\n log('new %s connection %s', type, maConn.remoteAddr)\n\n const conn = await this._upgrader.upgradeInbound(maConn)\n log('%s connection %s upgraded', type, maConn.remoteAddr)\n this.handler && this.handler(conn)\n }\n }\n\n /**\n * Dial a peer over a relay\n *\n * @param {Multiaddr} ma - the multiaddr of the peer to dial\n * @param {Object} options - dial options\n * @param {AbortSignal} [options.signal] - An optional abort signal\n * @returns {Promise<Connection>} - the connection\n */\n async dial (ma, options) {\n // Check the multiaddr to see if it contains a relay and a destination peer\n const addrs = ma.toString().split('/p2p-circuit')\n const relayAddr = new Multiaddr(addrs[0])\n const destinationAddr = new Multiaddr(addrs[addrs.length - 1])\n const relayId = relayAddr.getPeerId()\n const destinationId = destinationAddr.getPeerId()\n\n if (!relayId || !destinationId) {\n const errMsg = 'Circuit relay dial failed as addresses did not have peer id'\n log.error(errMsg)\n throw errCode(new Error(errMsg), codes.ERR_RELAYED_DIAL)\n }\n\n const relayPeer = PeerId.createFromB58String(relayId)\n const destinationPeer = PeerId.createFromB58String(destinationId)\n\n let disconnectOnFailure = false\n let relayConnection = this._connectionManager.get(relayPeer)\n if (!relayConnection) {\n relayConnection = await this._dialer.connectToPeer(relayAddr, options)\n disconnectOnFailure = true\n }\n\n try {\n const virtualConnection = await hop({\n connection: relayConnection,\n request: {\n type: CircuitPB.Type.HOP,\n srcPeer: {\n id: this.peerId.toBytes(),\n addrs: this._libp2p.multiaddrs.map(addr => addr.bytes)\n },\n dstPeer: {\n id: destinationPeer.toBytes(),\n addrs: [new Multiaddr(destinationAddr).bytes]\n }\n }\n })\n\n const localAddr = relayAddr.encapsulate(`/p2p-circuit/p2p/${this.peerId.toB58String()}`)\n const maConn = toConnection({\n stream: virtualConnection,\n remoteAddr: ma,\n localAddr\n })\n log('new outbound connection %s', maConn.remoteAddr)\n\n return this._upgrader.upgradeOutbound(maConn)\n } catch (/** @type {any} */ err) {\n log.error('Circuit relay dial failed', err)\n disconnectOnFailure && await relayConnection.close()\n throw err\n }\n }\n\n /**\n * Create a listener\n *\n * @param {any} options\n * @param {Function} handler\n * @returns {import('libp2p-interfaces/src/transport/types').Listener}\n */\n createListener (options, handler) {\n if (typeof options === 'function') {\n handler = options\n options = {}\n }\n\n // Called on successful HOP and STOP requests\n this.handler = handler\n\n return createListener(this._libp2p)\n }\n\n /**\n * Filter check for all Multiaddrs that this transport can dial on\n *\n * @param {Multiaddr[]} multiaddrs\n * @returns {Multiaddr[]}\n */\n filter (multiaddrs) {\n multiaddrs = Array.isArray(multiaddrs) ? multiaddrs : [multiaddrs]\n\n return multiaddrs.filter((ma) => {\n return mafmt.Circuit.matches(ma)\n })\n }\n\n get [Symbol.toStringTag] () {\n return 'Circuit'\n }\n\n /**\n * Checks if the given value is a Transport instance.\n *\n * @param {any} other\n * @returns {other is Transport}\n */\n static isTransport (other) {\n return Boolean(other && other[transportSymbol])\n }\n}\n\nmodule.exports = Circuit\n","'use strict'\n\nconst { CID } = require('multiformats/cid')\nconst { sha256 } = require('multiformats/hashes/sha2')\n\n/**\n * Convert a namespace string into a cid.\n *\n * @param {string} namespace\n * @returns {Promise<CID>}\n */\nmodule.exports.namespaceToCid = async (namespace) => {\n const bytes = new TextEncoder().encode(namespace)\n const hash = await sha256.digest(bytes)\n\n return CID.createV0(hash)\n}\n","'use strict'\n\nconst mergeOptions = require('merge-options')\n// @ts-ignore no types in multiaddr path\nconst { dnsaddrResolver } = require('multiaddr/src/resolvers')\n\nconst Constants = require('./constants')\nconst { AGENT_VERSION } = require('./identify/consts')\nconst RelayConstants = require('./circuit/constants')\n\nconst { publicAddressesFirst } = require('libp2p-utils/src/address-sort')\nconst { FaultTolerance } = require('./transport-manager')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('./types').ConnectionGater} ConnectionGater\n * @typedef {import('.').Libp2pOptions} Libp2pOptions\n * @typedef {import('.').constructorOptions} constructorOptions\n */\n\nconst DefaultConfig = {\n addresses: {\n listen: [],\n announce: [],\n noAnnounce: [],\n announceFilter: (/** @type {Multiaddr[]} */ multiaddrs) => multiaddrs\n },\n connectionManager: {\n minConnections: 25\n },\n connectionGater: /** @type {ConnectionGater} */ {},\n transportManager: {\n faultTolerance: FaultTolerance.FATAL_ALL\n },\n dialer: {\n maxParallelDials: Constants.MAX_PARALLEL_DIALS,\n maxDialsPerPeer: Constants.MAX_PER_PEER_DIALS,\n dialTimeout: Constants.DIAL_TIMEOUT,\n resolvers: {\n dnsaddr: dnsaddrResolver\n },\n addressSorter: publicAddressesFirst\n },\n host: {\n agentVersion: AGENT_VERSION\n },\n metrics: {\n enabled: false\n },\n peerStore: {\n persistence: false,\n threshold: 5\n },\n peerRouting: {\n refreshManager: {\n enabled: true,\n interval: 6e5,\n bootDelay: 10e3\n }\n },\n config: {\n protocolPrefix: 'ipfs',\n dht: {\n enabled: false,\n kBucketSize: 20\n },\n nat: {\n enabled: true,\n ttl: 7200,\n keepAlive: true,\n gateway: null,\n externalIp: null,\n pmp: {\n enabled: false\n }\n },\n peerDiscovery: {\n autoDial: true\n },\n pubsub: {\n enabled: true\n },\n relay: {\n enabled: true,\n advertise: {\n bootDelay: RelayConstants.ADVERTISE_BOOT_DELAY,\n enabled: false,\n ttl: RelayConstants.ADVERTISE_TTL\n },\n hop: {\n enabled: false,\n active: false\n },\n autoRelay: {\n enabled: false,\n maxListeners: 2\n }\n },\n transport: {}\n }\n}\n\n/**\n * @param {Libp2pOptions} opts\n * @returns {DefaultConfig & Libp2pOptions & constructorOptions}\n */\nmodule.exports.validate = (opts) => {\n /** @type {DefaultConfig & Libp2pOptions & constructorOptions} */\n const resultingOptions = mergeOptions(DefaultConfig, opts)\n\n if (resultingOptions.modules.transport.length < 1) throw new Error(\"'options.modules.transport' must contain at least 1 transport\")\n\n return resultingOptions\n}\n","'use strict'\n\nconst debug = require('debug')\nconst mergeOptions = require('merge-options')\n// @ts-ignore retimer does not have types\nconst retimer = require('retimer')\nconst all = require('it-all')\nconst { pipe } = require('it-pipe')\nconst filter = require('it-filter')\nconst sort = require('it-sort')\n\nconst log = Object.assign(debug('libp2p:connection-manager:auto-dialler'), {\n error: debug('libp2p:connection-manager:auto-dialler:err')\n})\n\nconst defaultOptions = {\n enabled: true,\n minConnections: 0,\n autoDialInterval: 10000\n}\n\n/**\n * @typedef {import('../index')} Libp2p\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n */\n\n/**\n * @typedef {Object} AutoDiallerOptions\n * @property {boolean} [enabled = true] - Should preemptively guarantee connections are above the low watermark\n * @property {number} [minConnections = 0] - The minimum number of connections to avoid pruning\n * @property {number} [autoDialInterval = 10000] - How often, in milliseconds, it should preemptively guarantee connections are above the low watermark\n */\n\nclass AutoDialler {\n /**\n * Proactively tries to connect to known peers stored in the PeerStore.\n * It will keep the number of connections below the upper limit and sort\n * the peers to connect based on wether we know their keys and protocols.\n *\n * @class\n * @param {Libp2p} libp2p\n * @param {AutoDiallerOptions} options\n */\n constructor (libp2p, options = {}) {\n this._options = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, options)\n this._libp2p = libp2p\n this._running = false\n this._autoDialTimeout = null\n this._autoDial = this._autoDial.bind(this)\n\n log('options: %j', this._options)\n }\n\n /**\n * Starts the auto dialer\n */\n async start () {\n if (!this._options.enabled) {\n log('not enabled')\n return\n }\n\n this._running = true\n this._autoDial().catch(err => {\n log.error('could start autodial', err)\n })\n log('started')\n }\n\n /**\n * Stops the auto dialler\n */\n async stop () {\n if (!this._options.enabled) {\n log('not enabled')\n return\n }\n\n this._running = false\n this._autoDialTimeout && this._autoDialTimeout.clear()\n log('stopped')\n }\n\n async _autoDial () {\n const minConnections = this._options.minConnections\n\n // Already has enough connections\n if (this._libp2p.connections.size >= minConnections) {\n this._autoDialTimeout = retimer(this._autoDial, this._options.autoDialInterval)\n return\n }\n\n // Sort peers on whether we know protocols of public keys for them\n // TODO: assuming the `peerStore.getPeers()` order is stable this will mean\n // we keep trying to connect to the same peers?\n const peers = await pipe(\n this._libp2p.peerStore.getPeers(),\n (source) => filter(source, (peer) => !peer.id.equals(this._libp2p.peerId)),\n (source) => sort(source, (a, b) => {\n if (b.protocols && b.protocols.length && (!a.protocols || !a.protocols.length)) {\n return 1\n } else if (b.id.pubKey && !a.id.pubKey) {\n return 1\n }\n return -1\n }),\n (source) => all(source)\n )\n\n for (let i = 0; this._running && i < peers.length && this._libp2p.connections.size < minConnections; i++) {\n const peer = peers[i]\n\n if (!this._libp2p.connectionManager.get(peer.id)) {\n log('connecting to a peerStore stored peer %s', peer.id.toB58String())\n try {\n await this._libp2p.dialer.connectToPeer(peer.id)\n } catch (/** @type {any} */ err) {\n log.error('could not connect to peerStore stored peer', err)\n }\n }\n }\n\n // Connection Manager was stopped\n if (!this._running) {\n return\n }\n\n this._autoDialTimeout = retimer(this._autoDial, this._options.autoDialInterval)\n }\n}\n\nmodule.exports = AutoDialler\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:connection-manager'), {\n error: debug('libp2p:connection-manager:err')\n})\n\nconst errcode = require('err-code')\nconst mergeOptions = require('merge-options')\nconst LatencyMonitor = require('./latency-monitor')\n// @ts-ignore retimer does not have types\nconst retimer = require('retimer')\n\nconst { EventEmitter } = require('events')\nconst trackedMap = require('../metrics/tracked-map')\nconst PeerId = require('peer-id')\n\nconst {\n codes: { ERR_INVALID_PARAMETERS }\n} = require('../errors')\n\nconst defaultOptions = {\n maxConnections: Infinity,\n minConnections: 0,\n maxData: Infinity,\n maxSentData: Infinity,\n maxReceivedData: Infinity,\n maxEventLoopDelay: Infinity,\n pollInterval: 2000,\n autoDialInterval: 10000,\n movingAverageInterval: 60000,\n defaultPeerValue: 1\n}\n\nconst METRICS_COMPONENT = 'connection-manager'\nconst METRICS_PEER_CONNECTIONS = 'peer-connections'\nconst METRICS_PEER_VALUES = 'peer-values'\n\n/**\n * @typedef {import('../')} Libp2p\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n */\n\n/**\n * @typedef {Object} ConnectionManagerOptions\n * @property {number} [maxConnections = Infinity] - The maximum number of connections allowed.\n * @property {number} [minConnections = 0] - The minimum number of connections to avoid pruning.\n * @property {number} [maxData = Infinity] - The max data (in and out), per average interval to allow.\n * @property {number} [maxSentData = Infinity] - The max outgoing data, per average interval to allow.\n * @property {number} [maxReceivedData = Infinity] - The max incoming data, per average interval to allow.\n * @property {number} [maxEventLoopDelay = Infinity] - The upper limit the event loop can take to run.\n * @property {number} [pollInterval = 2000] - How often, in milliseconds, metrics and latency should be checked.\n * @property {number} [movingAverageInterval = 60000] - How often, in milliseconds, to compute averages.\n * @property {number} [defaultPeerValue = 1] - The value of the peer.\n * @property {boolean} [autoDial = true] - Should preemptively guarantee connections are above the low watermark.\n * @property {number} [autoDialInterval = 10000] - How often, in milliseconds, it should preemptively guarantee connections are above the low watermark.\n */\n\n/**\n *\n * @fires ConnectionManager#peer:connect Emitted when a new peer is connected.\n * @fires ConnectionManager#peer:disconnect Emitted when a peer is disconnected.\n */\nclass ConnectionManager extends EventEmitter {\n /**\n * Responsible for managing known connections.\n *\n * @class\n * @param {Libp2p} libp2p\n * @param {ConnectionManagerOptions} options\n */\n constructor (libp2p, options = {}) {\n super()\n\n this._libp2p = libp2p\n this._peerId = libp2p.peerId.toB58String()\n\n this._options = mergeOptions.call({ ignoreUndefined: true }, defaultOptions, options)\n if (this._options.maxConnections < this._options.minConnections) {\n throw errcode(new Error('Connection Manager maxConnections must be greater than minConnections'), ERR_INVALID_PARAMETERS)\n }\n\n log('options: %j', this._options)\n\n /**\n * Map of peer identifiers to their peer value for pruning connections.\n *\n * @type {Map<string, number>}\n */\n this._peerValues = trackedMap({\n component: METRICS_COMPONENT,\n metric: METRICS_PEER_VALUES,\n metrics: this._libp2p.metrics\n })\n\n /**\n * Map of connections per peer\n *\n * @type {Map<string, Connection[]>}\n */\n this.connections = trackedMap({\n component: METRICS_COMPONENT,\n metric: METRICS_PEER_CONNECTIONS,\n metrics: this._libp2p.metrics\n })\n\n this._started = false\n this._timer = null\n this._checkMetrics = this._checkMetrics.bind(this)\n\n this._latencyMonitor = new LatencyMonitor({\n latencyCheckIntervalMs: this._options.pollInterval,\n dataEmitIntervalMs: this._options.pollInterval\n })\n\n // This emitter gets listened to a lot\n this.setMaxListeners(Infinity)\n }\n\n /**\n * Get current number of open connections.\n */\n get size () {\n return Array.from(this.connections.values())\n .reduce((accumulator, value) => accumulator + value.length, 0)\n }\n\n /**\n * Starts the Connection Manager. If Metrics are not enabled on libp2p\n * only event loop and connection limits will be monitored.\n */\n start () {\n if (this._libp2p.metrics) {\n this._timer = this._timer || retimer(this._checkMetrics, this._options.pollInterval)\n }\n\n // latency monitor\n this._latencyMonitor.start()\n this._onLatencyMeasure = this._onLatencyMeasure.bind(this)\n this._latencyMonitor.on('data', this._onLatencyMeasure)\n\n this._started = true\n log('started')\n }\n\n /**\n * Stops the Connection Manager\n *\n * @async\n */\n async stop () {\n this._timer && this._timer.clear()\n\n this._latencyMonitor.removeListener('data', this._onLatencyMeasure)\n this._latencyMonitor.stop()\n\n this._started = false\n await this._close()\n log('stopped')\n }\n\n /**\n * Cleans up the connections\n *\n * @async\n */\n async _close () {\n // Close all connections we're tracking\n const tasks = []\n for (const connectionList of this.connections.values()) {\n for (const connection of connectionList) {\n tasks.push(connection.close())\n }\n }\n\n await Promise.all(tasks)\n this.connections.clear()\n }\n\n /**\n * Sets the value of the given peer. Peers with lower values\n * will be disconnected first.\n *\n * @param {PeerId} peerId\n * @param {number} value - A number between 0 and 1\n * @returns {void}\n */\n setPeerValue (peerId, value) {\n if (value < 0 || value > 1) {\n throw new Error('value should be a number between 0 and 1')\n }\n this._peerValues.set(peerId.toB58String(), value)\n }\n\n /**\n * Checks the libp2p metrics to determine if any values have exceeded\n * the configured maximums.\n *\n * @private\n */\n async _checkMetrics () {\n if (this._libp2p.metrics) {\n try {\n const movingAverages = this._libp2p.metrics.global.movingAverages\n // @ts-ignore moving averages object types\n const received = movingAverages.dataReceived[this._options.movingAverageInterval].movingAverage()\n await this._checkMaxLimit('maxReceivedData', received)\n // @ts-ignore moving averages object types\n const sent = movingAverages.dataSent[this._options.movingAverageInterval].movingAverage()\n await this._checkMaxLimit('maxSentData', sent)\n const total = received + sent\n await this._checkMaxLimit('maxData', total)\n log('metrics update', total)\n } finally {\n this._timer = retimer(this._checkMetrics, this._options.pollInterval)\n }\n }\n }\n\n /**\n * Tracks the incoming connection and check the connection limit\n *\n * @param {Connection} connection\n */\n async onConnect (connection) {\n if (!this._started) {\n // This can happen when we are in the process of shutting down the node\n await connection.close()\n return\n }\n\n const peerId = connection.remotePeer\n const peerIdStr = peerId.toB58String()\n const storedConn = this.connections.get(peerIdStr)\n\n this.emit('peer:connect', connection)\n\n if (storedConn) {\n storedConn.push(connection)\n } else {\n this.connections.set(peerIdStr, [connection])\n }\n\n await this._libp2p.peerStore.keyBook.set(peerId, peerId.pubKey)\n\n if (!this._peerValues.has(peerIdStr)) {\n this._peerValues.set(peerIdStr, this._options.defaultPeerValue)\n }\n\n await this._checkMaxLimit('maxConnections', this.size)\n }\n\n /**\n * Removes the connection from tracking\n *\n * @param {Connection} connection\n * @returns {void}\n */\n onDisconnect (connection) {\n if (!this._started) {\n // This can happen when we are in the process of shutting down the node\n return\n }\n\n const peerId = connection.remotePeer.toB58String()\n let storedConn = this.connections.get(peerId)\n\n if (storedConn && storedConn.length > 1) {\n storedConn = storedConn.filter((conn) => conn.id !== connection.id)\n this.connections.set(peerId, storedConn)\n } else if (storedConn) {\n this.connections.delete(peerId)\n this._peerValues.delete(connection.remotePeer.toB58String())\n this.emit('peer:disconnect', connection)\n\n this._libp2p.metrics && this._libp2p.metrics.onPeerDisconnected(connection.remotePeer)\n }\n }\n\n /**\n * Get a connection with a peer.\n *\n * @param {PeerId} peerId\n * @returns {Connection|null}\n */\n get (peerId) {\n const connections = this.getAll(peerId)\n if (connections.length) {\n return connections[0]\n }\n return null\n }\n\n /**\n * Get all open connections with a peer.\n *\n * @param {PeerId} peerId\n * @returns {Connection[]}\n */\n getAll (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n throw errcode(new Error('peerId must be an instance of peer-id'), ERR_INVALID_PARAMETERS)\n }\n\n const id = peerId.toB58String()\n const connections = this.connections.get(id)\n\n // Return all open connections\n if (connections) {\n return connections.filter(connection => connection.stat.status === 'open')\n }\n return []\n }\n\n /**\n * If the event loop is slow, maybe close a connection\n *\n * @private\n * @param {*} summary - The LatencyMonitor summary\n */\n _onLatencyMeasure (summary) {\n this._checkMaxLimit('maxEventLoopDelay', summary.avgMs)\n .catch(err => {\n log.error(err)\n })\n }\n\n /**\n * If the `value` of `name` has exceeded its limit, maybe close a connection\n *\n * @private\n * @param {string} name - The name of the field to check limits for\n * @param {number} value - The current value of the field\n */\n async _checkMaxLimit (name, value) {\n const limit = this._options[name]\n log('checking limit of %s. current value: %d of %d', name, value, limit)\n if (value > limit) {\n log('%s: limit exceeded: %s, %d', this._peerId, name, value)\n await this._maybeDisconnectOne()\n }\n }\n\n /**\n * If we have more connections than our maximum, close a connection\n * to the lowest valued peer.\n *\n * @private\n */\n async _maybeDisconnectOne () {\n if (this._options.minConnections < this.connections.size) {\n const peerValues = Array.from(new Map([...this._peerValues.entries()].sort((a, b) => a[1] - b[1])))\n log('%s: sorted peer values: %j', this._peerId, peerValues)\n const disconnectPeer = peerValues[0]\n if (disconnectPeer) {\n const peerId = disconnectPeer[0]\n log('%s: lowest value peer is %s', this._peerId, peerId)\n log('%s: closing a connection to %j', this._peerId, peerId)\n for (const connections of this.connections.values()) {\n if (connections[0].remotePeer.toB58String() === peerId) {\n connections[0].close().catch(err => {\n log.error(err)\n })\n // TODO: should not need to invoke this manually\n this.onDisconnect(connections[0])\n break\n }\n }\n }\n }\n }\n}\n\nmodule.exports = ConnectionManager\n","// @ts-nocheck\n'use strict'\n\n/**\n * This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE)\n */\n\nconst { EventEmitter } = require('events')\nconst VisibilityChangeEmitter = require('./visibility-change-emitter')\nconst debug = require('debug')('latency-monitor:LatencyMonitor')\n\n/**\n * @typedef {Object} SummaryObject\n * @property {number} events How many events were called\n * @property {number} minMS What was the min time for a cb to be called\n * @property {number} maxMS What was the max time for a cb to be called\n * @property {number} avgMs What was the average time for a cb to be called\n * @property {number} lengthMs How long this interval was in ms\n *\n * @typedef {Object} LatencyMonitorOptions\n * @property {number} [latencyCheckIntervalMs=500] - How often to add a latency check event (ms)\n * @property {number} [dataEmitIntervalMs=5000] - How often to summarize latency check events. null or 0 disables event firing\n * @property {Function} [asyncTestFn] - What cb-style async function to use\n * @property {number} [latencyRandomPercentage=5] - What percent (+/-) of latencyCheckIntervalMs should we randomly use? This helps avoid alignment to other events.\n */\n\n/**\n * A class to monitor latency of any async function which works in a browser or node. This works by periodically calling\n * the asyncTestFn and timing how long it takes the callback to be called. It can also periodically emit stats about this.\n * This can be disabled and stats can be pulled via setting dataEmitIntervalMs = 0.\n *\n * @extends {EventEmitter}\n *\n * The default implementation is an event loop latency monitor. This works by firing periodic events into the event loop\n * and timing how long it takes to get back.\n *\n * @example\n * const monitor = new LatencyMonitor();\n * monitor.on('data', (summary) => console.log('Event Loop Latency: %O', summary));\n *\n * @example\n * const monitor = new LatencyMonitor({latencyCheckIntervalMs: 1000, dataEmitIntervalMs: 60000, asyncTestFn:ping});\n * monitor.on('data', (summary) => console.log('Ping Pong Latency: %O', summary));\n */\nclass LatencyMonitor extends EventEmitter {\n /**\n * @class\n * @param {LatencyMonitorOptions} [options]\n */\n constructor ({ latencyCheckIntervalMs, dataEmitIntervalMs, asyncTestFn, latencyRandomPercentage } = {}) {\n super()\n const that = this\n\n // 0 isn't valid here, so its ok to use ||\n that.latencyCheckIntervalMs = latencyCheckIntervalMs || 500 // 0.5s\n that.latencyRandomPercentage = latencyRandomPercentage || 10\n that._latecyCheckMultiply = 2 * (that.latencyRandomPercentage / 100.0) * that.latencyCheckIntervalMs\n that._latecyCheckSubtract = that._latecyCheckMultiply / 2\n\n that.dataEmitIntervalMs = (dataEmitIntervalMs === null || dataEmitIntervalMs === 0)\n ? undefined\n : dataEmitIntervalMs || 5 * 1000 // 5s\n debug('latencyCheckIntervalMs: %s dataEmitIntervalMs: %s',\n that.latencyCheckIntervalMs, that.dataEmitIntervalMs)\n if (that.dataEmitIntervalMs) {\n debug('Expecting ~%s events per summary', that.latencyCheckIntervalMs / that.dataEmitIntervalMs)\n } else {\n debug('Not emitting summaries')\n }\n\n that.asyncTestFn = asyncTestFn // If there is no asyncFn, we measure latency\n }\n\n start () {\n // If process: use high resolution timer\n if (globalThis.process && globalThis.process.hrtime) { // eslint-disable-line no-undef\n debug('Using process.hrtime for timing')\n this.now = globalThis.process.hrtime // eslint-disable-line no-undef\n this.getDeltaMS = (startTime) => {\n const hrtime = this.now(startTime)\n return (hrtime[0] * 1000) + (hrtime[1] / 1000000)\n }\n // Let's try for a timer that only monotonically increases\n } else if (typeof window !== 'undefined' && window.performance && window.performance.now) {\n debug('Using performance.now for timing')\n this.now = window.performance.now.bind(window.performance)\n this.getDeltaMS = (startTime) => Math.round(this.now() - startTime)\n } else {\n debug('Using Date.now for timing')\n this.now = Date.now\n this.getDeltaMS = (startTime) => this.now() - startTime\n }\n\n this._latencyData = this._initLatencyData()\n\n // We check for isBrowser because of browsers set max rates of timeouts when a page is hidden,\n // so we fall back to another library\n // See: http://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs\n if (isBrowser()) {\n this._visibilityChangeEmitter = new VisibilityChangeEmitter()\n\n this._visibilityChangeEmitter.on('visibilityChange', (pageInFocus) => {\n if (pageInFocus) {\n this._startTimers()\n } else {\n this._emitSummary()\n this._stopTimers()\n }\n })\n }\n\n if (!this._visibilityChangeEmitter || this._visibilityChangeEmitter.isVisible()) {\n this._startTimers()\n }\n }\n\n stop () {\n this._stopTimers()\n }\n\n /**\n * Start internal timers\n *\n * @private\n */\n _startTimers () {\n // Timer already started, ignore this\n if (this._checkLatencyID) {\n return\n }\n this._checkLatency()\n if (this.dataEmitIntervalMs) {\n this._emitIntervalID = setInterval(() => this._emitSummary(), this.dataEmitIntervalMs)\n if (typeof this._emitIntervalID.unref === 'function') {\n this._emitIntervalID.unref() // Doesn't block exit\n }\n }\n }\n\n /**\n * Stop internal timers\n *\n * @private\n */\n _stopTimers () {\n if (this._checkLatencyID) {\n clearTimeout(this._checkLatencyID)\n this._checkLatencyID = undefined\n }\n if (this._emitIntervalID) {\n clearInterval(this._emitIntervalID)\n this._emitIntervalID = undefined\n }\n }\n\n /**\n * Emit summary only if there were events. It might not have any events if it was forced via a page hidden/show\n *\n * @private\n */\n _emitSummary () {\n const summary = this.getSummary()\n if (summary.events > 0) {\n this.emit('data', summary)\n }\n }\n\n /**\n * Calling this function will end the collection period. If a timing event was already fired and somewhere in the queue,\n * it will not count for this time period\n *\n * @returns {SummaryObject}\n */\n getSummary () {\n // We might want to adjust for the number of expected events\n // Example: first 1 event it comes back, then such a long blocker that the next emit check comes\n // Then this fires - looks like no latency!!\n const latency = {\n events: this._latencyData.events,\n minMs: this._latencyData.minMs,\n maxMs: this._latencyData.maxMs,\n avgMs: this._latencyData.events\n ? this._latencyData.totalMs / this._latencyData.events\n : Number.POSITIVE_INFINITY,\n lengthMs: this.getDeltaMS(this._latencyData.startTime)\n }\n this._latencyData = this._initLatencyData() // Clear\n\n debug('Summary: %O', latency)\n return latency\n }\n\n /**\n * Randomly calls an async fn every roughly latencyCheckIntervalMs (plus some randomness). If no async fn is found,\n * it will simply report on event loop latency.\n *\n * @private\n */\n _checkLatency () {\n const that = this\n // Randomness is needed to avoid alignment by accident to regular things in the event loop\n const randomness = (Math.random() * that._latecyCheckMultiply) - that._latecyCheckSubtract\n\n // We use this to ensure that in case some overlap somehow, we don't take the wrong startTime/offset\n const localData = {\n deltaOffset: Math.ceil(that.latencyCheckIntervalMs + randomness),\n startTime: that.now()\n }\n\n const cb = () => {\n // We are already stopped, ignore this datapoint\n if (!this._checkLatencyID) {\n return\n }\n const deltaMS = that.getDeltaMS(localData.startTime) - localData.deltaOffset\n that._checkLatency() // Start again ASAP\n\n // Add the data point. If this gets complex, refactor it\n that._latencyData.events++\n that._latencyData.minMs = Math.min(that._latencyData.minMs, deltaMS)\n that._latencyData.maxMs = Math.max(that._latencyData.maxMs, deltaMS)\n that._latencyData.totalMs += deltaMS\n debug('MS: %s Data: %O', deltaMS, that._latencyData)\n }\n debug('localData: %O', localData)\n\n this._checkLatencyID = setTimeout(() => {\n // This gets rid of including event loop\n if (that.asyncTestFn) {\n // Clear timing related things\n localData.deltaOffset = 0\n localData.startTime = that.now()\n that.asyncTestFn(cb)\n } else {\n // setTimeout is not more accurate than 1ms, so this will ensure positive numbers. Add 1 to emitted data to remove.\n // This is not the best, but for now it'll be just fine. This isn't meant to be sub ms accurate.\n localData.deltaOffset -= 1\n // If there is no function to test, we mean check latency which is a special case that is really cb => cb()\n // We avoid that for the few extra function all overheads. Also, we want to keep the timers different\n cb()\n }\n }, localData.deltaOffset)\n\n if (typeof this._checkLatencyID.unref === 'function') {\n this._checkLatencyID.unref() // Doesn't block exit\n }\n }\n\n _initLatencyData () {\n return {\n startTime: this.now(),\n minMs: Number.POSITIVE_INFINITY,\n maxMs: Number.NEGATIVE_INFINITY,\n events: 0,\n totalMs: 0\n }\n }\n}\n\nfunction isBrowser () {\n return typeof window !== 'undefined'\n}\n\nmodule.exports = LatencyMonitor\n","// @ts-nocheck\n/* global document */\n\n/**\n * This code is based on `latency-monitor` (https://github.com/mlucool/latency-monitor) by `mlucool` (https://github.com/mlucool), available under Apache License 2.0 (https://github.com/mlucool/latency-monitor/blob/master/LICENSE)\n */\n'use strict'\n\nconst { EventEmitter } = require('events')\n\nconst debug = require('debug')('latency-monitor:VisibilityChangeEmitter')\n\n/**\n * Listen to page visibility change events (i.e. when the page is focused / blurred) by an event emitter.\n *\n * Warning: This does not work on all browsers, but should work on all modern browsers\n *\n * @example\n *\n * const myVisibilityEmitter = new VisibilityChangeEmitter();\n *\n * myVisibilityEmitter.on('visibilityChange', (pageInFocus) => {\n * if ( pageInFocus ){\n * // Page is in focus\n * console.log('In focus');\n * }\n * else {\n * // Page is blurred\n * console.log('Out of focus');\n * }\n * });\n * // To access the visibility state directly, call:\n * console.log('Am I focused now? ' + myVisibilityEmitter.isVisible());\n */\nclass VisibilityChangeEmitter extends EventEmitter {\n /**\n * Creates a VisibilityChangeEmitter\n *\n * @class\n */\n constructor () {\n super()\n if (typeof document === 'undefined') {\n debug('This is not a browser, no \"document\" found. Stopping.')\n return\n }\n this._initializeVisibilityVarNames()\n this._addVisibilityChangeListener()\n }\n\n /**\n * document.hidden and document.visibilityChange are the two variables we need to check for;\n * Since these variables are named differently in different browsers, this function sets\n * the appropriate name based on the browser being used. Once executed, tha actual names of\n * document.hidden and document.visibilityChange are found in this._hidden and this._visibilityChange\n * respectively\n *\n * @private\n */\n _initializeVisibilityVarNames () {\n let hidden\n let visibilityChange\n if (typeof document.hidden !== 'undefined') { // Opera 12.10 and Firefox 18 and later support\n hidden = 'hidden'\n visibilityChange = 'visibilitychange'\n } else if (typeof document.mozHidden !== 'undefined') {\n hidden = 'mozHidden'\n visibilityChange = 'mozvisibilitychange'\n } else if (typeof document.msHidden !== 'undefined') {\n hidden = 'msHidden'\n visibilityChange = 'msvisibilitychange'\n } else if (typeof document.webkitHidden !== 'undefined') {\n hidden = 'webkitHidden'\n visibilityChange = 'webkitvisibilitychange'\n }\n this._hidden = hidden\n this._visibilityChange = visibilityChange\n }\n\n /**\n * Adds an event listener on the document that listens to changes in document.visibilityChange\n * (or whatever name by which the visibilityChange variable is known in the browser)\n *\n * @private\n */\n _addVisibilityChangeListener () {\n if (typeof document.addEventListener === 'undefined' ||\n typeof document[this._hidden] === 'undefined') {\n debug('Checking page visibility requires a browser that supports the Page Visibility API.')\n } else {\n // Handle page visibility change\n document.addEventListener(this._visibilityChange, this._handleVisibilityChange.bind(this), false)\n }\n }\n\n /**\n * The function returns ```true``` if the page is visible or ```false``` if the page is not visible and\n * ```undefined``` if the page visibility API is not supported by the browser.\n *\n * @returns {boolean | void} whether the page is now visible or not (undefined is unknown)\n */\n isVisible () {\n if (this._hidden === undefined || document[this._hidden] === undefined) {\n return undefined\n }\n\n return !document[this._hidden]\n }\n\n /**\n * The function that is called when document.visibilityChange has changed\n * It emits an event called visibilityChange and sends the value of document.hidden as a\n * parameter\n *\n * @private\n */\n _handleVisibilityChange () {\n const visible = !document[this._hidden]\n debug(visible ? 'Page Visible' : 'Page Hidden')\n // Emit the event\n this.emit('visibilityChange', visible)\n }\n}\n\nmodule.exports = VisibilityChangeEmitter\n","'use strict'\n\nmodule.exports = {\n DIAL_TIMEOUT: 30e3, // How long in ms a dial attempt is allowed to take\n MAX_PARALLEL_DIALS: 100, // Maximum allowed concurrent dials\n MAX_PER_PEER_DIALS: 4, // Allowed parallel dials per DialRequest\n MAX_ADDRS_TO_DIAL: 25, // Maximum number of allowed addresses to attempt to dial\n METRICS: {\n computeThrottleMaxQueueSize: 1000,\n computeThrottleTimeout: 2000,\n movingAverageIntervals: [\n 60 * 1000, // 1 minute\n 5 * 60 * 1000, // 5 minutes\n 15 * 60 * 1000 // 15 minutes\n ],\n maxOldPeersRetention: 50\n }\n}\n","'use strict'\n\nconst errCode = require('err-code')\nconst { messages, codes } = require('../errors')\nconst {\n storeAddresses,\n uniquePeers,\n requirePeers,\n maybeLimitSource\n} = require('./utils')\nconst drain = require('it-drain')\nconst merge = require('it-merge')\nconst { pipe } = require('it-pipe')\nconst { DHTContentRouting } = require('../dht/dht-content-routing')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('multiformats/cid').CID} CID\n * @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule\n */\n\n/**\n * @typedef {Object} GetData\n * @property {PeerId} from\n * @property {Uint8Array} val\n */\n\nclass ContentRouting {\n /**\n * @class\n * @param {import('..')} libp2p\n */\n constructor (libp2p) {\n this.libp2p = libp2p\n /** @type {ContentRoutingModule[]} */\n this.routers = libp2p._modules.contentRouting || []\n this.dht = libp2p._dht\n\n // If we have the dht, add it to the available content routers\n if (this.dht && libp2p._config.dht.enabled) {\n this.routers.push(new DHTContentRouting(this.dht))\n }\n }\n\n /**\n * Iterates over all content routers in parallel to find providers of the given key.\n *\n * @param {CID} key - The CID key of the content to find\n * @param {object} [options]\n * @param {number} [options.timeout] - How long the query should run\n * @param {number} [options.maxNumProviders] - maximum number of providers to find\n * @returns {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>}\n */\n async * findProviders (key, options = {}) {\n if (!this.routers.length) {\n throw errCode(new Error('No content this.routers available'), codes.ERR_NO_ROUTERS_AVAILABLE)\n }\n\n yield * pipe(\n merge(\n ...this.routers.map(router => router.findProviders(key, options))\n ),\n (source) => storeAddresses(source, this.libp2p.peerStore),\n (source) => uniquePeers(source),\n (source) => maybeLimitSource(source, options.maxNumProviders),\n (source) => requirePeers(source)\n )\n }\n\n /**\n * Iterates over all content routers in parallel to notify it is\n * a provider of the given key.\n *\n * @param {CID} key - The CID key of the content to find\n * @returns {Promise<void>}\n */\n async provide (key) {\n if (!this.routers.length) {\n throw errCode(new Error('No content routers available'), codes.ERR_NO_ROUTERS_AVAILABLE)\n }\n\n await Promise.all(this.routers.map((router) => router.provide(key)))\n }\n\n /**\n * Store the given key/value pair in the DHT.\n *\n * @param {Uint8Array} key\n * @param {Uint8Array} value\n * @param {Object} [options] - put options\n * @param {number} [options.minPeers] - minimum number of peers required to successfully put\n * @returns {Promise<void>}\n */\n async put (key, value, options) {\n if (!this.libp2p.isStarted() || !this.dht.isStarted) {\n throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)\n }\n\n await drain(this.dht.put(key, value, options))\n }\n\n /**\n * Get the value to the given key.\n * Times out after 1 minute by default.\n *\n * @param {Uint8Array} key\n * @param {Object} [options] - get options\n * @param {number} [options.timeout] - optional timeout (default: 60000)\n * @returns {Promise<GetData>}\n */\n async get (key, options) {\n if (!this.libp2p.isStarted() || !this.dht.isStarted) {\n throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)\n }\n\n for await (const event of this.dht.get(key, options)) {\n if (event.name === 'VALUE') {\n return { from: event.peerId, val: event.value }\n }\n }\n\n throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)\n }\n\n /**\n * Get the `n` values to the given key without sorting.\n *\n * @param {Uint8Array} key\n * @param {number} nVals\n * @param {Object} [options] - get options\n * @param {number} [options.timeout] - optional timeout (default: 60000)\n */\n async * getMany (key, nVals, options) { // eslint-disable-line require-await\n if (!this.libp2p.isStarted() || !this.dht.isStarted) {\n throw errCode(new Error(messages.NOT_STARTED_YET), codes.DHT_NOT_STARTED)\n }\n\n if (!nVals) {\n return\n }\n\n let gotValues = 0\n\n for await (const event of this.dht.get(key, options)) {\n if (event.name === 'VALUE') {\n yield { from: event.peerId, val: event.value }\n\n gotValues++\n\n if (gotValues === nVals) {\n break\n }\n }\n }\n\n if (gotValues === 0) {\n throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)\n }\n }\n}\n\nmodule.exports = ContentRouting\n","'use strict'\n\nconst errCode = require('err-code')\nconst filter = require('it-filter')\nconst map = require('it-map')\nconst take = require('it-take')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * Store the multiaddrs from every peer in the passed peer store\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n * @param {import('../peer-store/types').PeerStore} peerStore\n */\nasync function * storeAddresses (source, peerStore) {\n yield * map(source, async (peer) => {\n // ensure we have the addresses for a given peer\n await peerStore.addressBook.add(peer.id, peer.multiaddrs)\n\n return peer\n })\n}\n\n/**\n * Filter peers by unique peer id\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n */\nfunction uniquePeers (source) {\n /** @type Set<string> */\n const seen = new Set()\n\n return filter(source, (peer) => {\n // dedupe by peer id\n if (seen.has(peer.id.toString())) {\n return false\n }\n\n seen.add(peer.id.toString())\n\n return true\n })\n}\n\n/**\n * Require at least `min` peers to be yielded from `source`\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n * @param {number} min\n */\nasync function * requirePeers (source, min = 1) {\n let seen = 0\n\n for await (const peer of source) {\n seen++\n\n yield peer\n }\n\n if (seen < min) {\n throw errCode(new Error('not found'), 'NOT_FOUND')\n }\n}\n\n/**\n * If `max` is passed, only take that number of peers from the source\n * otherwise take all the peers\n *\n * @param {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>} source\n * @param {number} [max]\n */\nfunction maybeLimitSource (source, max) {\n if (max) {\n return take(source, max)\n }\n\n return source\n}\n\nmodule.exports = {\n storeAddresses,\n uniquePeers,\n requirePeers,\n maybeLimitSource\n}\n","'use strict'\n\nconst drain = require('it-drain')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule\n * @typedef {import('multiformats/cid').CID} CID\n */\n\n/**\n * Wrapper class to convert events into returned values\n *\n * @implements {ContentRoutingModule}\n */\nclass DHTContentRouting {\n /**\n * @param {import('libp2p-kad-dht').DHT} dht\n */\n constructor (dht) {\n this._dht = dht\n }\n\n /**\n * @param {CID} cid\n */\n async provide (cid) {\n await drain(this._dht.provide(cid))\n }\n\n /**\n * @param {CID} cid\n * @param {*} options\n */\n async * findProviders (cid, options) {\n for await (const event of this._dht.findProviders(cid, options)) {\n if (event.name === 'PROVIDER') {\n yield * event.providers\n }\n }\n }\n}\n\nmodule.exports = { DHTContentRouting }\n","'use strict'\n\nconst errCode = require('err-code')\nconst { messages, codes } = require('../errors')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule\n */\n\n/**\n * Wrapper class to convert events into returned values\n *\n * @implements {PeerRoutingModule}\n */\nclass DHTPeerRouting {\n /**\n * @param {import('libp2p-kad-dht').DHT} dht\n */\n constructor (dht) {\n this._dht = dht\n }\n\n /**\n * @param {PeerId} peerId\n * @param {any} options\n */\n async findPeer (peerId, options = {}) {\n for await (const event of this._dht.findPeer(peerId, options)) {\n if (event.name === 'FINAL_PEER') {\n return event.peer\n }\n }\n\n throw errCode(new Error(messages.NOT_FOUND), codes.ERR_NOT_FOUND)\n }\n\n /**\n * @param {Uint8Array} key\n * @param {any} options\n */\n async * getClosestPeers (key, options = {}) {\n for await (const event of this._dht.getClosestPeers(key, options)) {\n if (event.name === 'PEER_RESPONSE') {\n yield * event.closer\n }\n }\n }\n}\n\nmodule.exports = { DHTPeerRouting }\n","'use strict'\n\nconst errCode = require('err-code')\nconst { anySignal } = require('any-signal')\n// @ts-ignore p-fifo does not export types\nconst FIFO = require('p-fifo')\nconst pAny = require('p-any')\n// @ts-expect-error setMaxListeners is missing from the types\nconst { setMaxListeners } = require('events')\nconst { codes } = require('../errors')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('./')} Dialer\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\n/**\n * @typedef {Object} DialOptions\n * @property {AbortSignal} signal\n *\n * @typedef {Object} DialRequestOptions\n * @property {Multiaddr[]} addrs\n * @property {(m: Multiaddr, options: DialOptions) => Promise<Connection>} dialAction\n * @property {Dialer} dialer\n */\n\nclass DialRequest {\n /**\n * Manages running the `dialAction` on multiple provided `addrs` in parallel\n * up to a maximum determined by the number of tokens returned\n * from `dialer.getTokens`. Once a DialRequest is created, it can be\n * started using `DialRequest.run(options)`. Once a single dial has succeeded,\n * all other dials in the request will be cancelled.\n *\n * @class\n * @param {DialRequestOptions} options\n */\n constructor ({\n addrs,\n dialAction,\n dialer\n }) {\n this.addrs = addrs\n this.dialer = dialer\n this.dialAction = dialAction\n }\n\n /**\n * @async\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] - An AbortController signal\n * @returns {Promise<Connection>}\n */\n async run (options = {}) {\n const tokens = this.dialer.getTokens(this.addrs.length)\n // If no tokens are available, throw\n if (tokens.length < 1) {\n throw errCode(new Error('No dial tokens available'), codes.ERR_NO_DIAL_TOKENS)\n }\n\n const tokenHolder = new FIFO()\n tokens.forEach(token => tokenHolder.push(token))\n const dialAbortControllers = this.addrs.map(() => {\n const controller = new AbortController()\n try {\n // fails on node < 15.4\n setMaxListeners && setMaxListeners(Infinity, controller.signal)\n } catch {}\n\n return controller\n })\n let completedDials = 0\n\n try {\n return await pAny(this.addrs.map(async (addr, i) => {\n const token = await tokenHolder.shift() // get token\n let conn\n try {\n const signal = dialAbortControllers[i].signal\n conn = await this.dialAction(addr, { ...options, signal: options.signal ? anySignal([signal, options.signal]) : signal })\n // Remove the successful AbortController so it is not aborted\n dialAbortControllers.splice(i, 1)\n } finally {\n completedDials++\n // If we have more or equal dials remaining than tokens, recycle the token, otherwise release it\n if (this.addrs.length - completedDials >= tokens.length) {\n tokenHolder.push(token)\n } else {\n this.dialer.releaseToken(tokens.splice(tokens.indexOf(token), 1)[0])\n }\n }\n\n return conn\n }))\n } finally {\n dialAbortControllers.map(c => c.abort()) // success/failure happened, abort everything else\n tokens.forEach(token => this.dialer.releaseToken(token)) // release tokens back to the dialer\n }\n }\n}\n\nmodule.exports = DialRequest\n","'use strict'\n\nconst debug = require('debug')\nconst all = require('it-all')\nconst filter = require('it-filter')\nconst { pipe } = require('it-pipe')\nconst log = Object.assign(debug('libp2p:dialer'), {\n error: debug('libp2p:dialer:err')\n})\nconst errCode = require('err-code')\nconst { Multiaddr } = require('multiaddr')\nconst { TimeoutController } = require('timeout-abort-controller')\nconst { AbortError } = require('abortable-iterator')\nconst { anySignal } = require('any-signal')\n// @ts-expect-error setMaxListeners is missing from the types\nconst { setMaxListeners } = require('events')\nconst DialRequest = require('./dial-request')\nconst { publicAddressesFirst } = require('libp2p-utils/src/address-sort')\nconst getPeer = require('../get-peer')\nconst trackedMap = require('../metrics/tracked-map')\nconst { codes } = require('../errors')\nconst {\n DIAL_TIMEOUT,\n MAX_PARALLEL_DIALS,\n MAX_PER_PEER_DIALS,\n MAX_ADDRS_TO_DIAL\n} = require('../constants')\n\nconst METRICS_COMPONENT = 'dialler'\nconst METRICS_PENDING_DIALS = 'pending-dials'\nconst METRICS_PENDING_DIAL_TARGETS = 'pending-dial-targets'\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('../peer-store/types').PeerStore} PeerStore\n * @typedef {import('../peer-store/types').Address} Address\n * @typedef {import('../transport-manager')} TransportManager\n * @typedef {import('../types').ConnectionGater} ConnectionGater\n */\n\n/**\n * @typedef {Object} DialerProperties\n * @property {PeerStore} peerStore\n * @property {TransportManager} transportManager\n * @property {ConnectionGater} connectionGater\n *\n * @typedef {(addr:Multiaddr) => Promise<string[]>} Resolver\n *\n * @typedef {Object} DialerOptions\n * @property {(addresses: Address[]) => Address[]} [options.addressSorter = publicAddressesFirst] - Sort the known addresses of a peer before trying to dial.\n * @property {number} [maxParallelDials = MAX_PARALLEL_DIALS] - Number of max concurrent dials.\n * @property {number} [maxAddrsToDial = MAX_ADDRS_TO_DIAL] - Number of max addresses to dial for a given peer.\n * @property {number} [maxDialsPerPeer = MAX_PER_PEER_DIALS] - Number of max concurrent dials per peer.\n * @property {number} [dialTimeout = DIAL_TIMEOUT] - How long a dial attempt is allowed to take.\n * @property {Record<string, Resolver>} [resolvers = {}] - multiaddr resolvers to use when dialing\n * @property {import('../metrics')} [metrics]\n *\n * @typedef DialTarget\n * @property {string} id\n * @property {Multiaddr[]} addrs\n *\n * @typedef PendingDial\n * @property {import('./dial-request')} dialRequest\n * @property {import('timeout-abort-controller').TimeoutController} controller\n * @property {Promise<Connection>} promise\n * @property {function():void} destroy\n */\n\nclass Dialer {\n /**\n * @class\n * @param {DialerProperties & DialerOptions} options\n */\n constructor ({\n transportManager,\n peerStore,\n connectionGater,\n addressSorter = publicAddressesFirst,\n maxParallelDials = MAX_PARALLEL_DIALS,\n maxAddrsToDial = MAX_ADDRS_TO_DIAL,\n dialTimeout = DIAL_TIMEOUT,\n maxDialsPerPeer = MAX_PER_PEER_DIALS,\n resolvers = {},\n metrics\n }) {\n this.connectionGater = connectionGater\n this.transportManager = transportManager\n this.peerStore = peerStore\n this.addressSorter = addressSorter\n this.maxParallelDials = maxParallelDials\n this.maxAddrsToDial = maxAddrsToDial\n this.timeout = dialTimeout\n this.maxDialsPerPeer = maxDialsPerPeer\n this.tokens = [...new Array(maxParallelDials)].map((_, index) => index)\n\n /** @type {Map<string, PendingDial>} */\n this._pendingDials = trackedMap({\n component: METRICS_COMPONENT,\n metric: METRICS_PENDING_DIALS,\n metrics\n })\n\n /** @type {Map<string, { resolve: (value: any) => void, reject: (err: Error) => void}>} */\n this._pendingDialTargets = trackedMap({\n component: METRICS_COMPONENT,\n metric: METRICS_PENDING_DIAL_TARGETS,\n metrics\n })\n\n for (const [key, value] of Object.entries(resolvers)) {\n Multiaddr.resolvers.set(key, value)\n }\n }\n\n /**\n * Clears any pending dials\n */\n destroy () {\n for (const dial of this._pendingDials.values()) {\n try {\n dial.controller.abort()\n } catch (/** @type {any} */ err) {\n log.error(err)\n }\n }\n this._pendingDials.clear()\n\n for (const pendingTarget of this._pendingDialTargets.values()) {\n pendingTarget.reject(new AbortError('Dialer was destroyed'))\n }\n this._pendingDialTargets.clear()\n }\n\n /**\n * Connects to a given `peer` by dialing all of its known addresses.\n * The dial to the first address that is successfully able to upgrade a connection\n * will be used.\n *\n * @param {PeerId|Multiaddr|string} peer - The peer to dial\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] - An AbortController signal\n * @returns {Promise<Connection>}\n */\n async connectToPeer (peer, options = {}) {\n const { id } = getPeer(peer)\n\n if (await this.connectionGater.denyDialPeer(id)) {\n throw errCode(new Error('The dial request is blocked by gater.allowDialPeer'), codes.ERR_PEER_DIAL_INTERCEPTED)\n }\n\n const dialTarget = await this._createCancellableDialTarget(peer)\n\n if (!dialTarget.addrs.length) {\n throw errCode(new Error('The dial request has no valid addresses'), codes.ERR_NO_VALID_ADDRESSES)\n }\n const pendingDial = this._pendingDials.get(dialTarget.id) || this._createPendingDial(dialTarget, options)\n\n try {\n const connection = await pendingDial.promise\n log('dial succeeded to %s', dialTarget.id)\n return connection\n } catch (/** @type {any} */ err) {\n // Error is a timeout\n if (pendingDial.controller.signal.aborted) {\n err.code = codes.ERR_TIMEOUT\n }\n log.error(err)\n throw err\n } finally {\n pendingDial.destroy()\n }\n }\n\n /**\n * Connects to a given `peer` by dialing all of its known addresses.\n * The dial to the first address that is successfully able to upgrade a connection\n * will be used.\n *\n * @param {PeerId|Multiaddr|string} peer - The peer to dial\n * @returns {Promise<DialTarget>}\n */\n async _createCancellableDialTarget (peer) {\n // Make dial target promise cancellable\n const id = `${(parseInt(String(Math.random() * 1e9), 10)).toString() + Date.now()}`\n const cancellablePromise = new Promise((resolve, reject) => {\n this._pendingDialTargets.set(id, { resolve, reject })\n })\n\n try {\n const dialTarget = await Promise.race([\n this._createDialTarget(peer),\n cancellablePromise\n ])\n\n return dialTarget\n } finally {\n this._pendingDialTargets.delete(id)\n }\n }\n\n /**\n * Creates a DialTarget. The DialTarget is used to create and track\n * the DialRequest to a given peer.\n * If a multiaddr is received it should be the first address attempted.\n * Multiaddrs not supported by the available transports will be filtered out.\n *\n * @private\n * @param {PeerId|Multiaddr|string} peer - A PeerId or Multiaddr\n * @returns {Promise<DialTarget>}\n */\n async _createDialTarget (peer) {\n const { id, multiaddrs } = getPeer(peer)\n\n if (multiaddrs) {\n await this.peerStore.addressBook.add(id, multiaddrs)\n }\n\n let knownAddrs = await pipe(\n await this.peerStore.addressBook.getMultiaddrsForPeer(id, this.addressSorter),\n (source) => filter(source, async (multiaddr) => {\n return !(await this.connectionGater.denyDialMultiaddr(id, multiaddr))\n }),\n (source) => all(source)\n )\n\n // If received a multiaddr to dial, it should be the first to use\n // But, if we know other multiaddrs for the peer, we should try them too.\n if (Multiaddr.isMultiaddr(peer)) {\n knownAddrs = knownAddrs.filter((addr) => !peer.equals(addr))\n knownAddrs.unshift(peer)\n }\n\n /** @type {Multiaddr[]} */\n const addrs = []\n for (const a of knownAddrs) {\n const resolvedAddrs = await this._resolve(a)\n resolvedAddrs.forEach(ra => addrs.push(ra))\n }\n\n // Multiaddrs not supported by the available transports will be filtered out.\n const supportedAddrs = addrs.filter(a => this.transportManager.transportForMultiaddr(a))\n\n if (supportedAddrs.length > this.maxAddrsToDial) {\n await this.peerStore.delete(id)\n throw errCode(new Error('dial with more addresses than allowed'), codes.ERR_TOO_MANY_ADDRESSES)\n }\n\n return {\n id: id.toB58String(),\n addrs: supportedAddrs\n }\n }\n\n /**\n * Creates a PendingDial that wraps the underlying DialRequest\n *\n * @private\n * @param {DialTarget} dialTarget\n * @param {object} [options]\n * @param {AbortSignal} [options.signal] - An AbortController signal\n * @returns {PendingDial}\n */\n _createPendingDial (dialTarget, options = {}) {\n /**\n * @param {Multiaddr} addr\n * @param {{ signal: { aborted: any; }; }} options\n */\n const dialAction = (addr, options) => {\n if (options.signal.aborted) throw errCode(new Error('already aborted'), codes.ERR_ALREADY_ABORTED)\n return this.transportManager.dial(addr, options)\n }\n\n const dialRequest = new DialRequest({\n addrs: dialTarget.addrs,\n dialAction,\n dialer: this\n })\n\n // Combine the timeout signal and options.signal, if provided\n const timeoutController = new TimeoutController(this.timeout)\n\n const signals = [timeoutController.signal]\n options.signal && signals.push(options.signal)\n const signal = anySignal(signals)\n\n // this signal will potentially be used while dialing lots of\n // peers so prevent MaxListenersExceededWarning appearing in the console\n try {\n // fails on node < 15.4\n setMaxListeners && setMaxListeners(Infinity, signal)\n } catch {}\n\n const pendingDial = {\n dialRequest,\n controller: timeoutController,\n promise: dialRequest.run({ ...options, signal }),\n destroy: () => {\n timeoutController.clear()\n this._pendingDials.delete(dialTarget.id)\n }\n }\n this._pendingDials.set(dialTarget.id, pendingDial)\n\n return pendingDial\n }\n\n /**\n * @param {number} num\n */\n getTokens (num) {\n const total = Math.min(num, this.maxDialsPerPeer, this.tokens.length)\n const tokens = this.tokens.splice(0, total)\n log('%d tokens request, returning %d, %d remaining', num, total, this.tokens.length)\n return tokens\n }\n\n /**\n * @param {number} token\n */\n releaseToken (token) {\n // Guard against duplicate releases\n if (this.tokens.indexOf(token) > -1) return\n log('token %d released', token)\n this.tokens.push(token)\n }\n\n /**\n * Resolve multiaddr recursively.\n *\n * @param {Multiaddr} ma\n * @returns {Promise<Multiaddr[]>}\n */\n async _resolve (ma) {\n // TODO: recursive logic should live in multiaddr once dns4/dns6 support is in place\n // Now only supporting resolve for dnsaddr\n const resolvableProto = ma.protoNames().includes('dnsaddr')\n\n // Multiaddr is not resolvable? End recursion!\n if (!resolvableProto) {\n return [ma]\n }\n\n const resolvedMultiaddrs = await this._resolveRecord(ma)\n const recursiveMultiaddrs = await Promise.all(resolvedMultiaddrs.map((nm) => {\n return this._resolve(nm)\n }))\n\n const addrs = recursiveMultiaddrs.flat()\n return addrs.reduce((array, newM) => {\n if (!array.find(m => m.equals(newM))) {\n array.push(newM)\n }\n return array\n }, /** @type {Multiaddr[]} */([]))\n }\n\n /**\n * Resolve a given multiaddr. If this fails, an empty array will be returned\n *\n * @param {Multiaddr} ma\n * @returns {Promise<Multiaddr[]>}\n */\n async _resolveRecord (ma) {\n try {\n ma = new Multiaddr(ma.toString()) // Use current multiaddr module\n const multiaddrs = await ma.resolve()\n return multiaddrs\n } catch (_) {\n log.error(`multiaddr ${ma} could not be resolved`)\n return []\n }\n }\n}\n\nmodule.exports = Dialer\n","'use strict'\n\nexports.messages = {\n NOT_STARTED_YET: 'The libp2p node is not started yet',\n DHT_DISABLED: 'DHT is not available',\n CONN_ENCRYPTION_REQUIRED: 'At least one connection encryption module is required',\n NOT_FOUND: 'Not found'\n}\n\nexports.codes = {\n DHT_DISABLED: 'ERR_DHT_DISABLED',\n PUBSUB_NOT_STARTED: 'ERR_PUBSUB_NOT_STARTED',\n DHT_NOT_STARTED: 'ERR_DHT_NOT_STARTED',\n CONN_ENCRYPTION_REQUIRED: 'ERR_CONN_ENCRYPTION_REQUIRED',\n ERR_PEER_DIAL_INTERCEPTED: 'ERR_PEER_DIAL_INTERCEPTED',\n ERR_CONNECTION_INTERCEPTED: 'ERR_CONNECTION_INTERCEPTED',\n ERR_INVALID_PROTOCOLS_FOR_STREAM: 'ERR_INVALID_PROTOCOLS_FOR_STREAM',\n ERR_CONNECTION_ENDED: 'ERR_CONNECTION_ENDED',\n ERR_CONNECTION_FAILED: 'ERR_CONNECTION_FAILED',\n ERR_NODE_NOT_STARTED: 'ERR_NODE_NOT_STARTED',\n ERR_ALREADY_ABORTED: 'ERR_ALREADY_ABORTED',\n ERR_TOO_MANY_ADDRESSES: 'ERR_TOO_MANY_ADDRESSES',\n ERR_NO_VALID_ADDRESSES: 'ERR_NO_VALID_ADDRESSES',\n ERR_RELAYED_DIAL: 'ERR_RELAYED_DIAL',\n ERR_DIALED_SELF: 'ERR_DIALED_SELF',\n ERR_DISCOVERED_SELF: 'ERR_DISCOVERED_SELF',\n ERR_DUPLICATE_TRANSPORT: 'ERR_DUPLICATE_TRANSPORT',\n ERR_ENCRYPTION_FAILED: 'ERR_ENCRYPTION_FAILED',\n ERR_HOP_REQUEST_FAILED: 'ERR_HOP_REQUEST_FAILED',\n ERR_INVALID_KEY: 'ERR_INVALID_KEY',\n ERR_INVALID_MESSAGE: 'ERR_INVALID_MESSAGE',\n ERR_INVALID_PARAMETERS: 'ERR_INVALID_PARAMETERS',\n ERR_INVALID_PEER: 'ERR_INVALID_PEER',\n ERR_MUXER_UNAVAILABLE: 'ERR_MUXER_UNAVAILABLE',\n ERR_NOT_FOUND: 'ERR_NOT_FOUND',\n ERR_TIMEOUT: 'ERR_TIMEOUT',\n ERR_TRANSPORT_UNAVAILABLE: 'ERR_TRANSPORT_UNAVAILABLE',\n ERR_TRANSPORT_DIAL_FAILED: 'ERR_TRANSPORT_DIAL_FAILED',\n ERR_UNSUPPORTED_PROTOCOL: 'ERR_UNSUPPORTED_PROTOCOL',\n ERR_INVALID_MULTIADDR: 'ERR_INVALID_MULTIADDR',\n ERR_SIGNATURE_NOT_VALID: 'ERR_SIGNATURE_NOT_VALID',\n ERR_FIND_SELF: 'ERR_FIND_SELF',\n ERR_NO_ROUTERS_AVAILABLE: 'ERR_NO_ROUTERS_AVAILABLE',\n ERR_CONNECTION_NOT_MULTIPLEXED: 'ERR_CONNECTION_NOT_MULTIPLEXED',\n ERR_NO_DIAL_TOKENS: 'ERR_NO_DIAL_TOKENS',\n ERR_KEYCHAIN_REQUIRED: 'ERR_KEYCHAIN_REQUIRED',\n ERR_INVALID_CMS: 'ERR_INVALID_CMS',\n ERR_MISSING_KEYS: 'ERR_MISSING_KEYS',\n ERR_NO_KEY: 'ERR_NO_KEY',\n ERR_INVALID_KEY_NAME: 'ERR_INVALID_KEY_NAME',\n ERR_INVALID_KEY_TYPE: 'ERR_INVALID_KEY_TYPE',\n ERR_KEY_ALREADY_EXISTS: 'ERR_KEY_ALREADY_EXISTS',\n ERR_INVALID_KEY_SIZE: 'ERR_INVALID_KEY_SIZE',\n ERR_KEY_NOT_FOUND: 'ERR_KEY_NOT_FOUND',\n ERR_OLD_KEY_NAME_INVALID: 'ERR_OLD_KEY_NAME_INVALID',\n ERR_NEW_KEY_NAME_INVALID: 'ERR_NEW_KEY_NAME_INVALID',\n ERR_PASSWORD_REQUIRED: 'ERR_PASSWORD_REQUIRED',\n ERR_PEM_REQUIRED: 'ERR_PEM_REQUIRED',\n ERR_CANNOT_READ_KEY: 'ERR_CANNOT_READ_KEY',\n ERR_MISSING_PRIVATE_KEY: 'ERR_MISSING_PRIVATE_KEY',\n ERR_INVALID_OLD_PASS_TYPE: 'ERR_INVALID_OLD_PASS_TYPE',\n ERR_INVALID_NEW_PASS_TYPE: 'ERR_INVALID_NEW_PASS_TYPE',\n ERR_INVALID_PASS_LENGTH: 'ERR_INVALID_PASS_LENGTH',\n ERR_NOT_IMPLEMENTED: 'ERR_NOT_IMPLEMENTED',\n ERR_WRONG_PING_ACK: 'ERR_WRONG_PING_ACK'\n}\n","'use strict'\n\nmodule.exports = {\n // https://github.com/libp2p/specs/tree/master/fetch#wire-protocol\n PROTOCOL: '/libp2p/fetch/0.0.1'\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:fetch'), {\n error: debug('libp2p:fetch:err')\n})\nconst errCode = require('err-code')\nconst { codes } = require('../errors')\nconst lp = require('it-length-prefixed')\nconst { FetchRequest, FetchResponse } = require('./proto')\n// @ts-ignore it-handshake does not export types\nconst handshake = require('it-handshake')\nconst { PROTOCOL } = require('./constants')\n\n/**\n * @typedef {import('../')} Libp2p\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {(key: string) => Promise<Uint8Array | null>} LookupFunction\n */\n\n/**\n * A simple libp2p protocol for requesting a value corresponding to a key from a peer.\n * Developers can register one or more lookup function for retrieving the value corresponding to\n * a given key. Each lookup function must act on a distinct part of the overall key space, defined\n * by a fixed prefix that all keys that should be routed to that lookup function will start with.\n */\nclass FetchProtocol {\n /**\n * @param {Libp2p} libp2p\n */\n constructor (libp2p) {\n this._lookupFunctions = new Map() // Maps key prefix to value lookup function\n this._libp2p = libp2p\n this.handleMessage = this.handleMessage.bind(this)\n }\n\n /**\n * Sends a request to fetch the value associated with the given key from the given peer.\n *\n * @param {PeerId|Multiaddr} peer\n * @param {string} key\n * @returns {Promise<Uint8Array | null>}\n */\n async fetch (peer, key) {\n // @ts-ignore multiaddr might not have toB58String\n log('dialing %s to %s', this._protocol, peer.toB58String ? peer.toB58String() : peer)\n\n const connection = await this._libp2p.dial(peer)\n const { stream } = await connection.newStream(FetchProtocol.PROTOCOL)\n const shake = handshake(stream)\n\n // send message\n const request = new FetchRequest({ identifier: key })\n shake.write(lp.encode.single(FetchRequest.encode(request).finish()))\n\n // read response\n const response = FetchResponse.decode((await lp.decode.fromReader(shake.reader).next()).value.slice())\n switch (response.status) {\n case (FetchResponse.StatusCode.OK): {\n return response.data\n }\n case (FetchResponse.StatusCode.NOT_FOUND): {\n return null\n }\n case (FetchResponse.StatusCode.ERROR): {\n const errmsg = (new TextDecoder()).decode(response.data)\n throw errCode(new Error('Error in fetch protocol response: ' + errmsg), codes.ERR_INVALID_PARAMETERS)\n }\n default: {\n throw errCode(new Error('Unknown response status'), codes.ERR_INVALID_MESSAGE)\n }\n }\n }\n\n /**\n * Invoked when a fetch request is received. Reads the request message off the given stream and\n * responds based on looking up the key in the request via the lookup callback that corresponds\n * to the key's prefix.\n *\n * @param {object} options\n * @param {MuxedStream} options.stream\n * @param {string} options.protocol\n */\n async handleMessage (options) {\n const { stream } = options\n const shake = handshake(stream)\n const request = FetchRequest.decode((await lp.decode.fromReader(shake.reader).next()).value.slice())\n\n let response\n const lookup = this._getLookupFunction(request.identifier)\n if (lookup) {\n const data = await lookup(request.identifier)\n if (data) {\n response = new FetchResponse({ status: FetchResponse.StatusCode.OK, data })\n } else {\n response = new FetchResponse({ status: FetchResponse.StatusCode.NOT_FOUND })\n }\n } else {\n const errmsg = (new TextEncoder()).encode('No lookup function registered for key: ' + request.identifier)\n response = new FetchResponse({ status: FetchResponse.StatusCode.ERROR, data: errmsg })\n }\n\n shake.write(lp.encode.single(FetchResponse.encode(response).finish()))\n }\n\n /**\n * Given a key, finds the appropriate function for looking up its corresponding value, based on\n * the key's prefix.\n *\n * @param {string} key\n */\n _getLookupFunction (key) {\n for (const prefix of this._lookupFunctions.keys()) {\n if (key.startsWith(prefix)) {\n return this._lookupFunctions.get(prefix)\n }\n }\n return null\n }\n\n /**\n * Registers a new lookup callback that can map keys to values, for a given set of keys that\n * share the same prefix.\n *\n * @param {string} prefix\n * @param {LookupFunction} lookup\n */\n registerLookupFunction (prefix, lookup) {\n if (this._lookupFunctions.has(prefix)) {\n throw errCode(new Error(\"Fetch protocol handler for key prefix '\" + prefix + \"' already registered\"), codes.ERR_KEY_ALREADY_EXISTS)\n }\n this._lookupFunctions.set(prefix, lookup)\n }\n\n /**\n * Registers a new lookup callback that can map keys to values, for a given set of keys that\n * share the same prefix.\n *\n * @param {string} prefix\n * @param {LookupFunction} [lookup]\n */\n unregisterLookupFunction (prefix, lookup) {\n if (lookup != null) {\n const existingLookup = this._lookupFunctions.get(prefix)\n\n if (existingLookup !== lookup) {\n return\n }\n }\n\n this._lookupFunctions.delete(prefix)\n }\n}\n\nFetchProtocol.PROTOCOL = PROTOCOL\n\nexports = module.exports = FetchProtocol\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-fetch\"] || ($protobuf.roots[\"libp2p-fetch\"] = {});\n\n$root.FetchRequest = (function() {\n\n /**\n * Properties of a FetchRequest.\n * @exports IFetchRequest\n * @interface IFetchRequest\n * @property {string|null} [identifier] FetchRequest identifier\n */\n\n /**\n * Constructs a new FetchRequest.\n * @exports FetchRequest\n * @classdesc Represents a FetchRequest.\n * @implements IFetchRequest\n * @constructor\n * @param {IFetchRequest=} [p] Properties to set\n */\n function FetchRequest(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * FetchRequest identifier.\n * @member {string} identifier\n * @memberof FetchRequest\n * @instance\n */\n FetchRequest.prototype.identifier = \"\";\n\n /**\n * Encodes the specified FetchRequest message. Does not implicitly {@link FetchRequest.verify|verify} messages.\n * @function encode\n * @memberof FetchRequest\n * @static\n * @param {IFetchRequest} m FetchRequest message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n FetchRequest.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.identifier != null && Object.hasOwnProperty.call(m, \"identifier\"))\n w.uint32(10).string(m.identifier);\n return w;\n };\n\n /**\n * Decodes a FetchRequest message from the specified reader or buffer.\n * @function decode\n * @memberof FetchRequest\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {FetchRequest} FetchRequest\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n FetchRequest.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.FetchRequest();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.identifier = r.string();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a FetchRequest message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof FetchRequest\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {FetchRequest} FetchRequest\n */\n FetchRequest.fromObject = function fromObject(d) {\n if (d instanceof $root.FetchRequest)\n return d;\n var m = new $root.FetchRequest();\n if (d.identifier != null) {\n m.identifier = String(d.identifier);\n }\n return m;\n };\n\n /**\n * Creates a plain object from a FetchRequest message. Also converts values to other types if specified.\n * @function toObject\n * @memberof FetchRequest\n * @static\n * @param {FetchRequest} m FetchRequest\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n FetchRequest.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.identifier = \"\";\n }\n if (m.identifier != null && m.hasOwnProperty(\"identifier\")) {\n d.identifier = m.identifier;\n }\n return d;\n };\n\n /**\n * Converts this FetchRequest to JSON.\n * @function toJSON\n * @memberof FetchRequest\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n FetchRequest.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return FetchRequest;\n})();\n\n$root.FetchResponse = (function() {\n\n /**\n * Properties of a FetchResponse.\n * @exports IFetchResponse\n * @interface IFetchResponse\n * @property {FetchResponse.StatusCode|null} [status] FetchResponse status\n * @property {Uint8Array|null} [data] FetchResponse data\n */\n\n /**\n * Constructs a new FetchResponse.\n * @exports FetchResponse\n * @classdesc Represents a FetchResponse.\n * @implements IFetchResponse\n * @constructor\n * @param {IFetchResponse=} [p] Properties to set\n */\n function FetchResponse(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * FetchResponse status.\n * @member {FetchResponse.StatusCode} status\n * @memberof FetchResponse\n * @instance\n */\n FetchResponse.prototype.status = 0;\n\n /**\n * FetchResponse data.\n * @member {Uint8Array} data\n * @memberof FetchResponse\n * @instance\n */\n FetchResponse.prototype.data = $util.newBuffer([]);\n\n /**\n * Encodes the specified FetchResponse message. Does not implicitly {@link FetchResponse.verify|verify} messages.\n * @function encode\n * @memberof FetchResponse\n * @static\n * @param {IFetchResponse} m FetchResponse message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n FetchResponse.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.status != null && Object.hasOwnProperty.call(m, \"status\"))\n w.uint32(8).int32(m.status);\n if (m.data != null && Object.hasOwnProperty.call(m, \"data\"))\n w.uint32(18).bytes(m.data);\n return w;\n };\n\n /**\n * Decodes a FetchResponse message from the specified reader or buffer.\n * @function decode\n * @memberof FetchResponse\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {FetchResponse} FetchResponse\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n FetchResponse.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.FetchResponse();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.status = r.int32();\n break;\n case 2:\n m.data = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a FetchResponse message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof FetchResponse\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {FetchResponse} FetchResponse\n */\n FetchResponse.fromObject = function fromObject(d) {\n if (d instanceof $root.FetchResponse)\n return d;\n var m = new $root.FetchResponse();\n switch (d.status) {\n case \"OK\":\n case 0:\n m.status = 0;\n break;\n case \"NOT_FOUND\":\n case 1:\n m.status = 1;\n break;\n case \"ERROR\":\n case 2:\n m.status = 2;\n break;\n }\n if (d.data != null) {\n if (typeof d.data === \"string\")\n $util.base64.decode(d.data, m.data = $util.newBuffer($util.base64.length(d.data)), 0);\n else if (d.data.length)\n m.data = d.data;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a FetchResponse message. Also converts values to other types if specified.\n * @function toObject\n * @memberof FetchResponse\n * @static\n * @param {FetchResponse} m FetchResponse\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n FetchResponse.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.status = o.enums === String ? \"OK\" : 0;\n if (o.bytes === String)\n d.data = \"\";\n else {\n d.data = [];\n if (o.bytes !== Array)\n d.data = $util.newBuffer(d.data);\n }\n }\n if (m.status != null && m.hasOwnProperty(\"status\")) {\n d.status = o.enums === String ? $root.FetchResponse.StatusCode[m.status] : m.status;\n }\n if (m.data != null && m.hasOwnProperty(\"data\")) {\n d.data = o.bytes === String ? $util.base64.encode(m.data, 0, m.data.length) : o.bytes === Array ? Array.prototype.slice.call(m.data) : m.data;\n }\n return d;\n };\n\n /**\n * Converts this FetchResponse to JSON.\n * @function toJSON\n * @memberof FetchResponse\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n FetchResponse.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n /**\n * StatusCode enum.\n * @name FetchResponse.StatusCode\n * @enum {number}\n * @property {number} OK=0 OK value\n * @property {number} NOT_FOUND=1 NOT_FOUND value\n * @property {number} ERROR=2 ERROR value\n */\n FetchResponse.StatusCode = (function() {\n var valuesById = {}, values = Object.create(valuesById);\n values[valuesById[0] = \"OK\"] = 0;\n values[valuesById[1] = \"NOT_FOUND\"] = 1;\n values[valuesById[2] = \"ERROR\"] = 2;\n return values;\n })();\n\n return FetchResponse;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\nconst errCode = require('err-code')\n\nconst { codes } = require('./errors')\n\n/**\n * Converts the given `peer` to a `Peer` object.\n * If a multiaddr is received, the addressBook is updated.\n *\n * @param {PeerId|Multiaddr|string} peer\n * @returns {{ id: PeerId, multiaddrs: Multiaddr[]|undefined }}\n */\nfunction getPeer (peer) {\n if (typeof peer === 'string') {\n peer = new Multiaddr(peer)\n }\n\n let addr\n if (Multiaddr.isMultiaddr(peer)) {\n addr = peer\n const idStr = peer.getPeerId()\n\n if (!idStr) {\n throw errCode(\n new Error(`${peer} does not have a valid peer type`),\n codes.ERR_INVALID_MULTIADDR\n )\n }\n\n try {\n peer = PeerId.createFromB58String(idStr)\n } catch (/** @type {any} */ err) {\n throw errCode(\n new Error(`${peer} is not a valid peer type`),\n codes.ERR_INVALID_MULTIADDR\n )\n }\n }\n\n return {\n id: peer,\n multiaddrs: addr ? [addr] : undefined\n }\n}\n\nmodule.exports = getPeer\n","'use strict'\n\n// @ts-ignore file not listed within the file list of projects\nconst libp2pVersion = require('../../package.json').version\n\nmodule.exports.PROTOCOL_VERSION = 'ipfs/0.1.0' // deprecated\nmodule.exports.AGENT_VERSION = `js-libp2p/${libp2pVersion}`\nmodule.exports.MULTICODEC_IDENTIFY = '/ipfs/id/1.0.0' // deprecated\nmodule.exports.MULTICODEC_IDENTIFY_PUSH = '/ipfs/id/push/1.0.0' // deprecated\n\nmodule.exports.IDENTIFY_PROTOCOL_VERSION = '0.1.0'\nmodule.exports.MULTICODEC_IDENTIFY_PROTOCOL_NAME = 'id'\nmodule.exports.MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME = 'id/push'\nmodule.exports.MULTICODEC_IDENTIFY_PROTOCOL_VERSION = '1.0.0'\nmodule.exports.MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = '1.0.0'\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:identify'), {\n error: debug('libp2p:identify:err')\n})\nconst errCode = require('err-code')\nconst lp = require('it-length-prefixed')\nconst { pipe } = require('it-pipe')\nconst { collect, take, consume } = require('streaming-iterables')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\n// @ts-ignore it-buffer does not have types\nconst { toBuffer } = require('it-buffer')\n\nconst Message = require('./message')\n\nconst Envelope = require('../record/envelope')\nconst PeerRecord = require('../record/peer-record')\n\nconst {\n MULTICODEC_IDENTIFY,\n MULTICODEC_IDENTIFY_PUSH,\n IDENTIFY_PROTOCOL_VERSION,\n MULTICODEC_IDENTIFY_PROTOCOL_NAME,\n MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME,\n MULTICODEC_IDENTIFY_PROTOCOL_VERSION,\n MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION\n} = require('./consts')\n\nconst { codes } = require('../errors')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n */\n\n/**\n * @typedef {Object} HostProperties\n * @property {string} agentVersion\n */\n\nclass IdentifyService {\n /**\n * @param {import('../')} libp2p\n */\n static getProtocolStr (libp2p) {\n return {\n identifyProtocolStr: `/${libp2p._config.protocolPrefix}/${MULTICODEC_IDENTIFY_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PROTOCOL_VERSION}`,\n identifyPushProtocolStr: `/${libp2p._config.protocolPrefix}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION}`\n }\n }\n\n /**\n * @class\n * @param {Object} options\n * @param {import('../')} options.libp2p\n */\n constructor ({ libp2p }) {\n this._libp2p = libp2p\n this.peerStore = libp2p.peerStore\n this.addressManager = libp2p.addressManager\n this.connectionManager = libp2p.connectionManager\n this.peerId = libp2p.peerId\n\n this.handleMessage = this.handleMessage.bind(this)\n\n const protocolStr = IdentifyService.getProtocolStr(libp2p)\n this.identifyProtocolStr = protocolStr.identifyProtocolStr\n this.identifyPushProtocolStr = protocolStr.identifyPushProtocolStr\n\n // Store self host metadata\n this._host = {\n protocolVersion: `${libp2p._config.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`,\n ...libp2p._options.host\n }\n\n // When a new connection happens, trigger identify\n this.connectionManager.on('peer:connect', (connection) => {\n this.identify(connection).catch(log.error)\n })\n\n // When self multiaddrs change, trigger identify-push\n this.peerStore.on('change:multiaddrs', ({ peerId }) => {\n if (peerId.toString() === this.peerId.toString()) {\n this.pushToPeerStore().catch(err => log.error(err))\n }\n })\n\n // When self protocols change, trigger identify-push\n this.peerStore.on('change:protocols', ({ peerId }) => {\n if (peerId.toString() === this.peerId.toString()) {\n this.pushToPeerStore().catch(err => log.error(err))\n }\n })\n }\n\n async start () {\n await this.peerStore.metadataBook.setValue(this.peerId, 'AgentVersion', uint8ArrayFromString(this._host.agentVersion))\n await this.peerStore.metadataBook.setValue(this.peerId, 'ProtocolVersion', uint8ArrayFromString(this._host.protocolVersion))\n }\n\n async stop () {\n\n }\n\n /**\n * Send an Identify Push update to the list of connections\n *\n * @param {Connection[]} connections\n * @returns {Promise<void[]>}\n */\n async push (connections) {\n const signedPeerRecord = await this.peerStore.addressBook.getRawEnvelope(this.peerId)\n const listenAddrs = this._libp2p.multiaddrs.map((ma) => ma.bytes)\n const protocols = await this.peerStore.protoBook.get(this.peerId)\n\n const pushes = connections.map(async connection => {\n try {\n const { stream } = await connection.newStream(this.identifyPushProtocolStr)\n\n await pipe(\n [Message.Identify.encode({\n listenAddrs,\n signedPeerRecord,\n protocols\n }).finish()],\n lp.encode(),\n stream,\n consume\n )\n } catch (/** @type {any} */ err) {\n // Just log errors\n log.error('could not push identify update to peer', err)\n }\n })\n\n return Promise.all(pushes)\n }\n\n /**\n * Calls `push` for all peers in the `peerStore` that are connected\n */\n async pushToPeerStore () {\n // Do not try to push if libp2p node is not running\n if (!this._libp2p.isStarted()) {\n return\n }\n\n const connections = []\n let connection\n for await (const peer of this.peerStore.getPeers()) {\n if (peer.protocols.includes(this.identifyPushProtocolStr) && (connection = this.connectionManager.get(peer.id))) {\n connections.push(connection)\n }\n }\n\n await this.push(connections)\n }\n\n /**\n * Requests the `Identify` message from peer associated with the given `connection`.\n * If the identified peer does not match the `PeerId` associated with the connection,\n * an error will be thrown.\n *\n * @async\n * @param {Connection} connection\n * @returns {Promise<void>}\n */\n async identify (connection) {\n const { stream } = await connection.newStream(this.identifyProtocolStr)\n const [data] = await pipe(\n [],\n stream,\n lp.decode(),\n take(1),\n toBuffer,\n collect\n )\n\n if (!data) {\n throw errCode(new Error('No data could be retrieved'), codes.ERR_CONNECTION_ENDED)\n }\n\n let message\n try {\n message = Message.Identify.decode(data)\n } catch (/** @type {any} */ err) {\n throw errCode(err, codes.ERR_INVALID_MESSAGE)\n }\n\n const {\n publicKey,\n listenAddrs,\n protocols,\n observedAddr,\n signedPeerRecord\n } = message\n\n const id = await PeerId.createFromPubKey(publicKey)\n\n if (connection.remotePeer.toB58String() !== id.toB58String()) {\n throw errCode(new Error('identified peer does not match the expected peer'), codes.ERR_INVALID_PEER)\n }\n\n // Get the observedAddr if there is one\n const cleanObservedAddr = IdentifyService.getCleanMultiaddr(observedAddr)\n\n try {\n const envelope = await Envelope.openAndCertify(signedPeerRecord, PeerRecord.DOMAIN)\n if (await this.peerStore.addressBook.consumePeerRecord(envelope)) {\n await this.peerStore.protoBook.set(id, protocols)\n await this.peerStore.metadataBook.setValue(id, 'AgentVersion', uint8ArrayFromString(message.agentVersion))\n await this.peerStore.metadataBook.setValue(id, 'ProtocolVersion', uint8ArrayFromString(message.protocolVersion))\n return\n }\n } catch (/** @type {any} */ err) {\n log('received invalid envelope, discard it and fallback to listenAddrs is available', err)\n }\n\n // LEGACY: Update peers data in PeerStore\n try {\n await this.peerStore.addressBook.set(id, listenAddrs.map((addr) => new Multiaddr(addr)))\n } catch (/** @type {any} */ err) {\n log.error('received invalid addrs', err)\n }\n\n await this.peerStore.protoBook.set(id, protocols)\n await this.peerStore.metadataBook.setValue(id, 'AgentVersion', uint8ArrayFromString(message.agentVersion))\n await this.peerStore.metadataBook.setValue(id, 'ProtocolVersion', uint8ArrayFromString(message.protocolVersion))\n\n // TODO: Add and score our observed addr\n log('received observed address of %s', cleanObservedAddr)\n // this.addressManager.addObservedAddr(observedAddr)\n }\n\n /**\n * A handler to register with Libp2p to process identify messages.\n *\n * @param {Object} options\n * @param {Connection} options.connection\n * @param {MuxedStream} options.stream\n * @param {string} options.protocol\n * @returns {Promise<void>|undefined}\n */\n handleMessage ({ connection, stream, protocol }) {\n switch (protocol) {\n case this.identifyProtocolStr:\n return this._handleIdentify({ connection, stream })\n case this.identifyPushProtocolStr:\n return this._handlePush({ connection, stream })\n default:\n log.error('cannot handle unknown protocol %s', protocol)\n }\n }\n\n /**\n * Sends the `Identify` response with the Signed Peer Record\n * to the requesting peer over the given `connection`\n *\n * @private\n * @param {Object} options\n * @param {MuxedStream} options.stream\n * @param {Connection} options.connection\n * @returns {Promise<void>}\n */\n async _handleIdentify ({ connection, stream }) {\n try {\n let publicKey = new Uint8Array(0)\n if (this.peerId.pubKey) {\n publicKey = this.peerId.pubKey.bytes\n }\n\n const signedPeerRecord = await this.peerStore.addressBook.getRawEnvelope(this.peerId)\n const protocols = await this.peerStore.protoBook.get(this.peerId)\n\n const message = Message.Identify.encode({\n protocolVersion: this._host.protocolVersion,\n agentVersion: this._host.agentVersion,\n publicKey,\n listenAddrs: this._libp2p.multiaddrs.map((ma) => ma.bytes),\n signedPeerRecord,\n observedAddr: connection.remoteAddr.bytes,\n protocols\n }).finish()\n\n await pipe(\n [message],\n lp.encode(),\n stream,\n consume\n )\n } catch (/** @type {any} */ err) {\n log.error('could not respond to identify request', err)\n }\n }\n\n /**\n * Reads the Identify Push message from the given `connection`\n *\n * @private\n * @param {object} options\n * @param {MuxedStream} options.stream\n * @param {Connection} options.connection\n * @returns {Promise<void>}\n */\n async _handlePush ({ connection, stream }) {\n let message\n try {\n const [data] = await pipe(\n [],\n stream,\n lp.decode(),\n take(1),\n toBuffer,\n collect\n )\n message = Message.Identify.decode(data)\n } catch (/** @type {any} */ err) {\n return log.error('received invalid message', err)\n }\n\n const id = connection.remotePeer\n\n try {\n const envelope = await Envelope.openAndCertify(message.signedPeerRecord, PeerRecord.DOMAIN)\n if (await this.peerStore.addressBook.consumePeerRecord(envelope)) {\n await this.peerStore.protoBook.set(id, message.protocols)\n return\n }\n } catch (/** @type {any} */ err) {\n log('received invalid envelope, discard it and fallback to listenAddrs is available', err)\n }\n\n // LEGACY: Update peers data in PeerStore\n try {\n await this.peerStore.addressBook.set(id,\n message.listenAddrs.map((addr) => new Multiaddr(addr)))\n } catch (/** @type {any} */ err) {\n log.error('received invalid addrs', err)\n }\n\n // Update the protocols\n try {\n await this.peerStore.protoBook.set(id, message.protocols)\n } catch (/** @type {any} */ err) {\n log.error('received invalid protocols', err)\n }\n }\n\n /**\n * Takes the `addr` and converts it to a Multiaddr if possible\n *\n * @param {Uint8Array | string} addr\n * @returns {Multiaddr|null}\n */\n static getCleanMultiaddr (addr) {\n if (addr && addr.length > 0) {\n try {\n return new Multiaddr(addr)\n } catch (_) {\n return null\n }\n }\n return null\n }\n}\n\n/**\n * The protocols the IdentifyService supports\n *\n * @property multicodecs\n */\nconst multicodecs = {\n IDENTIFY: MULTICODEC_IDENTIFY,\n IDENTIFY_PUSH: MULTICODEC_IDENTIFY_PUSH\n}\n\nIdentifyService.multicodecs = multicodecs\nIdentifyService.Messsage = Message\n\nmodule.exports = IdentifyService\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-identify\"] || ($protobuf.roots[\"libp2p-identify\"] = {});\n\n$root.Identify = (function() {\n\n /**\n * Properties of an Identify.\n * @exports IIdentify\n * @interface IIdentify\n * @property {string|null} [protocolVersion] Identify protocolVersion\n * @property {string|null} [agentVersion] Identify agentVersion\n * @property {Uint8Array|null} [publicKey] Identify publicKey\n * @property {Array.<Uint8Array>|null} [listenAddrs] Identify listenAddrs\n * @property {Uint8Array|null} [observedAddr] Identify observedAddr\n * @property {Array.<string>|null} [protocols] Identify protocols\n * @property {Uint8Array|null} [signedPeerRecord] Identify signedPeerRecord\n */\n\n /**\n * Constructs a new Identify.\n * @exports Identify\n * @classdesc Represents an Identify.\n * @implements IIdentify\n * @constructor\n * @param {IIdentify=} [p] Properties to set\n */\n function Identify(p) {\n this.listenAddrs = [];\n this.protocols = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Identify protocolVersion.\n * @member {string} protocolVersion\n * @memberof Identify\n * @instance\n */\n Identify.prototype.protocolVersion = \"\";\n\n /**\n * Identify agentVersion.\n * @member {string} agentVersion\n * @memberof Identify\n * @instance\n */\n Identify.prototype.agentVersion = \"\";\n\n /**\n * Identify publicKey.\n * @member {Uint8Array} publicKey\n * @memberof Identify\n * @instance\n */\n Identify.prototype.publicKey = $util.newBuffer([]);\n\n /**\n * Identify listenAddrs.\n * @member {Array.<Uint8Array>} listenAddrs\n * @memberof Identify\n * @instance\n */\n Identify.prototype.listenAddrs = $util.emptyArray;\n\n /**\n * Identify observedAddr.\n * @member {Uint8Array} observedAddr\n * @memberof Identify\n * @instance\n */\n Identify.prototype.observedAddr = $util.newBuffer([]);\n\n /**\n * Identify protocols.\n * @member {Array.<string>} protocols\n * @memberof Identify\n * @instance\n */\n Identify.prototype.protocols = $util.emptyArray;\n\n /**\n * Identify signedPeerRecord.\n * @member {Uint8Array} signedPeerRecord\n * @memberof Identify\n * @instance\n */\n Identify.prototype.signedPeerRecord = $util.newBuffer([]);\n\n /**\n * Encodes the specified Identify message. Does not implicitly {@link Identify.verify|verify} messages.\n * @function encode\n * @memberof Identify\n * @static\n * @param {IIdentify} m Identify message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Identify.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.publicKey != null && Object.hasOwnProperty.call(m, \"publicKey\"))\n w.uint32(10).bytes(m.publicKey);\n if (m.listenAddrs != null && m.listenAddrs.length) {\n for (var i = 0; i < m.listenAddrs.length; ++i)\n w.uint32(18).bytes(m.listenAddrs[i]);\n }\n if (m.protocols != null && m.protocols.length) {\n for (var i = 0; i < m.protocols.length; ++i)\n w.uint32(26).string(m.protocols[i]);\n }\n if (m.observedAddr != null && Object.hasOwnProperty.call(m, \"observedAddr\"))\n w.uint32(34).bytes(m.observedAddr);\n if (m.protocolVersion != null && Object.hasOwnProperty.call(m, \"protocolVersion\"))\n w.uint32(42).string(m.protocolVersion);\n if (m.agentVersion != null && Object.hasOwnProperty.call(m, \"agentVersion\"))\n w.uint32(50).string(m.agentVersion);\n if (m.signedPeerRecord != null && Object.hasOwnProperty.call(m, \"signedPeerRecord\"))\n w.uint32(66).bytes(m.signedPeerRecord);\n return w;\n };\n\n /**\n * Decodes an Identify message from the specified reader or buffer.\n * @function decode\n * @memberof Identify\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Identify} Identify\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Identify.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Identify();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 5:\n m.protocolVersion = r.string();\n break;\n case 6:\n m.agentVersion = r.string();\n break;\n case 1:\n m.publicKey = r.bytes();\n break;\n case 2:\n if (!(m.listenAddrs && m.listenAddrs.length))\n m.listenAddrs = [];\n m.listenAddrs.push(r.bytes());\n break;\n case 4:\n m.observedAddr = r.bytes();\n break;\n case 3:\n if (!(m.protocols && m.protocols.length))\n m.protocols = [];\n m.protocols.push(r.string());\n break;\n case 8:\n m.signedPeerRecord = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates an Identify message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Identify\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Identify} Identify\n */\n Identify.fromObject = function fromObject(d) {\n if (d instanceof $root.Identify)\n return d;\n var m = new $root.Identify();\n if (d.protocolVersion != null) {\n m.protocolVersion = String(d.protocolVersion);\n }\n if (d.agentVersion != null) {\n m.agentVersion = String(d.agentVersion);\n }\n if (d.publicKey != null) {\n if (typeof d.publicKey === \"string\")\n $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0);\n else if (d.publicKey.length)\n m.publicKey = d.publicKey;\n }\n if (d.listenAddrs) {\n if (!Array.isArray(d.listenAddrs))\n throw TypeError(\".Identify.listenAddrs: array expected\");\n m.listenAddrs = [];\n for (var i = 0; i < d.listenAddrs.length; ++i) {\n if (typeof d.listenAddrs[i] === \"string\")\n $util.base64.decode(d.listenAddrs[i], m.listenAddrs[i] = $util.newBuffer($util.base64.length(d.listenAddrs[i])), 0);\n else if (d.listenAddrs[i].length)\n m.listenAddrs[i] = d.listenAddrs[i];\n }\n }\n if (d.observedAddr != null) {\n if (typeof d.observedAddr === \"string\")\n $util.base64.decode(d.observedAddr, m.observedAddr = $util.newBuffer($util.base64.length(d.observedAddr)), 0);\n else if (d.observedAddr.length)\n m.observedAddr = d.observedAddr;\n }\n if (d.protocols) {\n if (!Array.isArray(d.protocols))\n throw TypeError(\".Identify.protocols: array expected\");\n m.protocols = [];\n for (var i = 0; i < d.protocols.length; ++i) {\n m.protocols[i] = String(d.protocols[i]);\n }\n }\n if (d.signedPeerRecord != null) {\n if (typeof d.signedPeerRecord === \"string\")\n $util.base64.decode(d.signedPeerRecord, m.signedPeerRecord = $util.newBuffer($util.base64.length(d.signedPeerRecord)), 0);\n else if (d.signedPeerRecord.length)\n m.signedPeerRecord = d.signedPeerRecord;\n }\n return m;\n };\n\n /**\n * Creates a plain object from an Identify message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Identify\n * @static\n * @param {Identify} m Identify\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Identify.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.listenAddrs = [];\n d.protocols = [];\n }\n if (o.defaults) {\n if (o.bytes === String)\n d.publicKey = \"\";\n else {\n d.publicKey = [];\n if (o.bytes !== Array)\n d.publicKey = $util.newBuffer(d.publicKey);\n }\n if (o.bytes === String)\n d.observedAddr = \"\";\n else {\n d.observedAddr = [];\n if (o.bytes !== Array)\n d.observedAddr = $util.newBuffer(d.observedAddr);\n }\n d.protocolVersion = \"\";\n d.agentVersion = \"\";\n if (o.bytes === String)\n d.signedPeerRecord = \"\";\n else {\n d.signedPeerRecord = [];\n if (o.bytes !== Array)\n d.signedPeerRecord = $util.newBuffer(d.signedPeerRecord);\n }\n }\n if (m.publicKey != null && m.hasOwnProperty(\"publicKey\")) {\n d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey;\n }\n if (m.listenAddrs && m.listenAddrs.length) {\n d.listenAddrs = [];\n for (var j = 0; j < m.listenAddrs.length; ++j) {\n d.listenAddrs[j] = o.bytes === String ? $util.base64.encode(m.listenAddrs[j], 0, m.listenAddrs[j].length) : o.bytes === Array ? Array.prototype.slice.call(m.listenAddrs[j]) : m.listenAddrs[j];\n }\n }\n if (m.protocols && m.protocols.length) {\n d.protocols = [];\n for (var j = 0; j < m.protocols.length; ++j) {\n d.protocols[j] = m.protocols[j];\n }\n }\n if (m.observedAddr != null && m.hasOwnProperty(\"observedAddr\")) {\n d.observedAddr = o.bytes === String ? $util.base64.encode(m.observedAddr, 0, m.observedAddr.length) : o.bytes === Array ? Array.prototype.slice.call(m.observedAddr) : m.observedAddr;\n }\n if (m.protocolVersion != null && m.hasOwnProperty(\"protocolVersion\")) {\n d.protocolVersion = m.protocolVersion;\n }\n if (m.agentVersion != null && m.hasOwnProperty(\"agentVersion\")) {\n d.agentVersion = m.agentVersion;\n }\n if (m.signedPeerRecord != null && m.hasOwnProperty(\"signedPeerRecord\")) {\n d.signedPeerRecord = o.bytes === String ? $util.base64.encode(m.signedPeerRecord, 0, m.signedPeerRecord.length) : o.bytes === Array ? Array.prototype.slice.call(m.signedPeerRecord) : m.signedPeerRecord;\n }\n return d;\n };\n\n /**\n * Converts this Identify to JSON.\n * @function toJSON\n * @memberof Identify\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Identify.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Identify;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p'), {\n error: debug('libp2p:err')\n})\nconst { EventEmitter } = require('events')\n\nconst errCode = require('err-code')\nconst PeerId = require('peer-id')\nconst { Multiaddr } = require('multiaddr')\nconst { MemoryDatastore } = require('datastore-core/memory')\nconst PeerRouting = require('./peer-routing')\nconst ContentRouting = require('./content-routing')\nconst getPeer = require('./get-peer')\nconst { validate: validateConfig } = require('./config')\nconst { codes, messages } = require('./errors')\n\nconst AddressManager = require('./address-manager')\nconst ConnectionManager = require('./connection-manager')\nconst AutoDialler = require('./connection-manager/auto-dialler')\nconst Circuit = require('./circuit/transport')\nconst Relay = require('./circuit')\nconst Dialer = require('./dialer')\nconst Keychain = require('./keychain')\nconst Metrics = require('./metrics')\nconst TransportManager = require('./transport-manager')\nconst Upgrader = require('./upgrader')\nconst PeerStore = require('./peer-store')\nconst PubsubAdapter = require('./pubsub-adapter')\nconst Registrar = require('./registrar')\nconst IdentifyService = require('./identify')\nconst FetchService = require('./fetch')\nconst PingService = require('./ping')\nconst NatManager = require('./nat-manager')\nconst { updateSelfPeerRecord } = require('./record/utils')\n\n/**\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('libp2p-interfaces/src/transport/types').TransportFactory<any, any>} TransportFactory\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxerFactory} MuxerFactory\n * @typedef {import('libp2p-interfaces/src/content-routing/types').ContentRouting} ContentRoutingModule\n * @typedef {import('libp2p-interfaces/src/peer-discovery/types').PeerDiscoveryFactory} PeerDiscoveryFactory\n * @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule\n * @typedef {import('libp2p-interfaces/src/crypto/types').Crypto} Crypto\n * @typedef {import('libp2p-interfaces/src/pubsub')} Pubsub\n * @typedef {import('libp2p-interfaces/src/pubsub').PubsubOptions} PubsubOptions\n * @typedef {import('interface-datastore').Datastore} Datastore\n * @typedef {import('./pnet')} Protector\n * @typedef {import('./types').ConnectionGater} ConnectionGater\n * @typedef {Object} PersistentPeerStoreOptions\n * @property {number} [threshold]\n */\n\n/**\n * @typedef {Object} HandlerProps\n * @property {Connection} connection\n * @property {MuxedStream} stream\n * @property {string} protocol\n *\n * @typedef {Object} DhtOptions\n * @property {boolean} [enabled = false]\n * @property {number} [kBucketSize = 20]\n * @property {boolean} [clientMode]\n * @property {import('libp2p-interfaces/src/types').DhtSelectors} [selectors]\n * @property {import('libp2p-interfaces/src/types').DhtValidators} [validators]\n *\n * @typedef {Object} KeychainOptions\n * @property {Datastore} [datastore]\n *\n * @typedef {Object} PeerStoreOptions\n * @property {boolean} persistence\n *\n * @typedef {Object} PubsubLocalOptions\n * @property {boolean} enabled\n *\n * @typedef {Object} MetricsOptions\n * @property {boolean} enabled\n *\n * @typedef {Object} RelayOptions\n * @property {boolean} [enabled = true]\n * @property {import('./circuit').RelayAdvertiseOptions} [advertise]\n * @property {import('./circuit').HopOptions} [hop]\n * @property {import('./circuit').AutoRelayOptions} [autoRelay]\n *\n * @typedef {Object} Libp2pConfig\n * @property {DhtOptions} [dht] dht module options\n * @property {import('./nat-manager').NatManagerOptions} [nat]\n * @property {Record<string, Object|boolean>} [peerDiscovery]\n * @property {PubsubLocalOptions & PubsubOptions} [pubsub] pubsub module options\n * @property {RelayOptions} [relay]\n * @property {Record<string, Object>} [transport] transport options indexed by transport key\n *\n * @typedef {Object} Libp2pModules\n * @property {TransportFactory[]} transport\n * @property {MuxerFactory[]} streamMuxer\n * @property {Crypto[]} connEncryption\n * @property {PeerDiscoveryFactory[]} [peerDiscovery]\n * @property {PeerRoutingModule[]} [peerRouting]\n * @property {ContentRoutingModule[]} [contentRouting]\n * @property {Object} [dht]\n * @property {{new(...args: any[]): Pubsub}} [pubsub]\n * @property {Protector} [connProtector]\n *\n * @typedef {Object} Libp2pOptions\n * @property {Libp2pModules} modules libp2p modules to use\n * @property {import('./address-manager').AddressManagerOptions} [addresses]\n * @property {import('./connection-manager').ConnectionManagerOptions} [connectionManager]\n * @property {Partial<import('./types').ConnectionGater>} [connectionGater]\n * @property {Datastore} [datastore]\n * @property {import('./dialer').DialerOptions} [dialer]\n * @property {import('./identify/index').HostProperties} [host] libp2p host\n * @property {KeychainOptions & import('./keychain/index').KeychainOptions} [keychain]\n * @property {MetricsOptions & import('./metrics').MetricsOptions} [metrics]\n * @property {import('./peer-routing').PeerRoutingOptions} [peerRouting]\n * @property {PeerStoreOptions} [peerStore]\n * @property {import('./transport-manager').TransportManagerOptions} [transportManager]\n * @property {Libp2pConfig} [config]\n *\n * @typedef {Object} constructorOptions\n * @property {PeerId} peerId\n *\n * @typedef {Object} CreateOptions\n * @property {PeerId} [peerId]\n *\n * @extends {EventEmitter}\n * @fires Libp2p#error Emitted when an error occurs\n * @fires Libp2p#peer:discovery Emitted when a peer is discovered\n */\nclass Libp2p extends EventEmitter {\n /**\n * Like `new Libp2p(options)` except it will create a `PeerId`\n * instance if one is not provided in options.\n *\n * @param {Libp2pOptions & CreateOptions} options - Libp2p configuration options\n * @returns {Promise<Libp2p>}\n */\n static async create (options) {\n if (options.peerId) {\n // @ts-ignore 'Libp2pOptions & CreateOptions' is not assignable to 'Libp2pOptions & constructorOptions'\n return new Libp2p(options)\n }\n\n const peerId = await PeerId.create()\n\n options.peerId = peerId\n // @ts-ignore 'Libp2pOptions & CreateOptions' is not assignable to 'Libp2pOptions & constructorOptions'\n return new Libp2p(options)\n }\n\n /**\n * Libp2p node.\n *\n * @class\n * @param {Libp2pOptions & constructorOptions} _options\n */\n constructor (_options) {\n super()\n // validateConfig will ensure the config is correct,\n // and add default values where appropriate\n this._options = validateConfig(_options)\n\n /** @type {PeerId} */\n this.peerId = this._options.peerId\n this.datastore = this._options.datastore\n\n // Create Metrics\n if (this._options.metrics.enabled) {\n const metrics = new Metrics({\n ...this._options.metrics\n })\n\n this.metrics = metrics\n }\n\n /** @type {ConnectionGater} */\n this.connectionGater = {\n denyDialPeer: async () => Promise.resolve(false),\n denyDialMultiaddr: async () => Promise.resolve(false),\n denyInboundConnection: async () => Promise.resolve(false),\n denyOutboundConnection: async () => Promise.resolve(false),\n denyInboundEncryptedConnection: async () => Promise.resolve(false),\n denyOutboundEncryptedConnection: async () => Promise.resolve(false),\n denyInboundUpgradedConnection: async () => Promise.resolve(false),\n denyOutboundUpgradedConnection: async () => Promise.resolve(false),\n filterMultiaddrForPeer: async () => Promise.resolve(true),\n ...this._options.connectionGater\n }\n\n /** @type {import('./peer-store/types').PeerStore} */\n this.peerStore = new PeerStore({\n peerId: this.peerId,\n datastore: (this.datastore && this._options.peerStore.persistence) ? this.datastore : new MemoryDatastore(),\n addressFilter: this.connectionGater.filterMultiaddrForPeer\n })\n\n // Addresses {listen, announce, noAnnounce}\n this.addresses = this._options.addresses\n this.addressManager = new AddressManager(this.peerId, this._options.addresses)\n\n // when addresses change, update our peer record\n this.addressManager.on('change:addresses', () => {\n updateSelfPeerRecord(this).catch(err => {\n log.error('Error updating self peer record', err)\n })\n })\n\n this._modules = this._options.modules\n this._config = this._options.config\n this._transport = [] // Transport instances/references\n this._discovery = new Map() // Discovery service instances/references\n\n // Create the Connection Manager\n this.connectionManager = new ConnectionManager(this, {\n ...this._options.connectionManager\n })\n this._autodialler = new AutoDialler(this, {\n enabled: this._config.peerDiscovery.autoDial,\n minConnections: this._options.connectionManager.minConnections,\n autoDialInterval: this._options.connectionManager.autoDialInterval\n })\n\n // Create keychain\n if (this._options.keychain && this._options.keychain.datastore) {\n log('creating keychain')\n\n const keychainOpts = Keychain.generateOptions()\n\n this.keychain = new Keychain(this._options.keychain.datastore, {\n ...keychainOpts,\n ...this._options.keychain\n })\n\n log('keychain constructed')\n }\n\n // Setup the Upgrader\n this.upgrader = new Upgrader({\n connectionGater: this.connectionGater,\n localPeer: this.peerId,\n metrics: this.metrics,\n onConnection: (connection) => this.connectionManager.onConnect(connection),\n onConnectionEnd: (connection) => this.connectionManager.onDisconnect(connection)\n })\n\n // Setup the transport manager\n this.transportManager = new TransportManager({\n libp2p: this,\n upgrader: this.upgrader,\n faultTolerance: this._options.transportManager.faultTolerance\n })\n\n // Create the Nat Manager\n this.natManager = new NatManager({\n peerId: this.peerId,\n addressManager: this.addressManager,\n transportManager: this.transportManager,\n // @ts-ignore Nat typedef is not understood as Object\n ...this._options.config.nat\n })\n\n // Create the Registrar\n this.registrar = new Registrar({\n peerStore: this.peerStore,\n connectionManager: this.connectionManager\n })\n\n this.handle = this.handle.bind(this)\n this.registrar.handle = this.handle\n\n // Attach crypto channels\n if (!this._modules.connEncryption || !this._modules.connEncryption.length) {\n throw errCode(new Error(messages.CONN_ENCRYPTION_REQUIRED), codes.CONN_ENCRYPTION_REQUIRED)\n }\n const cryptos = this._modules.connEncryption\n cryptos.forEach((crypto) => {\n this.upgrader.cryptos.set(crypto.protocol, crypto)\n })\n\n this.dialer = new Dialer({\n transportManager: this.transportManager,\n connectionGater: this.connectionGater,\n peerStore: this.peerStore,\n metrics: this.metrics,\n ...this._options.dialer\n })\n\n this._modules.transport.forEach((Transport) => {\n const key = Transport.prototype[Symbol.toStringTag]\n const transportOptions = this._config.transport[key]\n this.transportManager.add(key, Transport, transportOptions)\n })\n\n if (this._config.relay.enabled) {\n // @ts-ignore Circuit prototype\n this.transportManager.add(Circuit.prototype[Symbol.toStringTag], Circuit)\n this.relay = new Relay(this)\n }\n\n // Attach stream multiplexers\n if (this._modules.streamMuxer) {\n const muxers = this._modules.streamMuxer\n muxers.forEach((muxer) => {\n this.upgrader.muxers.set(muxer.multicodec, muxer)\n })\n\n // Add the identify service since we can multiplex\n this.identifyService = new IdentifyService({ libp2p: this })\n }\n\n // Attach private network protector\n if (this._modules.connProtector) {\n this.upgrader.protector = this._modules.connProtector\n } else if (globalThis.process !== undefined && globalThis.process.env && globalThis.process.env.LIBP2P_FORCE_PNET) { // eslint-disable-line no-undef\n throw new Error('Private network is enforced, but no protector was provided')\n }\n\n // dht provided components (peerRouting, contentRouting, dht)\n if (this._modules.dht) {\n const DHT = this._modules.dht\n // @ts-ignore TODO: types need fixing - DHT is an `object` which has no `create` method\n this._dht = DHT.create({\n libp2p: this,\n ...this._config.dht\n })\n }\n\n // Create pubsub if provided\n if (this._modules.pubsub) {\n const Pubsub = this._modules.pubsub\n // using pubsub adapter with *DEPRECATED* handlers functionality\n /** @type {Pubsub} */\n this.pubsub = PubsubAdapter(Pubsub, this, this._config.pubsub)\n }\n\n // Attach remaining APIs\n // peer and content routing will automatically get modules from _modules and _dht\n this.peerRouting = new PeerRouting(this)\n this.contentRouting = new ContentRouting(this)\n\n this._onDiscoveryPeer = this._onDiscoveryPeer.bind(this)\n\n this.fetchService = new FetchService(this)\n this.pingService = new PingService(this)\n }\n\n /**\n * Overrides EventEmitter.emit to conditionally emit errors\n * if there is a handler. If not, errors will be logged.\n *\n * @param {string} eventName\n * @param {...any} args\n * @returns {boolean}\n */\n emit (eventName, ...args) {\n // TODO: do we still need this?\n // @ts-ignore _events does not exist in libp2p\n if (eventName === 'error' && !this._events.error) {\n log.error(args)\n return false\n } else {\n return super.emit(eventName, ...args)\n }\n }\n\n /**\n * Starts the libp2p node and all its subsystems\n *\n * @returns {Promise<void>}\n */\n async start () {\n log('libp2p is starting')\n\n if (this.identifyService) {\n await this.handle(Object.values(IdentifyService.getProtocolStr(this)), this.identifyService.handleMessage)\n }\n\n if (this.fetchService) {\n await this.handle(FetchService.PROTOCOL, this.fetchService.handleMessage)\n }\n\n if (this.pingService) {\n await this.handle(PingService.getProtocolStr(this), this.pingService.handleMessage)\n }\n\n try {\n await this._onStarting()\n await this._onDidStart()\n log('libp2p has started')\n } catch (/** @type {any} */ err) {\n this.emit('error', err)\n log.error('An error occurred starting libp2p', err)\n await this.stop()\n throw err\n }\n }\n\n /**\n * Stop the libp2p node by closing its listeners and open connections\n *\n * @async\n * @returns {Promise<void>}\n */\n async stop () {\n log('libp2p is stopping')\n\n try {\n this._isStarted = false\n\n if (this.identifyService) {\n await this.identifyService.stop()\n }\n\n this.relay && this.relay.stop()\n this.peerRouting.stop()\n await this._autodialler.stop()\n await (this._dht && this._dht.stop())\n\n for (const service of this._discovery.values()) {\n service.removeListener('peer', this._onDiscoveryPeer)\n }\n\n await Promise.all(Array.from(this._discovery.values(), s => s.stop()))\n\n this._discovery = new Map()\n\n await this.connectionManager.stop()\n\n await Promise.all([\n this.pubsub && this.pubsub.stop(),\n this.metrics && this.metrics.stop()\n ])\n\n await this.natManager.stop()\n await this.transportManager.close()\n\n await this.unhandle(FetchService.PROTOCOL)\n await this.unhandle(PingService.getProtocolStr(this))\n\n this.dialer.destroy()\n } catch (/** @type {any} */ err) {\n if (err) {\n log.error(err)\n this.emit('error', err)\n }\n }\n log('libp2p has stopped')\n }\n\n /**\n * Load keychain keys from the datastore.\n * Imports the private key as 'self', if needed.\n *\n * @async\n * @returns {Promise<void>}\n */\n async loadKeychain () {\n if (!this.keychain) {\n return\n }\n\n try {\n await this.keychain.findKeyByName('self')\n } catch (/** @type {any} */ err) {\n await this.keychain.importPeer('self', this.peerId)\n }\n }\n\n isStarted () {\n return this._isStarted\n }\n\n /**\n * Gets a Map of the current connections. The keys are the stringified\n * `PeerId` of the peer. The value is an array of Connections to that peer.\n *\n * @returns {Map<string, Connection[]>}\n */\n get connections () {\n return this.connectionManager.connections\n }\n\n /**\n * Dials to the provided peer. If successful, the known metadata of the\n * peer will be added to the nodes `peerStore`\n *\n * @param {PeerId|Multiaddr|string} peer - The peer to dial\n * @param {object} [options]\n * @param {AbortSignal} [options.signal]\n * @returns {Promise<Connection>}\n */\n dial (peer, options) {\n return this._dial(peer, options)\n }\n\n /**\n * Dials to the provided peer and tries to handshake with the given protocols in order.\n * If successful, the known metadata of the peer will be added to the nodes `peerStore`,\n * and the `MuxedStream` will be returned together with the successful negotiated protocol.\n *\n * @async\n * @param {PeerId|Multiaddr|string} peer - The peer to dial\n * @param {string[]|string} protocols\n * @param {object} [options]\n * @param {AbortSignal} [options.signal]\n */\n async dialProtocol (peer, protocols, options) {\n if (!protocols || !protocols.length) {\n throw errCode(new Error('no protocols were provided to open a stream'), codes.ERR_INVALID_PROTOCOLS_FOR_STREAM)\n }\n\n const connection = await this._dial(peer, options)\n return connection.newStream(protocols)\n }\n\n /**\n * @async\n * @param {PeerId|Multiaddr|string} peer - The peer to dial\n * @param {object} [options]\n * @returns {Promise<Connection>}\n */\n async _dial (peer, options) {\n const { id, multiaddrs } = getPeer(peer)\n\n if (id.equals(this.peerId)) {\n throw errCode(new Error('Cannot dial self'), codes.ERR_DIALED_SELF)\n }\n\n let connection = this.connectionManager.get(id)\n\n if (!connection) {\n connection = await this.dialer.connectToPeer(peer, options)\n } else if (multiaddrs) {\n await this.peerStore.addressBook.add(id, multiaddrs)\n }\n\n return connection\n }\n\n /**\n * Get a deduplicated list of peer advertising multiaddrs by concatenating\n * the listen addresses used by transports with any configured\n * announce addresses as well as observed addresses reported by peers.\n *\n * If Announce addrs are specified, configured listen addresses will be\n * ignored though observed addresses will still be included.\n *\n * @returns {Multiaddr[]}\n */\n get multiaddrs () {\n let addrs = this.addressManager.getAnnounceAddrs().map(ma => ma.toString())\n\n if (!addrs.length) {\n // no configured announce addrs, add configured listen addresses\n addrs = this.transportManager.getAddrs().map(ma => ma.toString())\n }\n\n addrs = addrs.concat(this.addressManager.getObservedAddrs().map(ma => ma.toString()))\n\n const announceFilter = this._options.addresses.announceFilter\n\n // dedupe multiaddrs\n const addrSet = new Set(addrs)\n\n // Create advertising list\n return announceFilter(Array.from(addrSet).map(str => new Multiaddr(str)))\n }\n\n /**\n * Disconnects all connections to the given `peer`\n *\n * @param {PeerId|Multiaddr|string} peer - the peer to close connections to\n * @returns {Promise<void>}\n */\n async hangUp (peer) {\n const { id } = getPeer(peer)\n\n const connections = this.connectionManager.connections.get(id.toB58String())\n\n if (!connections) {\n return\n }\n\n await Promise.all(\n connections.map(connection => {\n return connection.close()\n })\n )\n }\n\n /**\n * Sends a request to fetch the value associated with the given key from the given peer.\n *\n * @param {PeerId|Multiaddr} peer\n * @param {string} key\n * @returns {Promise<Uint8Array | null>}\n */\n fetch (peer, key) {\n return this.fetchService.fetch(peer, key)\n }\n\n /**\n * Pings the given peer in order to obtain the operation latency.\n *\n * @param {PeerId|Multiaddr|string} peer - The peer to ping\n * @returns {Promise<number>}\n */\n ping (peer) {\n const { id, multiaddrs } = getPeer(peer)\n\n // If received multiaddr, ping it\n if (multiaddrs) {\n return this.pingService.ping(multiaddrs[0])\n }\n\n return this.pingService.ping(id)\n }\n\n /**\n * Registers the `handler` for each protocol\n *\n * @param {string[]|string} protocols\n * @param {(props: HandlerProps) => void} handler\n */\n async handle (protocols, handler) {\n protocols = Array.isArray(protocols) ? protocols : [protocols]\n protocols.forEach(protocol => {\n this.upgrader.protocols.set(protocol, handler)\n })\n\n // Add new protocols to self protocols in the Protobook\n await this.peerStore.protoBook.add(this.peerId, protocols)\n }\n\n /**\n * Removes the handler for each protocol. The protocol\n * will no longer be supported on streams.\n *\n * @param {string[]|string} protocols\n */\n async unhandle (protocols) {\n protocols = Array.isArray(protocols) ? protocols : [protocols]\n protocols.forEach(protocol => {\n this.upgrader.protocols.delete(protocol)\n })\n\n // Remove protocols from self protocols in the Protobook\n await this.peerStore.protoBook.remove(this.peerId, protocols)\n }\n\n async _onStarting () {\n // Listen on the provided transports for the provided addresses\n const addrs = this.addressManager.getListenAddrs()\n await this.transportManager.listen(addrs)\n\n // Manage your NATs\n this.natManager.start()\n\n if (this._config.pubsub.enabled) {\n this.pubsub && await this.pubsub.start()\n }\n\n // DHT subsystem\n if (this._config.dht.enabled) {\n this._dht && await this._dht.start()\n\n // TODO: this should be modified once random-walk is used as\n // the other discovery modules\n this._dht.on('peer', this._onDiscoveryPeer)\n }\n\n // Start metrics if present\n this.metrics && this.metrics.start()\n\n if (this.identifyService) {\n await this.identifyService.start()\n }\n }\n\n /**\n * Called when libp2p has started and before it returns\n *\n * @private\n */\n async _onDidStart () {\n this._isStarted = true\n\n this.peerStore.on('peer', peerId => {\n this.emit('peer:discovery', peerId)\n this._maybeConnect(peerId).catch(err => {\n log.error(err)\n })\n })\n\n // Once we start, emit any peers we may have already discovered\n // TODO: this should be removed, as we already discovered these peers in the past\n for await (const peer of this.peerStore.getPeers()) {\n this.emit('peer:discovery', peer.id)\n }\n\n this.connectionManager.start()\n await this._autodialler.start()\n\n // Peer discovery\n await this._setupPeerDiscovery()\n\n // Relay\n this.relay && this.relay.start()\n\n this.peerRouting.start()\n }\n\n /**\n * Called whenever peer discovery services emit `peer` events.\n * Known peers may be emitted.\n *\n * @private\n * @param {{ id: PeerId, multiaddrs: Multiaddr[], protocols: string[] }} peer\n */\n _onDiscoveryPeer (peer) {\n if (peer.id.toB58String() === this.peerId.toB58String()) {\n log.error(new Error(codes.ERR_DISCOVERED_SELF))\n return\n }\n\n peer.multiaddrs && this.peerStore.addressBook.add(peer.id, peer.multiaddrs).catch(err => log.error(err))\n peer.protocols && this.peerStore.protoBook.set(peer.id, peer.protocols).catch(err => log.error(err))\n }\n\n /**\n * Will dial to the given `peerId` if the current number of\n * connected peers is less than the configured `ConnectionManager`\n * minConnections.\n *\n * @private\n * @param {PeerId} peerId\n */\n async _maybeConnect (peerId) {\n // If auto dialing is on and we have no connection to the peer, check if we should dial\n if (this._config.peerDiscovery.autoDial === true && !this.connectionManager.get(peerId)) {\n const minConnections = this._options.connectionManager.minConnections || 0\n if (minConnections > this.connectionManager.size) {\n log('connecting to discovered peer %s', peerId.toB58String())\n try {\n await this.dialer.connectToPeer(peerId)\n } catch (/** @type {any} */ err) {\n log.error(`could not connect to discovered peer ${peerId.toB58String()} with ${err}`)\n }\n }\n }\n }\n\n /**\n * Initializes and starts peer discovery services\n *\n * @async\n * @private\n */\n async _setupPeerDiscovery () {\n /**\n * @param {PeerDiscoveryFactory} DiscoveryService\n */\n const setupService = (DiscoveryService) => {\n let config = {\n enabled: true // on by default\n }\n\n if (DiscoveryService.tag &&\n this._config.peerDiscovery &&\n this._config.peerDiscovery[DiscoveryService.tag]) {\n // @ts-ignore PeerDiscovery not understood as an Object for spread\n config = { ...config, ...this._config.peerDiscovery[DiscoveryService.tag] }\n }\n\n if (config.enabled &&\n !this._discovery.has(DiscoveryService.tag)) { // not already added\n let discoveryService\n\n if (typeof DiscoveryService === 'function') {\n // @ts-ignore DiscoveryService has no constructor type inferred\n discoveryService = new DiscoveryService(Object.assign({}, config, {\n peerId: this.peerId,\n libp2p: this\n }))\n } else {\n discoveryService = DiscoveryService\n }\n\n discoveryService.on('peer', this._onDiscoveryPeer)\n this._discovery.set(DiscoveryService.tag, discoveryService)\n }\n }\n\n // Discovery modules\n for (const DiscoveryService of this._modules.peerDiscovery || []) {\n setupService(DiscoveryService)\n }\n\n // Transport modules with discovery\n for (const Transport of this.transportManager.getTransports()) {\n // @ts-ignore Transport interface does not include discovery\n if (Transport.discovery) {\n // @ts-ignore Transport interface does not include discovery\n setupService(Transport.discovery)\n }\n }\n\n await Promise.all(Array.from(this._discovery.values(), d => d.start()))\n }\n}\n\nmodule.exports = Libp2p\n","'use strict'\n\n// @ts-ignore node-forge types not exported\nrequire('node-forge/lib/pkcs7')\n// @ts-ignore node-forge types not exported\nrequire('node-forge/lib/pbe')\n// @ts-ignore node-forge types not exported\nconst forge = require('node-forge/lib/forge')\nconst { certificateForKey, findAsync } = require('./util')\nconst errcode = require('err-code')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { codes } = require('../errors')\n\nconst privates = new WeakMap()\n\n/**\n * Cryptographic Message Syntax (aka PKCS #7)\n *\n * CMS describes an encapsulation syntax for data protection. It\n * is used to digitally sign, digest, authenticate, or encrypt\n * arbitrary message content.\n *\n * See RFC 5652 for all the details.\n */\nclass CMS {\n /**\n * Creates a new instance with a keychain\n *\n * @param {import('./index')} keychain - the available keys\n * @param {string} dek\n */\n constructor (keychain, dek) {\n if (!keychain) {\n throw errcode(new Error('keychain is required'), codes.ERR_KEYCHAIN_REQUIRED)\n }\n\n this.keychain = keychain\n privates.set(this, { dek })\n }\n\n /**\n * Creates some protected data.\n *\n * The output Uint8Array contains the PKCS #7 message in DER.\n *\n * @param {string} name - The local key name.\n * @param {Uint8Array} plain - The data to encrypt.\n * @returns {Promise<Uint8Array>}\n */\n async encrypt (name, plain) {\n if (!(plain instanceof Uint8Array)) {\n throw errcode(new Error('Plain data must be a Uint8Array'), codes.ERR_INVALID_PARAMETERS)\n }\n\n const key = await this.keychain.findKeyByName(name)\n const pem = await this.keychain._getPrivateKey(name)\n /** @type {string} */\n const dek = privates.get(this).dek\n const privateKey = forge.pki.decryptRsaPrivateKey(pem, dek)\n const certificate = await certificateForKey(key, privateKey)\n\n // create a p7 enveloped message\n const p7 = forge.pkcs7.createEnvelopedData()\n p7.addRecipient(certificate)\n p7.content = forge.util.createBuffer(plain)\n p7.encrypt()\n\n // convert message to DER\n const der = forge.asn1.toDer(p7.toAsn1()).getBytes()\n return uint8ArrayFromString(der, 'ascii')\n }\n\n /**\n * Reads some protected data.\n *\n * The keychain must contain one of the keys used to encrypt the data. If none of the keys\n * exists, an Error is returned with the property 'missingKeys'. It is array of key ids.\n *\n * @param {Uint8Array} cmsData - The CMS encrypted data to decrypt.\n * @returns {Promise<Uint8Array>}\n */\n async decrypt (cmsData) {\n if (!(cmsData instanceof Uint8Array)) {\n throw errcode(new Error('CMS data is required'), codes.ERR_INVALID_PARAMETERS)\n }\n\n let cms\n try {\n const buf = forge.util.createBuffer(uint8ArrayToString(cmsData, 'ascii'))\n const obj = forge.asn1.fromDer(buf)\n // @ts-ignore not defined\n cms = forge.pkcs7.messageFromAsn1(obj)\n } catch (/** @type {any} */ err) {\n throw errcode(new Error('Invalid CMS: ' + err.message), codes.ERR_INVALID_CMS)\n }\n\n // Find a recipient whose key we hold. We only deal with recipient certs\n // issued by ipfs (O=ipfs).\n const recipients = cms.recipients\n // @ts-ignore cms types not defined\n .filter(r => r.issuer.find(a => a.shortName === 'O' && a.value === 'ipfs'))\n // @ts-ignore cms types not defined\n .filter(r => r.issuer.find(a => a.shortName === 'CN'))\n // @ts-ignore cms types not defined\n .map(r => {\n return {\n recipient: r,\n // @ts-ignore cms types not defined\n keyId: r.issuer.find(a => a.shortName === 'CN').value\n }\n })\n\n const r = await findAsync(recipients, async (recipient) => {\n try {\n const key = await this.keychain.findKeyById(recipient.keyId)\n if (key) return true\n } catch (/** @type {any} */ err) {\n return false\n }\n return false\n })\n\n if (!r) {\n // @ts-ignore cms types not defined\n const missingKeys = recipients.map(r => r.keyId)\n throw errcode(new Error('Decryption needs one of the key(s): ' + missingKeys.join(', ')), codes.ERR_MISSING_KEYS, {\n missingKeys\n })\n }\n\n const key = await this.keychain.findKeyById(r.keyId)\n\n if (!key) {\n throw errcode(new Error('No key available to decrypto'), codes.ERR_NO_KEY)\n }\n\n const pem = await this.keychain._getPrivateKey(key.name)\n const dek = privates.get(this).dek\n const privateKey = forge.pki.decryptRsaPrivateKey(pem, dek)\n cms.decrypt(r.recipient, privateKey)\n return uint8ArrayFromString(cms.content.getBytes(), 'ascii')\n }\n}\n\nmodule.exports = CMS\n","/* eslint max-nested-callbacks: [\"error\", 5] */\n'use strict'\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:keychain'), {\n error: debug('libp2p:keychain:err')\n})\nconst sanitize = require('sanitize-filename')\nconst mergeOptions = require('merge-options')\nconst crypto = require('libp2p-crypto')\nconst { Key } = require('interface-datastore/key')\nconst CMS = require('./cms')\nconst errcode = require('err-code')\nconst { codes } = require('../errors')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\n\n// @ts-ignore node-forge sha512 types not exported\nrequire('node-forge/lib/sha512')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('interface-datastore').Datastore} Datastore\n */\n\n/**\n * @typedef {Object} DekOptions\n * @property {string} hash\n * @property {string} salt\n * @property {number} iterationCount\n * @property {number} keyLength\n *\n * @typedef {Object} KeychainOptions\n * @property {string} [pass]\n * @property {DekOptions} [dek]\n */\n\n/**\n * Information about a key.\n *\n * @typedef {Object} KeyInfo\n * @property {string} id - The universally unique key id.\n * @property {string} name - The local key name.\n */\n\nconst keyPrefix = '/pkcs8/'\nconst infoPrefix = '/info/'\nconst privates = new WeakMap()\n\n// NIST SP 800-132\nconst NIST = {\n minKeyLength: 112 / 8,\n minSaltLength: 128 / 8,\n minIterationCount: 1000\n}\n\nconst defaultOptions = {\n // See https://cryptosense.com/parametesr-choice-for-pbkdf2/\n dek: {\n keyLength: 512 / 8,\n iterationCount: 10000,\n salt: 'you should override this value with a crypto secure random number',\n hash: 'sha2-512'\n }\n}\n\n/**\n * @param {string} name\n */\nfunction validateKeyName (name) {\n if (!name) return false\n if (typeof name !== 'string') return false\n return name === sanitize(name.trim())\n}\n\n/**\n * Throws an error after a delay\n *\n * This assumes than an error indicates that the keychain is under attack. Delay returning an\n * error to make brute force attacks harder.\n *\n * @param {string|Error} err - The error\n * @returns {Promise<never>}\n * @private\n */\nasync function throwDelayed (err) {\n const min = 200\n const max = 1000\n const delay = Math.random() * (max - min) + min\n\n await new Promise(resolve => setTimeout(resolve, delay))\n throw err\n}\n\n/**\n * Converts a key name into a datastore name.\n *\n * @param {string} name\n * @returns {Key}\n * @private\n */\nfunction DsName (name) {\n return new Key(keyPrefix + name)\n}\n\n/**\n * Converts a key name into a datastore info name.\n *\n * @param {string} name\n * @returns {Key}\n * @private\n */\nfunction DsInfoName (name) {\n return new Key(infoPrefix + name)\n}\n\n/**\n * Manages the lifecycle of a key. Keys are encrypted at rest using PKCS #8.\n *\n * A key in the store has two entries\n * - '/info/*key-name*', contains the KeyInfo for the key\n * - '/pkcs8/*key-name*', contains the PKCS #8 for the key\n *\n */\nclass Keychain {\n /**\n * Creates a new instance of a key chain.\n *\n * @param {Datastore} store - where the key are.\n * @param {KeychainOptions} options\n * @class\n */\n constructor (store, options) {\n if (!store) {\n throw new Error('store is required')\n }\n this.store = store\n\n this.opts = mergeOptions(defaultOptions, options)\n\n // Enforce NIST SP 800-132\n if (this.opts.pass && this.opts.pass.length < 20) {\n throw new Error('pass must be least 20 characters')\n }\n if (this.opts.dek.keyLength < NIST.minKeyLength) {\n throw new Error(`dek.keyLength must be least ${NIST.minKeyLength} bytes`)\n }\n if (this.opts.dek.salt.length < NIST.minSaltLength) {\n throw new Error(`dek.saltLength must be least ${NIST.minSaltLength} bytes`)\n }\n if (this.opts.dek.iterationCount < NIST.minIterationCount) {\n throw new Error(`dek.iterationCount must be least ${NIST.minIterationCount}`)\n }\n\n const dek = this.opts.pass\n ? crypto.pbkdf2(\n this.opts.pass,\n this.opts.dek.salt,\n this.opts.dek.iterationCount,\n this.opts.dek.keyLength,\n this.opts.dek.hash)\n : ''\n\n privates.set(this, { dek })\n }\n\n /**\n * Gets an object that can encrypt/decrypt protected data\n * using the Cryptographic Message Syntax (CMS).\n *\n * CMS describes an encapsulation syntax for data protection. It\n * is used to digitally sign, digest, authenticate, or encrypt\n * arbitrary message content.\n *\n * @returns {CMS}\n */\n get cms () {\n return new CMS(this, privates.get(this).dek)\n }\n\n /**\n * Generates the options for a keychain. A random salt is produced.\n *\n * @returns {Object}\n */\n static generateOptions () {\n const options = Object.assign({}, defaultOptions)\n const saltLength = Math.ceil(NIST.minSaltLength / 3) * 3 // no base64 padding\n options.dek.salt = uint8ArrayToString(crypto.randomBytes(saltLength), 'base64')\n return options\n }\n\n /**\n * Gets an object that can encrypt/decrypt protected data.\n * The default options for a keychain.\n *\n * @returns {Object}\n */\n static get options () {\n return defaultOptions\n }\n\n /**\n * Create a new key.\n *\n * @param {string} name - The local key name; cannot already exist.\n * @param {string} type - One of the key types; 'rsa'.\n * @param {number} [size = 2048] - The key size in bits. Used for rsa keys only.\n * @returns {Promise<KeyInfo>}\n */\n async createKey (name, type, size = 2048) {\n const self = this\n\n if (!validateKeyName(name) || name === 'self') {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n\n if (typeof type !== 'string') {\n return throwDelayed(errcode(new Error(`Invalid key type '${type}'`), codes.ERR_INVALID_KEY_TYPE))\n }\n\n const dsname = DsName(name)\n const exists = await self.store.has(dsname)\n if (exists) return throwDelayed(errcode(new Error(`Key '${name}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))\n\n switch (type.toLowerCase()) {\n case 'rsa':\n if (!Number.isSafeInteger(size) || size < 2048) {\n return throwDelayed(errcode(new Error(`Invalid RSA key size ${size}`), codes.ERR_INVALID_KEY_SIZE))\n }\n break\n default:\n break\n }\n\n let keyInfo\n try {\n // @ts-ignore Differences between several crypto return types need to be fixed in libp2p-crypto\n const keypair = await crypto.keys.generateKeyPair(type, size)\n const kid = await keypair.id()\n /** @type {string} */\n const dek = privates.get(this).dek\n const pem = await keypair.export(dek)\n keyInfo = {\n name: name,\n id: kid\n }\n const batch = self.store.batch()\n batch.put(dsname, uint8ArrayFromString(pem))\n batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))\n\n await batch.commit()\n } catch (/** @type {any} */ err) {\n return throwDelayed(err)\n }\n\n return keyInfo\n }\n\n /**\n * List all the keys.\n *\n * @returns {Promise<KeyInfo[]>}\n */\n async listKeys () {\n const self = this\n const query = {\n prefix: infoPrefix\n }\n\n const info = []\n for await (const value of self.store.query(query)) {\n info.push(JSON.parse(uint8ArrayToString(value.value)))\n }\n\n return info\n }\n\n /**\n * Find a key by it's id.\n *\n * @param {string} id - The universally unique key identifier.\n * @returns {Promise<KeyInfo|undefined>}\n */\n async findKeyById (id) {\n try {\n const keys = await this.listKeys()\n return keys.find((k) => k.id === id)\n } catch (/** @type {any} */ err) {\n return throwDelayed(err)\n }\n }\n\n /**\n * Find a key by it's name.\n *\n * @param {string} name - The local key name.\n * @returns {Promise<KeyInfo>}\n */\n async findKeyByName (name) {\n if (!validateKeyName(name)) {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n\n const dsname = DsInfoName(name)\n try {\n const res = await this.store.get(dsname)\n return JSON.parse(uint8ArrayToString(res))\n } catch (/** @type {any} */ err) {\n return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), codes.ERR_KEY_NOT_FOUND))\n }\n }\n\n /**\n * Remove an existing key.\n *\n * @param {string} name - The local key name; must already exist.\n * @returns {Promise<KeyInfo>}\n */\n async removeKey (name) {\n const self = this\n if (!validateKeyName(name) || name === 'self') {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n const dsname = DsName(name)\n const keyInfo = await self.findKeyByName(name)\n const batch = self.store.batch()\n batch.delete(dsname)\n batch.delete(DsInfoName(name))\n await batch.commit()\n return keyInfo\n }\n\n /**\n * Rename a key\n *\n * @param {string} oldName - The old local key name; must already exist.\n * @param {string} newName - The new local key name; must not already exist.\n * @returns {Promise<KeyInfo>}\n */\n async renameKey (oldName, newName) {\n const self = this\n if (!validateKeyName(oldName) || oldName === 'self') {\n return throwDelayed(errcode(new Error(`Invalid old key name '${oldName}'`), codes.ERR_OLD_KEY_NAME_INVALID))\n }\n if (!validateKeyName(newName) || newName === 'self') {\n return throwDelayed(errcode(new Error(`Invalid new key name '${newName}'`), codes.ERR_NEW_KEY_NAME_INVALID))\n }\n const oldDsname = DsName(oldName)\n const newDsname = DsName(newName)\n const oldInfoName = DsInfoName(oldName)\n const newInfoName = DsInfoName(newName)\n\n const exists = await self.store.has(newDsname)\n if (exists) return throwDelayed(errcode(new Error(`Key '${newName}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))\n\n try {\n const pem = await self.store.get(oldDsname)\n const res = await self.store.get(oldInfoName)\n\n const keyInfo = JSON.parse(uint8ArrayToString(res))\n keyInfo.name = newName\n const batch = self.store.batch()\n batch.put(newDsname, pem)\n batch.put(newInfoName, uint8ArrayFromString(JSON.stringify(keyInfo)))\n batch.delete(oldDsname)\n batch.delete(oldInfoName)\n await batch.commit()\n return keyInfo\n } catch (/** @type {any} */ err) {\n return throwDelayed(err)\n }\n }\n\n /**\n * Export an existing key as a PEM encrypted PKCS #8 string\n *\n * @param {string} name - The local key name; must already exist.\n * @param {string} password - The password\n * @returns {Promise<string>}\n */\n async exportKey (name, password) {\n if (!validateKeyName(name)) {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n if (!password) {\n return throwDelayed(errcode(new Error('Password is required'), codes.ERR_PASSWORD_REQUIRED))\n }\n\n const dsname = DsName(name)\n try {\n const res = await this.store.get(dsname)\n const pem = uint8ArrayToString(res)\n /** @type {string} */\n const dek = privates.get(this).dek\n const privateKey = await crypto.keys.import(pem, dek)\n return privateKey.export(password)\n } catch (/** @type {any} */ err) {\n return throwDelayed(err)\n }\n }\n\n /**\n * Import a new key from a PEM encoded PKCS #8 string\n *\n * @param {string} name - The local key name; must not already exist.\n * @param {string} pem - The PEM encoded PKCS #8 string\n * @param {string} password - The password.\n * @returns {Promise<KeyInfo>}\n */\n async importKey (name, pem, password) {\n const self = this\n if (!validateKeyName(name) || name === 'self') {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n if (!pem) {\n return throwDelayed(errcode(new Error('PEM encoded key is required'), codes.ERR_PEM_REQUIRED))\n }\n const dsname = DsName(name)\n const exists = await self.store.has(dsname)\n if (exists) return throwDelayed(errcode(new Error(`Key '${name}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))\n\n let privateKey\n try {\n privateKey = await crypto.keys.import(pem, password)\n } catch (/** @type {any} */ err) {\n return throwDelayed(errcode(new Error('Cannot read the key, most likely the password is wrong'), codes.ERR_CANNOT_READ_KEY))\n }\n\n let kid\n try {\n kid = await privateKey.id()\n /** @type {string} */\n const dek = privates.get(this).dek\n pem = await privateKey.export(dek)\n } catch (/** @type {any} */ err) {\n return throwDelayed(err)\n }\n\n const keyInfo = {\n name: name,\n id: kid\n }\n const batch = self.store.batch()\n batch.put(dsname, uint8ArrayFromString(pem))\n batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))\n await batch.commit()\n\n return keyInfo\n }\n\n /**\n * Import a peer key\n *\n * @param {string} name - The local key name; must not already exist.\n * @param {PeerId} peer - The PEM encoded PKCS #8 string\n * @returns {Promise<KeyInfo>}\n */\n async importPeer (name, peer) {\n const self = this\n if (!validateKeyName(name)) {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n if (!peer || !peer.privKey) {\n return throwDelayed(errcode(new Error('Peer.privKey is required'), codes.ERR_MISSING_PRIVATE_KEY))\n }\n\n const privateKey = peer.privKey\n const dsname = DsName(name)\n const exists = await self.store.has(dsname)\n if (exists) return throwDelayed(errcode(new Error(`Key '${name}' already exists`), codes.ERR_KEY_ALREADY_EXISTS))\n\n try {\n const kid = await privateKey.id()\n /** @type {string} */\n const dek = privates.get(this).dek\n const pem = await privateKey.export(dek)\n const keyInfo = {\n name: name,\n id: kid\n }\n const batch = self.store.batch()\n batch.put(dsname, uint8ArrayFromString(pem))\n batch.put(DsInfoName(name), uint8ArrayFromString(JSON.stringify(keyInfo)))\n await batch.commit()\n return keyInfo\n } catch (/** @type {any} */ err) {\n return throwDelayed(err)\n }\n }\n\n /**\n * Gets the private key as PEM encoded PKCS #8 string.\n *\n * @param {string} name\n * @returns {Promise<string>}\n */\n async _getPrivateKey (name) {\n if (!validateKeyName(name)) {\n return throwDelayed(errcode(new Error(`Invalid key name '${name}'`), codes.ERR_INVALID_KEY_NAME))\n }\n\n try {\n const dsname = DsName(name)\n const res = await this.store.get(dsname)\n return uint8ArrayToString(res)\n } catch (/** @type {any} */ err) {\n return throwDelayed(errcode(new Error(`Key '${name}' does not exist. ${err.message}`), codes.ERR_KEY_NOT_FOUND))\n }\n }\n\n /**\n * Rotate keychain password and re-encrypt all assosciated keys\n *\n * @param {string} oldPass - The old local keychain password\n * @param {string} newPass - The new local keychain password\n */\n async rotateKeychainPass (oldPass, newPass) {\n if (typeof oldPass !== 'string') {\n return throwDelayed(errcode(new Error(`Invalid old pass type '${typeof oldPass}'`), codes.ERR_INVALID_OLD_PASS_TYPE))\n }\n if (typeof newPass !== 'string') {\n return throwDelayed(errcode(new Error(`Invalid new pass type '${typeof newPass}'`), codes.ERR_INVALID_NEW_PASS_TYPE))\n }\n if (newPass.length < 20) {\n return throwDelayed(errcode(new Error(`Invalid pass length ${newPass.length}`), codes.ERR_INVALID_PASS_LENGTH))\n }\n log('recreating keychain')\n const oldDek = privates.get(this).dek\n this.opts.pass = newPass\n const newDek = newPass\n ? crypto.pbkdf2(\n newPass,\n this.opts.dek.salt,\n this.opts.dek.iterationCount,\n this.opts.dek.keyLength,\n this.opts.dek.hash)\n : ''\n privates.set(this, { dek: newDek })\n const keys = await this.listKeys()\n for (const key of keys) {\n const res = await this.store.get(DsName(key.name))\n const pem = uint8ArrayToString(res)\n const privateKey = await crypto.keys.import(pem, oldDek)\n const password = newDek.toString()\n const keyAsPEM = await privateKey.export(password)\n\n // Update stored key\n const batch = this.store.batch()\n const keyInfo = {\n name: key.name,\n id: key.id\n }\n batch.put(DsName(key.name), uint8ArrayFromString(keyAsPEM))\n batch.put(DsInfoName(key.name), uint8ArrayFromString(JSON.stringify(keyInfo)))\n await batch.commit()\n }\n log('keychain reconstructed')\n }\n}\n\nmodule.exports = Keychain\n","// @ts-nocheck\n'use strict'\n\nrequire('node-forge/lib/x509')\nconst forge = require('node-forge/lib/forge')\nconst pki = forge.pki\n\n/**\n * Gets a self-signed X.509 certificate for the key.\n *\n * The output Uint8Array contains the PKCS #7 message in DER.\n *\n * TODO: move to libp2p-crypto package\n *\n * @param {KeyInfo} key - The id and name of the key\n * @param {RsaPrivateKey} privateKey - The naked key\n * @returns {Uint8Array}\n */\nconst certificateForKey = (key, privateKey) => {\n const publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e)\n const cert = pki.createCertificate()\n cert.publicKey = publicKey\n cert.serialNumber = '01'\n cert.validity.notBefore = new Date()\n cert.validity.notAfter = new Date()\n cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 10)\n const attrs = [{\n name: 'organizationName',\n value: 'ipfs'\n }, {\n shortName: 'OU',\n value: 'keystore'\n }, {\n name: 'commonName',\n value: key.id\n }]\n cert.setSubject(attrs)\n cert.setIssuer(attrs)\n cert.setExtensions([{\n name: 'basicConstraints',\n cA: true\n }, {\n name: 'keyUsage',\n keyCertSign: true,\n digitalSignature: true,\n nonRepudiation: true,\n keyEncipherment: true,\n dataEncipherment: true\n }, {\n name: 'extKeyUsage',\n serverAuth: true,\n clientAuth: true,\n codeSigning: true,\n emailProtection: true,\n timeStamping: true\n }, {\n name: 'nsCertType',\n client: true,\n server: true,\n email: true,\n objsign: true,\n sslCA: true,\n emailCA: true,\n objCA: true\n }])\n // self-sign certificate\n cert.sign(privateKey)\n\n return cert\n}\n\n/**\n * Finds the first item in a collection that is matched in the\n * `asyncCompare` function.\n *\n * `asyncCompare` is an async function that must\n * resolve to either `true` or `false`.\n *\n * @param {Array} array\n * @param {function(*)} asyncCompare - An async function that returns a boolean\n */\nasync function findAsync (array, asyncCompare) {\n const promises = array.map(asyncCompare)\n const results = await Promise.all(promises)\n const index = results.findIndex(result => result)\n return array[index]\n}\n\nmodule.exports = {\n certificateForKey,\n findAsync\n}\n","// @ts-nocheck\n'use strict'\n\nconst mergeOptions = require('merge-options')\nconst { pipe } = require('it-pipe')\nconst { tap } = require('streaming-iterables')\nconst oldPeerLRU = require('./old-peers')\nconst { METRICS: defaultOptions } = require('../constants')\nconst Stats = require('./stats')\n\nconst initialCounters = [\n 'dataReceived',\n 'dataSent'\n]\n\nconst directionToEvent = {\n in: 'dataReceived',\n out: 'dataSent'\n}\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection\n */\n\n/**\n * @typedef MetricsOptions\n * @property {number} [computeThrottleMaxQueueSize = defaultOptions.computeThrottleMaxQueueSize]\n * @property {number} [computeThrottleTimeout = defaultOptions.computeThrottleTimeout]\n * @property {number[]} [movingAverageIntervals = defaultOptions.movingAverageIntervals]\n * @property {number} [maxOldPeersRetention = defaultOptions.maxOldPeersRetention]\n */\n\nclass Metrics {\n /**\n * @class\n * @param {MetricsOptions} options\n */\n constructor (options) {\n this._options = mergeOptions(defaultOptions, options)\n this._globalStats = new Stats(initialCounters, this._options)\n this._peerStats = new Map()\n this._protocolStats = new Map()\n this._oldPeers = oldPeerLRU(this._options.maxOldPeersRetention)\n this._running = false\n this._onMessage = this._onMessage.bind(this)\n this._systems = new Map()\n }\n\n /**\n * Must be called for stats to saved. Any data pushed for tracking\n * will be ignored.\n */\n start () {\n this._running = true\n }\n\n /**\n * Stops all averages timers and prevents new data from being tracked.\n * Once `stop` is called, `start` must be called to resume stats tracking.\n */\n stop () {\n this._running = false\n this._globalStats.stop()\n for (const stats of this._peerStats.values()) {\n stats.stop()\n }\n for (const stats of this._protocolStats.values()) {\n stats.stop()\n }\n }\n\n /**\n * Gets the global `Stats` object\n *\n * @returns {Stats}\n */\n get global () {\n return this._globalStats\n }\n\n /**\n * Returns a list of `PeerId` strings currently being tracked\n *\n * @returns {string[]}\n */\n get peers () {\n return Array.from(this._peerStats.keys())\n }\n\n /**\n * @returns {Map<string, Map<string, Map<string, any>>>}\n */\n getComponentMetrics () {\n return this._systems\n }\n\n updateComponentMetric ({ system = 'libp2p', component, metric, value }) {\n if (!this._systems.has(system)) {\n this._systems.set(system, new Map())\n }\n\n const systemMetrics = this._systems.get(system)\n\n if (!systemMetrics.has(component)) {\n systemMetrics.set(component, new Map())\n }\n\n const componentMetrics = systemMetrics.get(component)\n\n componentMetrics.set(metric, value)\n }\n\n /**\n * Returns the `Stats` object for the given `PeerId` whether it\n * is a live peer, or in the disconnected peer LRU cache.\n *\n * @param {PeerId} peerId\n * @returns {Stats}\n */\n forPeer (peerId) {\n const idString = peerId.toB58String()\n return this._peerStats.get(idString) || this._oldPeers.get(idString)\n }\n\n /**\n * Returns a list of all protocol strings currently being tracked.\n *\n * @returns {string[]}\n */\n get protocols () {\n return Array.from(this._protocolStats.keys())\n }\n\n /**\n * Returns the `Stats` object for the given `protocol`.\n *\n * @param {string} protocol\n * @returns {Stats}\n */\n forProtocol (protocol) {\n return this._protocolStats.get(protocol)\n }\n\n /**\n * Should be called when all connections to a given peer\n * have closed. The `Stats` collection for the peer will\n * be stopped and moved to an LRU for temporary retention.\n *\n * @param {PeerId} peerId\n */\n onPeerDisconnected (peerId) {\n const idString = peerId.toB58String()\n const peerStats = this._peerStats.get(idString)\n if (peerStats) {\n peerStats.stop()\n this._peerStats.delete(idString)\n this._oldPeers.set(idString, peerStats)\n }\n }\n\n /**\n * Takes the metadata for a message and tracks it in the\n * appropriate categories. If the protocol is present, protocol\n * stats will also be tracked.\n *\n * @private\n * @param {object} params\n * @param {PeerId} params.remotePeer - Remote peer\n * @param {string} [params.protocol] - Protocol string the stream is running\n * @param {string} params.direction - One of ['in','out']\n * @param {number} params.dataLength - Size of the message\n * @returns {void}\n */\n _onMessage ({ remotePeer, protocol, direction, dataLength }) {\n if (!this._running) return\n\n const key = directionToEvent[direction]\n\n let peerStats = this.forPeer(remotePeer)\n if (!peerStats) {\n peerStats = new Stats(initialCounters, this._options)\n this._peerStats.set(remotePeer.toB58String(), peerStats)\n }\n\n // Peer and global stats\n peerStats.push(key, dataLength)\n this._globalStats.push(key, dataLength)\n\n // Protocol specific stats\n if (protocol) {\n let protocolStats = this.forProtocol(protocol)\n if (!protocolStats) {\n protocolStats = new Stats(initialCounters, this._options)\n this._protocolStats.set(protocol, protocolStats)\n }\n protocolStats.push(key, dataLength)\n }\n }\n\n /**\n * Replaces the `PeerId` string with the given `peerId`.\n * If stats are already being tracked for the given `peerId`, the\n * placeholder stats will be merged with the existing stats.\n *\n * @param {PeerId} placeholder - A peerId string\n * @param {PeerId} peerId\n * @returns {void}\n */\n updatePlaceholder (placeholder, peerId) {\n if (!this._running) return\n const placeholderStats = this.forPeer(placeholder)\n const peerIdString = peerId.toB58String()\n const existingStats = this.forPeer(peerId)\n let mergedStats = placeholderStats\n\n // If we already have stats, merge the two\n if (existingStats) {\n // If existing, merge\n mergedStats = Metrics.mergeStats(existingStats, mergedStats)\n // Attempt to delete from the old peers list just in case it was tracked there\n this._oldPeers.delete(peerIdString)\n }\n\n this._peerStats.delete(placeholder.toB58String())\n this._peerStats.set(peerIdString, mergedStats)\n mergedStats.start()\n }\n\n /**\n * Tracks data running through a given Duplex Iterable `stream`. If\n * the `peerId` is not provided, a placeholder string will be created and\n * returned. This allows lazy tracking of a peer when the peer is not yet known.\n * When the `PeerId` is known, `Metrics.updatePlaceholder` should be called\n * with the placeholder string returned from here, and the known `PeerId`.\n *\n * @param {Object} options\n * @param {MultiaddrConnection} options.stream - A duplex iterable stream\n * @param {PeerId} [options.remotePeer] - The id of the remote peer that's connected\n * @param {string} [options.protocol] - The protocol the stream is running\n * @returns {MultiaddrConnection} The peerId string or placeholder string\n */\n trackStream ({ stream, remotePeer, protocol }) {\n const metrics = this\n const _source = stream.source\n stream.source = tap(chunk => metrics._onMessage({\n remotePeer,\n protocol,\n direction: 'in',\n dataLength: chunk.length\n }))(_source)\n\n const _sink = stream.sink\n stream.sink = source => {\n return pipe(\n source,\n tap(chunk => metrics._onMessage({\n remotePeer,\n protocol,\n direction: 'out',\n dataLength: chunk.length\n })),\n _sink\n )\n }\n\n return stream\n }\n\n /**\n * Merges `other` into `target`. `target` will be modified\n * and returned.\n *\n * @param {Stats} target\n * @param {Stats} other\n * @returns {Stats}\n */\n static mergeStats (target, other) {\n target.stop()\n other.stop()\n\n // Merge queues\n target._queue = [...target._queue, ...other._queue]\n\n // TODO: how to merge moving averages?\n return target\n }\n}\n\nmodule.exports = Metrics\n","'use strict'\n\nconst LRU = require('hashlru')\n\n/**\n * Creates and returns a Least Recently Used Cache\n *\n * @param {number} maxSize\n * @returns {any}\n */\nmodule.exports = (maxSize) => {\n // @ts-ignore LRU expression is not callable\n const patched = LRU(maxSize)\n patched.delete = patched.remove\n return patched\n}\n","// @ts-nocheck\n'use strict'\n\nconst { EventEmitter } = require('events')\nconst { BigNumber: Big } = require('bignumber.js')\nconst MovingAverage = require('@vascosantos/moving-average')\nconst retimer = require('retimer')\n\n/**\n * @typedef {import('@vascosantos/moving-average').IMovingAverage} IMovingAverage\n * @typedef {import('bignumber.js').BigNumber} Big\n */\n\nclass Stats extends EventEmitter {\n /**\n * A queue based manager for stat processing\n *\n * @class\n * @param {string[]} initialCounters\n * @param {any} options\n */\n constructor (initialCounters, options) {\n super()\n\n this._options = options\n this._queue = []\n\n /** @type {{ dataReceived: Big, dataSent: Big }} */\n this._stats = {\n dataReceived: Big(0),\n dataSent: Big(0)\n }\n\n this._frequencyLastTime = Date.now()\n this._frequencyAccumulators = {}\n\n /** @type {{ dataReceived: IMovingAverage[], dataSent: IMovingAverage[] }} */\n this._movingAverages = {}\n\n this._update = this._update.bind(this)\n\n const intervals = this._options.movingAverageIntervals\n\n for (let i = 0; i < initialCounters.length; i++) {\n const key = initialCounters[i]\n this._stats[key] = Big(0)\n this._movingAverages[key] = {}\n for (let k = 0; k < intervals.length; k++) {\n const interval = intervals[k]\n const ma = this._movingAverages[key][interval] = MovingAverage(interval)\n ma.push(this._frequencyLastTime, 0)\n }\n }\n }\n\n /**\n * Initializes the internal timer if there are items in the queue. This\n * should only need to be called if `Stats.stop` was previously called, as\n * `Stats.push` will also start the processing.\n *\n * @returns {void}\n */\n start () {\n if (this._queue.length) {\n this._resetComputeTimeout()\n }\n }\n\n /**\n * Stops processing and computing of stats by clearing the internal\n * timer.\n *\n * @returns {void}\n */\n stop () {\n if (this._timeout) {\n this._timeout.clear()\n this._timeout = null\n }\n }\n\n /**\n * Returns a clone of the current stats.\n */\n get snapshot () {\n return Object.assign({}, this._stats)\n }\n\n /**\n * Returns a clone of the internal movingAverages\n */\n get movingAverages () {\n return Object.assign({}, this._movingAverages)\n }\n\n /**\n * Returns a plain JSON object of the stats\n *\n * @returns {*}\n */\n toJSON () {\n const snapshot = this.snapshot\n const movingAverages = this.movingAverages\n const data = {\n dataReceived: snapshot.dataReceived.toString(),\n dataSent: snapshot.dataSent.toString(),\n movingAverages: {}\n }\n\n const counters = Object.keys(movingAverages)\n for (const key of counters) {\n data.movingAverages[key] = {}\n for (const interval of Object.keys(movingAverages[key])) {\n data.movingAverages[key][interval] = movingAverages[key][interval].movingAverage()\n }\n }\n\n return data\n }\n\n /**\n * Pushes the given operation data to the queue, along with the\n * current Timestamp, then resets the update timer.\n *\n * @param {string} counter\n * @param {number} inc\n * @returns {void}\n */\n push (counter, inc) {\n this._queue.push([counter, inc, Date.now()])\n this._resetComputeTimeout()\n }\n\n /**\n * Resets the timeout for triggering updates.\n *\n * @private\n * @returns {void}\n */\n _resetComputeTimeout () {\n this._timeout = retimer(this._update, this._nextTimeout())\n }\n\n /**\n * Calculates and returns the timeout for the next update based on\n * the urgency of the update.\n *\n * @private\n * @returns {number}\n */\n _nextTimeout () {\n // calculate the need for an update, depending on the queue length\n const urgency = this._queue.length / this._options.computeThrottleMaxQueueSize\n const timeout = Math.max(this._options.computeThrottleTimeout * (1 - urgency), 0)\n return timeout\n }\n\n /**\n * If there are items in the queue, they will will be processed and\n * the frequency for all items will be updated based on the Timestamp\n * of the last item in the queue. The `update` event will also be emitted\n * with the latest stats.\n *\n * If there are no items in the queue, no action is taken.\n *\n * @private\n * @returns {void}\n */\n _update () {\n this._timeout = null\n if (this._queue.length) {\n let last\n for (last of this._queue) {\n this._applyOp(last)\n }\n this._queue = []\n\n this._updateFrequency(last[2]) // contains timestamp of last op\n\n this.emit('update', this._stats)\n }\n }\n\n /**\n * For each key in the stats, the frequency and moving averages\n * will be updated via Stats._updateFrequencyFor based on the time\n * difference between calls to this method.\n *\n * @private\n * @param {Timestamp} latestTime\n * @returns {void}\n */\n _updateFrequency (latestTime) {\n const timeDiff = latestTime - this._frequencyLastTime\n\n Object.keys(this._stats).forEach((key) => {\n this._updateFrequencyFor(key, timeDiff, latestTime)\n })\n\n this._frequencyLastTime = latestTime\n }\n\n /**\n * Updates the `movingAverages` for the given `key` and also\n * resets the `frequencyAccumulator` for the `key`.\n *\n * @private\n * @param {string} key\n * @param {number} timeDiffMS - Time in milliseconds\n * @param {Timestamp} latestTime - Time in ticks\n * @returns {void}\n */\n _updateFrequencyFor (key, timeDiffMS, latestTime) {\n const count = this._frequencyAccumulators[key] || 0\n this._frequencyAccumulators[key] = 0\n // if `timeDiff` is zero, `hz` becomes Infinity, so we fallback to 1ms\n const safeTimeDiff = timeDiffMS || 1\n const hz = (count / safeTimeDiff) * 1000\n\n let movingAverages = this._movingAverages[key]\n if (!movingAverages) {\n movingAverages = this._movingAverages[key] = {}\n }\n\n const intervals = this._options.movingAverageIntervals\n\n for (let i = 0; i < intervals.length; i++) {\n const movingAverageInterval = intervals[i]\n let movingAverage = movingAverages[movingAverageInterval]\n if (!movingAverage) {\n movingAverage = movingAverages[movingAverageInterval] = MovingAverage(movingAverageInterval)\n }\n movingAverage.push(latestTime, hz)\n }\n }\n\n /**\n * For the given operation, `op`, the stats and `frequencyAccumulator`\n * will be updated or initialized if they don't already exist.\n *\n * @private\n * @param {{string, number}[]} op\n * @throws {InvalidNumber}\n * @returns {void}\n */\n _applyOp (op) {\n const key = op[0]\n const inc = op[1]\n\n if (typeof inc !== 'number') {\n throw new Error(`invalid increment number: ${inc}`)\n }\n\n let n\n\n if (!Object.prototype.hasOwnProperty.call(this._stats, key)) {\n n = this._stats[key] = Big(0)\n } else {\n n = this._stats[key]\n }\n this._stats[key] = n.plus(inc)\n\n if (!this._frequencyAccumulators[key]) {\n this._frequencyAccumulators[key] = 0\n }\n this._frequencyAccumulators[key] += inc\n }\n}\n\nmodule.exports = Stats\n","'use strict'\n\n/**\n * @template K\n * @template V\n */\nclass TrackedMap extends Map {\n /**\n * @param {object} options\n * @param {string} options.system\n * @param {string} options.component\n * @param {string} options.metric\n * @param {import('.')} options.metrics\n */\n constructor (options) {\n super()\n\n const { system, component, metric, metrics } = options\n this._system = system\n this._component = component\n this._metric = metric\n this._metrics = metrics\n\n this._metrics.updateComponentMetric({\n system: this._system,\n component: this._component,\n metric: this._metric,\n value: this.size\n })\n }\n\n /**\n * @param {K} key\n * @param {V} value\n */\n set (key, value) {\n super.set(key, value)\n this._metrics.updateComponentMetric({\n system: this._system,\n component: this._component,\n metric: this._metric,\n value: this.size\n })\n return this\n }\n\n /**\n * @param {K} key\n */\n delete (key) {\n const deleted = super.delete(key)\n this._metrics.updateComponentMetric({\n system: this._system,\n component: this._component,\n metric: this._metric,\n value: this.size\n })\n return deleted\n }\n\n clear () {\n super.clear()\n\n this._metrics.updateComponentMetric({\n system: this._system,\n component: this._component,\n metric: this._metric,\n value: this.size\n })\n }\n}\n\n/**\n * @template K\n * @template V\n * @param {object} options\n * @param {string} [options.system]\n * @param {string} options.component\n * @param {string} options.metric\n * @param {import('.')} [options.metrics]\n * @returns {Map<K, V>}\n */\nmodule.exports = ({ system = 'libp2p', component, metric, metrics }) => {\n /** @type {Map<K, V>} */\n let map\n\n if (metrics) {\n map = new TrackedMap({ system, component, metric, metrics })\n } else {\n map = new Map()\n }\n\n return map\n}\n","'use strict'\n\n// @ts-ignore nat-api does not export types\nconst NatAPI = require('nat-api')\nconst debug = require('debug')\nconst { promisify } = require('es6-promisify')\nconst { Multiaddr } = require('multiaddr')\nconst log = Object.assign(debug('libp2p:nat'), {\n error: debug('libp2p:nat:err')\n})\nconst { isBrowser } = require('wherearewe')\nconst retry = require('p-retry')\nconst isPrivateIp = require('private-ip')\nconst pkg = require('../package.json')\nconst errcode = require('err-code')\nconst {\n codes: { ERR_INVALID_PARAMETERS }\n} = require('./errors')\nconst isLoopback = require('libp2p-utils/src/multiaddr/is-loopback')\n\nconst DEFAULT_TTL = 7200\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('./transport-manager')} TransportManager\n * @typedef {import('./address-manager')} AddressManager\n */\n\n/**\n * @typedef {Object} NatManagerProperties\n * @property {PeerId} peerId - The peer ID of the current node\n * @property {TransportManager} transportManager - A transport manager\n * @property {AddressManager} addressManager - An address manager\n *\n * @typedef {Object} NatManagerOptions\n * @property {boolean} enabled - Whether to enable the NAT manager\n * @property {string} [externalIp] - Pass a value to use instead of auto-detection\n * @property {string} [description] - A string value to use for the port mapping description on the gateway\n * @property {number} [ttl = DEFAULT_TTL] - How long UPnP port mappings should last for in seconds (minimum 1200)\n * @property {boolean} [keepAlive] - Whether to automatically refresh UPnP port mappings when their TTL is reached\n * @property {string} [gateway] - Pass a value to use instead of auto-detection\n * @property {object} [pmp] - PMP options\n * @property {boolean} [pmp.enabled] - Whether to enable PMP as well as UPnP\n */\n\nfunction highPort (min = 1024, max = 65535) {\n return Math.floor(Math.random() * (max - min + 1) + min)\n}\n\nclass NatManager {\n /**\n * @class\n * @param {NatManagerProperties & NatManagerOptions} options\n */\n constructor ({ peerId, addressManager, transportManager, ...options }) {\n this._peerId = peerId\n this._addressManager = addressManager\n this._transportManager = transportManager\n\n this._enabled = options.enabled\n this._externalIp = options.externalIp\n this._options = {\n description: options.description || `${pkg.name}@${pkg.version} ${this._peerId}`,\n ttl: options.ttl || DEFAULT_TTL,\n autoUpdate: options.keepAlive || true,\n gateway: options.gateway,\n enablePMP: Boolean(options.pmp && options.pmp.enabled)\n }\n\n if (this._options.ttl < DEFAULT_TTL) {\n throw errcode(new Error(`NatManager ttl should be at least ${DEFAULT_TTL} seconds`), ERR_INVALID_PARAMETERS)\n }\n }\n\n /**\n * Starts the NAT manager\n */\n start () {\n if (isBrowser || !this._enabled) {\n return\n }\n\n // done async to not slow down startup\n this._start().catch((err) => {\n // hole punching errors are non-fatal\n log.error(err)\n })\n }\n\n async _start () {\n const addrs = this._transportManager.getAddrs()\n\n for (const addr of addrs) {\n // try to open uPnP ports for each thin waist address\n const { family, host, port, transport } = addr.toOptions()\n\n if (!addr.isThinWaistAddress() || transport !== 'tcp') {\n // only bare tcp addresses\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (isLoopback(addr)) {\n // eslint-disable-next-line no-continue\n continue\n }\n\n if (family !== 4) {\n // ignore ipv6\n // eslint-disable-next-line no-continue\n continue\n }\n\n const client = this._getClient()\n const publicIp = this._externalIp || await client.externalIp()\n\n // @ts-expect-error types are wrong\n if (isPrivateIp(publicIp)) {\n throw new Error(`${publicIp} is private - please set config.nat.externalIp to an externally routable IP or ensure you are not behind a double NAT`)\n }\n\n const publicPort = highPort()\n\n log(`opening uPnP connection from ${publicIp}:${publicPort} to ${host}:${port}`)\n\n await client.map({\n publicPort,\n privatePort: port,\n protocol: transport.toUpperCase()\n })\n\n this._addressManager.addObservedAddr(Multiaddr.fromNodeAddress({\n family: 4,\n address: publicIp,\n port: publicPort\n }, transport))\n }\n }\n\n _getClient () {\n if (this._client) {\n return this._client\n }\n\n const client = new NatAPI(this._options)\n\n /** @type {(...any: any) => any} */\n const map = promisify(client.map.bind(client))\n /** @type {(...any: any) => any} */\n const destroy = promisify(client.destroy.bind(client))\n /** @type {(...any: any) => any} */\n const externalIp = promisify(client.externalIp.bind(client))\n\n // these are all network operations so add a retry\n this._client = {\n /**\n * @param {...any} args\n * @returns {Promise<void>}\n */\n map: (...args) => retry(() => map(...args), { onFailedAttempt: log.error, unref: true }),\n\n /**\n * @param {...any} args\n * @returns {Promise<void>}\n */\n destroy: (...args) => retry(() => destroy(...args), { onFailedAttempt: log.error, unref: true }),\n\n /**\n * @param {...any} args\n * @returns {Promise<string>}\n */\n externalIp: (...args) => retry(() => externalIp(...args), { onFailedAttempt: log.error, unref: true })\n }\n\n return this._client\n }\n\n /**\n * Stops the NAT manager\n *\n * @async\n */\n async stop () {\n if (isBrowser || !this._client) {\n return\n }\n\n try {\n await this._client.destroy()\n this._client = null\n } catch (/** @type {any} */ err) {\n log.error(err)\n }\n }\n}\n\nmodule.exports = NatManager\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:peer-routing'), {\n error: debug('libp2p:peer-routing:err')\n})\nconst errCode = require('err-code')\nconst errors = require('./errors')\nconst {\n storeAddresses,\n uniquePeers,\n requirePeers\n} = require('./content-routing/utils')\nconst { TimeoutController } = require('timeout-abort-controller')\n\nconst merge = require('it-merge')\nconst { pipe } = require('it-pipe')\nconst first = require('it-first')\nconst drain = require('it-drain')\nconst filter = require('it-filter')\nconst {\n setDelayedInterval,\n clearDelayedInterval\n// @ts-ignore module with no types\n} = require('set-delayed-interval')\nconst { DHTPeerRouting } = require('./dht/dht-peer-routing')\n// @ts-expect-error setMaxListeners is missing from the types\nconst { setMaxListeners } = require('events')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('libp2p-interfaces/src/peer-routing/types').PeerRouting} PeerRoutingModule\n */\n\n/**\n * @typedef {Object} RefreshManagerOptions\n * @property {boolean} [enabled = true] - Whether to enable the Refresh manager\n * @property {number} [bootDelay = 6e5] - Boot delay to start the Refresh Manager (in ms)\n * @property {number} [interval = 10e3] - Interval between each Refresh Manager run (in ms)\n * @property {number} [timeout = 10e3] - How long to let each refresh run (in ms)\n *\n * @typedef {Object} PeerRoutingOptions\n * @property {RefreshManagerOptions} [refreshManager]\n */\n\nclass PeerRouting {\n /**\n * @class\n * @param {import('./')} libp2p\n */\n constructor (libp2p) {\n this._peerId = libp2p.peerId\n this._peerStore = libp2p.peerStore\n /** @type {PeerRoutingModule[]} */\n this._routers = libp2p._modules.peerRouting || []\n\n // If we have the dht, add it to the available peer routers\n if (libp2p._dht && libp2p._config.dht.enabled) {\n this._routers.push(new DHTPeerRouting(libp2p._dht))\n }\n\n this._refreshManagerOptions = libp2p._options.peerRouting.refreshManager\n\n this._findClosestPeersTask = this._findClosestPeersTask.bind(this)\n }\n\n /**\n * Start peer routing service.\n */\n start () {\n if (!this._routers.length || this._timeoutId || !this._refreshManagerOptions.enabled) {\n return\n }\n\n this._timeoutId = setDelayedInterval(\n this._findClosestPeersTask, this._refreshManagerOptions.interval, this._refreshManagerOptions.bootDelay\n )\n }\n\n /**\n * Recurrent task to find closest peers and add their addresses to the Address Book.\n */\n async _findClosestPeersTask () {\n try {\n // nb getClosestPeers adds the addresses to the address book\n await drain(this.getClosestPeers(this._peerId.id, { timeout: this._refreshManagerOptions.timeout || 10e3 }))\n } catch (/** @type {any} */ err) {\n log.error(err)\n }\n }\n\n /**\n * Stop peer routing service.\n */\n stop () {\n clearDelayedInterval(this._timeoutId)\n }\n\n /**\n * Iterates over all peer routers in parallel to find the given peer.\n *\n * @param {PeerId} id - The id of the peer to find\n * @param {object} [options]\n * @param {number} [options.timeout] - How long the query should run\n * @returns {Promise<{ id: PeerId, multiaddrs: Multiaddr[] }>}\n */\n async findPeer (id, options) { // eslint-disable-line require-await\n if (!this._routers.length) {\n throw errCode(new Error('No peer routers available'), errors.codes.ERR_NO_ROUTERS_AVAILABLE)\n }\n\n if (id.toB58String() === this._peerId.toB58String()) {\n throw errCode(new Error('Should not try to find self'), errors.codes.ERR_FIND_SELF)\n }\n\n const output = await pipe(\n merge(\n ...this._routers.map(router => (async function * () {\n try {\n yield await router.findPeer(id, options)\n } catch (err) {\n log.error(err)\n }\n })())\n ),\n (source) => filter(source, Boolean),\n (source) => storeAddresses(source, this._peerStore),\n (source) => first(source)\n )\n\n if (output) {\n return output\n }\n\n throw errCode(new Error(errors.messages.NOT_FOUND), errors.codes.ERR_NOT_FOUND)\n }\n\n /**\n * Attempt to find the closest peers on the network to the given key.\n *\n * @param {Uint8Array} key - A CID like key\n * @param {Object} [options]\n * @param {number} [options.timeout=30e3] - How long the query can take\n * @param {AbortSignal} [options.signal] - An AbortSignal to abort the request\n * @returns {AsyncIterable<{ id: PeerId, multiaddrs: Multiaddr[] }>}\n */\n async * getClosestPeers (key, options = { timeout: 30e3 }) {\n if (!this._routers.length) {\n throw errCode(new Error('No peer routers available'), errors.codes.ERR_NO_ROUTERS_AVAILABLE)\n }\n\n if (options.timeout) {\n const controller = new TimeoutController(options.timeout)\n // this controller will potentially be used while dialing lots of\n // peers so prevent MaxListenersExceededWarning appearing in the console\n try {\n // fails on node < 15.4\n setMaxListeners && setMaxListeners(Infinity, controller.signal)\n } catch {}\n\n options.signal = controller.signal\n }\n\n yield * pipe(\n merge(\n ...this._routers.map(router => router.getClosestPeers(key, options))\n ),\n (source) => storeAddresses(source, this._peerStore),\n (source) => uniquePeers(source),\n (source) => requirePeers(source)\n )\n }\n}\n\nmodule.exports = PeerRouting\n","'use strict'\n\nconst debug = require('debug')\nconst errcode = require('err-code')\nconst { Multiaddr } = require('multiaddr')\nconst PeerId = require('peer-id')\nconst { codes } = require('../errors')\nconst PeerRecord = require('../record/peer-record')\nconst Envelope = require('../record/envelope')\nconst { pipe } = require('it-pipe')\nconst all = require('it-all')\nconst filter = require('it-filter')\nconst map = require('it-map')\nconst each = require('it-foreach')\n\n/**\n * @typedef {import('./types').PeerStore} PeerStore\n * @typedef {import('./types').Address} Address\n * @typedef {import('./types').AddressBook} AddressBook\n */\n\nconst log = Object.assign(debug('libp2p:peer-store:address-book'), {\n error: debug('libp2p:peer-store:address-book:err')\n})\n\nconst EVENT_NAME = 'change:multiaddrs'\n\n/**\n * @implements {AddressBook}\n */\nclass PeerStoreAddressBook {\n /**\n * @param {PeerStore[\"emit\"]} emit\n * @param {import('./types').Store} store\n * @param {(peerId: PeerId, multiaddr: Multiaddr) => Promise<boolean>} addressFilter\n */\n constructor (emit, store, addressFilter) {\n this._emit = emit\n this._store = store\n this._addressFilter = addressFilter\n }\n\n /**\n * ConsumePeerRecord adds addresses from a signed peer record contained in a record envelope.\n * This will return a boolean that indicates if the record was successfully processed and added\n * into the AddressBook.\n *\n * @param {Envelope} envelope\n */\n async consumePeerRecord (envelope) {\n log('consumePeerRecord await write lock')\n const release = await this._store.lock.writeLock()\n log('consumePeerRecord got write lock')\n\n let peerId\n let updatedPeer\n\n try {\n let peerRecord\n try {\n peerRecord = PeerRecord.createFromProtobuf(envelope.payload)\n } catch (/** @type {any} */ err) {\n log.error('invalid peer record received')\n return false\n }\n\n peerId = peerRecord.peerId\n const multiaddrs = peerRecord.multiaddrs\n\n // Verify peerId\n if (!peerId.equals(envelope.peerId)) {\n log('signing key does not match PeerId in the PeerRecord')\n return false\n }\n\n // ensure the record has multiaddrs\n if (!multiaddrs || !multiaddrs.length) {\n return false\n }\n\n if (await this._store.has(peerId)) {\n const peer = await this._store.load(peerId)\n\n if (peer.peerRecordEnvelope) {\n const storedEnvelope = await Envelope.createFromProtobuf(peer.peerRecordEnvelope)\n const storedRecord = PeerRecord.createFromProtobuf(storedEnvelope.payload)\n\n // ensure seq is greater than, or equal to, the last received\n if (storedRecord.seqNumber >= peerRecord.seqNumber) {\n return false\n }\n }\n }\n\n // Replace unsigned addresses by the new ones from the record\n // TODO: Once we have ttls for the addresses, we should merge these in\n updatedPeer = await this._store.patchOrCreate(peerId, {\n addresses: await filterMultiaddrs(peerId, multiaddrs, this._addressFilter, true),\n peerRecordEnvelope: envelope.marshal()\n })\n\n log(`stored provided peer record for ${peerRecord.peerId.toB58String()}`)\n } finally {\n log('consumePeerRecord release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, multiaddrs: updatedPeer.addresses.map(({ multiaddr }) => multiaddr) })\n\n return true\n }\n\n /**\n * @param {PeerId} peerId\n */\n async getRawEnvelope (peerId) {\n log('getRawEnvelope await read lock')\n const release = await this._store.lock.readLock()\n log('getRawEnvelope got read lock')\n\n try {\n const peer = await this._store.load(peerId)\n\n return peer.peerRecordEnvelope\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('getRawEnvelope release read lock')\n release()\n }\n }\n\n /**\n * Get an Envelope containing a PeerRecord for the given peer.\n * Returns undefined if no record exists.\n *\n * @param {PeerId} peerId\n */\n async getPeerRecord (peerId) {\n const raw = await this.getRawEnvelope(peerId)\n\n if (!raw) {\n return undefined\n }\n\n return Envelope.createFromProtobuf(raw)\n }\n\n /**\n * @param {PeerId} peerId\n */\n async get (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('get wait for read lock')\n const release = await this._store.lock.readLock()\n log('get got read lock')\n\n try {\n const peer = await this._store.load(peerId)\n\n return peer.addresses\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('get release read lock')\n release()\n }\n\n return []\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Multiaddr[]} multiaddrs\n */\n async set (peerId, multiaddrs) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!Array.isArray(multiaddrs)) {\n log.error('multiaddrs must be an array of Multiaddrs')\n throw errcode(new Error('multiaddrs must be an array of Multiaddrs'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('set await write lock')\n const release = await this._store.lock.writeLock()\n log('set got write lock')\n\n let hasPeer = false\n let updatedPeer\n\n try {\n const addresses = await filterMultiaddrs(peerId, multiaddrs, this._addressFilter)\n\n // No valid addresses found\n if (!addresses.length) {\n return\n }\n\n try {\n const peer = await this._store.load(peerId)\n hasPeer = true\n\n if (new Set([\n ...addresses.map(({ multiaddr }) => multiaddr.toString()),\n ...peer.addresses.map(({ multiaddr }) => multiaddr.toString())\n ]).size === peer.addresses.length && addresses.length === peer.addresses.length) {\n // not changing anything, no need to update\n return\n }\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n updatedPeer = await this._store.patchOrCreate(peerId, { addresses })\n\n log(`set multiaddrs for ${peerId.toB58String()}`)\n } finally {\n log('set release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, multiaddrs: updatedPeer.addresses.map(addr => addr.multiaddr) })\n\n // Notify the existence of a new peer\n if (!hasPeer) {\n this._emit('peer', peerId)\n }\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Multiaddr[]} multiaddrs\n */\n async add (peerId, multiaddrs) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!Array.isArray(multiaddrs)) {\n log.error('multiaddrs must be an array of Multiaddrs')\n throw errcode(new Error('multiaddrs must be an array of Multiaddrs'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('add await write lock')\n const release = await this._store.lock.writeLock()\n log('add got write lock')\n\n let hasPeer\n let updatedPeer\n\n try {\n const addresses = await filterMultiaddrs(peerId, multiaddrs, this._addressFilter)\n\n // No valid addresses found\n if (!addresses.length) {\n return\n }\n\n try {\n const peer = await this._store.load(peerId)\n hasPeer = true\n\n if (new Set([\n ...addresses.map(({ multiaddr }) => multiaddr.toString()),\n ...peer.addresses.map(({ multiaddr }) => multiaddr.toString())\n ]).size === peer.addresses.length) {\n return\n }\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n updatedPeer = await this._store.mergeOrCreate(peerId, { addresses })\n\n log(`added multiaddrs for ${peerId.toB58String()}`)\n } finally {\n log('set release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, multiaddrs: updatedPeer.addresses.map(addr => addr.multiaddr) })\n\n // Notify the existence of a new peer\n if (!hasPeer) {\n this._emit('peer', peerId)\n }\n }\n\n /**\n * @param {PeerId} peerId\n */\n async delete (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('delete await write lock')\n const release = await this._store.lock.writeLock()\n log('delete got write lock')\n\n let has\n\n try {\n has = await this._store.has(peerId)\n\n await this._store.patchOrCreate(peerId, {\n addresses: []\n })\n } finally {\n log('delete release write lock')\n release()\n }\n\n if (has) {\n this._emit(EVENT_NAME, { peerId, multiaddrs: [] })\n }\n }\n\n /**\n * @param {PeerId} peerId\n * @param {(addresses: Address[]) => Address[]} [addressSorter]\n */\n async getMultiaddrsForPeer (peerId, addressSorter = (ms) => ms) {\n const addresses = await this.get(peerId)\n\n return addressSorter(\n addresses\n ).map((address) => {\n const multiaddr = address.multiaddr\n\n const idString = multiaddr.getPeerId()\n if (idString && idString === peerId.toB58String()) return multiaddr\n\n return multiaddr.encapsulate(`/p2p/${peerId.toB58String()}`)\n })\n }\n}\n\n/**\n * @param {PeerId} peerId\n * @param {Multiaddr[]} multiaddrs\n * @param {(peerId: PeerId, multiaddr: Multiaddr) => Promise<boolean>} addressFilter\n * @param {boolean} isCertified\n */\nfunction filterMultiaddrs (peerId, multiaddrs, addressFilter, isCertified = false) {\n return pipe(\n multiaddrs,\n (source) => each(source, (multiaddr) => {\n if (!Multiaddr.isMultiaddr(multiaddr)) {\n log.error('multiaddr must be an instance of Multiaddr')\n throw errcode(new Error('multiaddr must be an instance of Multiaddr'), codes.ERR_INVALID_PARAMETERS)\n }\n }),\n (source) => filter(source, (multiaddr) => addressFilter(peerId, multiaddr)),\n (source) => map(source, (multiaddr) => {\n return {\n multiaddr: new Multiaddr(multiaddr.toString()),\n isCertified\n }\n }),\n (source) => all(source)\n )\n}\n\nmodule.exports = PeerStoreAddressBook\n","'use strict'\n\nconst debug = require('debug')\nconst { EventEmitter } = require('events')\nconst AddressBook = require('./address-book')\nconst KeyBook = require('./key-book')\nconst MetadataBook = require('./metadata-book')\nconst ProtoBook = require('./proto-book')\nconst Store = require('./store')\n\n/**\n * @typedef {import('./types').PeerStore} PeerStore\n * @typedef {import('./types').Peer} Peer\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n */\n\nconst log = Object.assign(debug('libp2p:peer-store'), {\n error: debug('libp2p:peer-store:err')\n})\n\n/**\n * An implementation of PeerStore that stores data in a Datastore\n *\n * @implements {PeerStore}\n */\nclass DefaultPeerStore extends EventEmitter {\n /**\n * @param {object} properties\n * @param {PeerId} properties.peerId\n * @param {import('interface-datastore').Datastore} properties.datastore\n * @param {(peerId: PeerId, multiaddr: Multiaddr) => Promise<boolean>} properties.addressFilter\n */\n constructor ({ peerId, datastore, addressFilter }) {\n super()\n\n this._peerId = peerId\n this._store = new Store(datastore)\n\n this.addressBook = new AddressBook(this.emit.bind(this), this._store, addressFilter)\n this.keyBook = new KeyBook(this.emit.bind(this), this._store)\n this.metadataBook = new MetadataBook(this.emit.bind(this), this._store)\n this.protoBook = new ProtoBook(this.emit.bind(this), this._store)\n }\n\n async * getPeers () {\n log('getPeers await read lock')\n const release = await this._store.lock.readLock()\n log('getPeers got read lock')\n\n try {\n for await (const peer of this._store.all()) {\n if (peer.id.toB58String() === this._peerId.toB58String()) {\n // Remove self peer if present\n continue\n }\n\n yield peer\n }\n } finally {\n log('getPeers release read lock')\n release()\n }\n }\n\n /**\n * Delete the information of the given peer in every book\n *\n * @param {PeerId} peerId\n */\n async delete (peerId) {\n log('delete await write lock')\n const release = await this._store.lock.writeLock()\n log('delete got write lock')\n\n try {\n await this._store.delete(peerId)\n } finally {\n log('delete release write lock')\n release()\n }\n }\n\n /**\n * Get the stored information of a given peer\n *\n * @param {PeerId} peerId\n */\n async get (peerId) {\n log('get await read lock')\n const release = await this._store.lock.readLock()\n log('get got read lock')\n\n try {\n return this._store.load(peerId)\n } finally {\n log('get release read lock')\n release()\n }\n }\n\n /**\n * Returns true if we have a record of the peer\n *\n * @param {PeerId} peerId\n */\n async has (peerId) {\n log('has await read lock')\n const release = await this._store.lock.readLock()\n log('has got read lock')\n\n try {\n return this._store.has(peerId)\n } finally {\n log('has release read lock')\n release()\n }\n }\n}\n\nmodule.exports = DefaultPeerStore\n","'use strict'\n\nconst debug = require('debug')\nconst errcode = require('err-code')\nconst { codes } = require('../errors')\nconst PeerId = require('peer-id')\nconst { equals: uint8arrayEquals } = require('uint8arrays/equals')\n\n/**\n * @typedef {import('./types').PeerStore} PeerStore\n * @typedef {import('./types').KeyBook} KeyBook\n * @typedef {import('libp2p-interfaces/src/keys/types').PublicKey} PublicKey\n */\n\nconst log = Object.assign(debug('libp2p:peer-store:key-book'), {\n error: debug('libp2p:peer-store:key-book:err')\n})\n\nconst EVENT_NAME = 'change:pubkey'\n\n/**\n * @implements {KeyBook}\n */\nclass PeerStoreKeyBook {\n /**\n * The KeyBook is responsible for keeping the known public keys of a peer.\n *\n * @param {PeerStore[\"emit\"]} emit\n * @param {import('./types').Store} store\n */\n constructor (emit, store) {\n this._emit = emit\n this._store = store\n }\n\n /**\n * Set the Peer public key\n *\n * @param {PeerId} peerId\n * @param {PublicKey} publicKey\n */\n async set (peerId, publicKey) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!publicKey) {\n log.error('publicKey must be an instance of PublicKey to store data')\n throw errcode(new Error('publicKey must be an instance of PublicKey'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('set await write lock')\n const release = await this._store.lock.writeLock()\n log('set got write lock')\n\n let updatedKey = false\n\n try {\n try {\n const existing = await this._store.load(peerId)\n\n if (existing.pubKey && uint8arrayEquals(existing.pubKey.bytes, publicKey.bytes)) {\n return\n }\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n await this._store.patchOrCreate(peerId, {\n pubKey: publicKey\n })\n updatedKey = true\n } finally {\n log('set release write lock')\n release()\n }\n\n if (updatedKey) {\n this._emit(EVENT_NAME, { peerId, pubKey: publicKey })\n }\n }\n\n /**\n * Get Public key of the given PeerId, if stored\n *\n * @param {PeerId} peerId\n */\n async get (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('get await write lock')\n const release = await this._store.lock.readLock()\n log('get got write lock')\n\n try {\n const peer = await this._store.load(peerId)\n\n return peer.pubKey\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('get release write lock')\n release()\n }\n }\n\n /**\n * @param {PeerId} peerId\n */\n async delete (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('delete await write lock')\n const release = await this._store.lock.writeLock()\n log('delete got write lock')\n\n try {\n await this._store.patchOrCreate(peerId, {\n pubKey: undefined\n })\n } finally {\n log('delete release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, pubKey: undefined })\n }\n}\n\nmodule.exports = PeerStoreKeyBook\n","'use strict'\n\nconst debug = require('debug')\nconst errcode = require('err-code')\nconst { codes } = require('../errors')\nconst PeerId = require('peer-id')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\n\nconst log = Object.assign(debug('libp2p:peer-store:metadata-book'), {\n error: debug('libp2p:peer-store:metadata-book:err')\n})\n\n/**\n * @typedef {import('./types').PeerStore} PeerStore\n * @typedef {import('./types').MetadataBook} MetadataBook\n */\n\nconst EVENT_NAME = 'change:metadata'\n\n/**\n * @implements {MetadataBook}\n */\nclass PeerStoreMetadataBook {\n /**\n * The MetadataBook is responsible for keeping the known supported\n * protocols of a peer\n *\n * @param {PeerStore[\"emit\"]} emit\n * @param {import('./types').Store} store\n */\n constructor (emit, store) {\n this._emit = emit\n this._store = store\n }\n\n /**\n * Get the known data of a provided peer\n *\n * @param {PeerId} peerId\n */\n async get (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('get await read lock')\n const release = await this._store.lock.readLock()\n log('get got read lock')\n\n try {\n const peer = await this._store.load(peerId)\n\n return peer.metadata\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('get release read lock')\n release()\n }\n\n return new Map()\n }\n\n /**\n * Get specific metadata value, if it exists\n *\n * @param {PeerId} peerId\n * @param {string} key\n */\n async getValue (peerId, key) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('getValue await read lock')\n const release = await this._store.lock.readLock()\n log('getValue got read lock')\n\n try {\n const peer = await this._store.load(peerId)\n\n return peer.metadata.get(key)\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('getValue release write lock')\n release()\n }\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Map<string, Uint8Array>} metadata\n */\n async set (peerId, metadata) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!metadata || !(metadata instanceof Map)) {\n log.error('valid metadata must be provided to store data')\n throw errcode(new Error('valid metadata must be provided'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('set await write lock')\n const release = await this._store.lock.writeLock()\n log('set got write lock')\n\n try {\n await this._store.mergeOrCreate(peerId, {\n metadata\n })\n } finally {\n log('set release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, metadata })\n }\n\n /**\n * Set metadata key and value of a provided peer\n *\n * @param {PeerId} peerId\n * @param {string} key - metadata key\n * @param {Uint8Array} value - metadata value\n */\n async setValue (peerId, key, value) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (typeof key !== 'string' || !(value instanceof Uint8Array)) {\n log.error('valid key and value must be provided to store data')\n throw errcode(new Error('valid key and value must be provided'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('setValue await write lock')\n const release = await this._store.lock.writeLock()\n log('setValue got write lock')\n\n let updatedPeer\n\n try {\n try {\n const existingPeer = await this._store.load(peerId)\n const existingValue = existingPeer.metadata.get(key)\n\n if (existingValue != null && uint8ArrayEquals(value, existingValue)) {\n return\n }\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n updatedPeer = await this._store.mergeOrCreate(peerId, {\n metadata: new Map([[key, value]])\n })\n } finally {\n log('setValue release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, metadata: updatedPeer.metadata })\n }\n\n /**\n * @param {PeerId} peerId\n */\n async delete (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('delete await write lock')\n const release = await this._store.lock.writeLock()\n log('delete got write lock')\n\n let has\n\n try {\n has = await this._store.has(peerId)\n\n if (has) {\n await this._store.patch(peerId, {\n metadata: new Map()\n })\n }\n } finally {\n log('delete release write lock')\n release()\n }\n\n if (has) {\n this._emit(EVENT_NAME, { peerId, metadata: new Map() })\n }\n }\n\n /**\n * @param {PeerId} peerId\n * @param {string} key\n */\n async deleteValue (peerId, key) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('deleteValue await write lock')\n const release = await this._store.lock.writeLock()\n log('deleteValue got write lock')\n\n let metadata\n\n try {\n const peer = await this._store.load(peerId)\n metadata = peer.metadata\n\n metadata.delete(key)\n\n await this._store.patch(peerId, {\n metadata\n })\n } catch (/** @type {any} **/ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('deleteValue release write lock')\n release()\n }\n\n if (metadata) {\n this._emit(EVENT_NAME, { peerId, metadata })\n }\n }\n}\n\nmodule.exports = PeerStoreMetadataBook\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-peer\"] || ($protobuf.roots[\"libp2p-peer\"] = {});\n\n$root.Peer = (function() {\n\n /**\n * Properties of a Peer.\n * @exports IPeer\n * @interface IPeer\n * @property {Array.<IAddress>|null} [addresses] Peer addresses\n * @property {Array.<string>|null} [protocols] Peer protocols\n * @property {Array.<IMetadata>|null} [metadata] Peer metadata\n * @property {Uint8Array|null} [pubKey] Peer pubKey\n * @property {Uint8Array|null} [peerRecordEnvelope] Peer peerRecordEnvelope\n */\n\n /**\n * Constructs a new Peer.\n * @exports Peer\n * @classdesc Represents a Peer.\n * @implements IPeer\n * @constructor\n * @param {IPeer=} [p] Properties to set\n */\n function Peer(p) {\n this.addresses = [];\n this.protocols = [];\n this.metadata = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Peer addresses.\n * @member {Array.<IAddress>} addresses\n * @memberof Peer\n * @instance\n */\n Peer.prototype.addresses = $util.emptyArray;\n\n /**\n * Peer protocols.\n * @member {Array.<string>} protocols\n * @memberof Peer\n * @instance\n */\n Peer.prototype.protocols = $util.emptyArray;\n\n /**\n * Peer metadata.\n * @member {Array.<IMetadata>} metadata\n * @memberof Peer\n * @instance\n */\n Peer.prototype.metadata = $util.emptyArray;\n\n /**\n * Peer pubKey.\n * @member {Uint8Array|null|undefined} pubKey\n * @memberof Peer\n * @instance\n */\n Peer.prototype.pubKey = null;\n\n /**\n * Peer peerRecordEnvelope.\n * @member {Uint8Array|null|undefined} peerRecordEnvelope\n * @memberof Peer\n * @instance\n */\n Peer.prototype.peerRecordEnvelope = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Peer _pubKey.\n * @member {\"pubKey\"|undefined} _pubKey\n * @memberof Peer\n * @instance\n */\n Object.defineProperty(Peer.prototype, \"_pubKey\", {\n get: $util.oneOfGetter($oneOfFields = [\"pubKey\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Peer _peerRecordEnvelope.\n * @member {\"peerRecordEnvelope\"|undefined} _peerRecordEnvelope\n * @memberof Peer\n * @instance\n */\n Object.defineProperty(Peer.prototype, \"_peerRecordEnvelope\", {\n get: $util.oneOfGetter($oneOfFields = [\"peerRecordEnvelope\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Peer message. Does not implicitly {@link Peer.verify|verify} messages.\n * @function encode\n * @memberof Peer\n * @static\n * @param {IPeer} m Peer message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Peer.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.addresses != null && m.addresses.length) {\n for (var i = 0; i < m.addresses.length; ++i)\n $root.Address.encode(m.addresses[i], w.uint32(10).fork()).ldelim();\n }\n if (m.protocols != null && m.protocols.length) {\n for (var i = 0; i < m.protocols.length; ++i)\n w.uint32(18).string(m.protocols[i]);\n }\n if (m.metadata != null && m.metadata.length) {\n for (var i = 0; i < m.metadata.length; ++i)\n $root.Metadata.encode(m.metadata[i], w.uint32(26).fork()).ldelim();\n }\n if (m.pubKey != null && Object.hasOwnProperty.call(m, \"pubKey\"))\n w.uint32(34).bytes(m.pubKey);\n if (m.peerRecordEnvelope != null && Object.hasOwnProperty.call(m, \"peerRecordEnvelope\"))\n w.uint32(42).bytes(m.peerRecordEnvelope);\n return w;\n };\n\n /**\n * Decodes a Peer message from the specified reader or buffer.\n * @function decode\n * @memberof Peer\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Peer} Peer\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Peer.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Peer();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n if (!(m.addresses && m.addresses.length))\n m.addresses = [];\n m.addresses.push($root.Address.decode(r, r.uint32()));\n break;\n case 2:\n if (!(m.protocols && m.protocols.length))\n m.protocols = [];\n m.protocols.push(r.string());\n break;\n case 3:\n if (!(m.metadata && m.metadata.length))\n m.metadata = [];\n m.metadata.push($root.Metadata.decode(r, r.uint32()));\n break;\n case 4:\n m.pubKey = r.bytes();\n break;\n case 5:\n m.peerRecordEnvelope = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Peer message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Peer\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Peer} Peer\n */\n Peer.fromObject = function fromObject(d) {\n if (d instanceof $root.Peer)\n return d;\n var m = new $root.Peer();\n if (d.addresses) {\n if (!Array.isArray(d.addresses))\n throw TypeError(\".Peer.addresses: array expected\");\n m.addresses = [];\n for (var i = 0; i < d.addresses.length; ++i) {\n if (typeof d.addresses[i] !== \"object\")\n throw TypeError(\".Peer.addresses: object expected\");\n m.addresses[i] = $root.Address.fromObject(d.addresses[i]);\n }\n }\n if (d.protocols) {\n if (!Array.isArray(d.protocols))\n throw TypeError(\".Peer.protocols: array expected\");\n m.protocols = [];\n for (var i = 0; i < d.protocols.length; ++i) {\n m.protocols[i] = String(d.protocols[i]);\n }\n }\n if (d.metadata) {\n if (!Array.isArray(d.metadata))\n throw TypeError(\".Peer.metadata: array expected\");\n m.metadata = [];\n for (var i = 0; i < d.metadata.length; ++i) {\n if (typeof d.metadata[i] !== \"object\")\n throw TypeError(\".Peer.metadata: object expected\");\n m.metadata[i] = $root.Metadata.fromObject(d.metadata[i]);\n }\n }\n if (d.pubKey != null) {\n if (typeof d.pubKey === \"string\")\n $util.base64.decode(d.pubKey, m.pubKey = $util.newBuffer($util.base64.length(d.pubKey)), 0);\n else if (d.pubKey.length)\n m.pubKey = d.pubKey;\n }\n if (d.peerRecordEnvelope != null) {\n if (typeof d.peerRecordEnvelope === \"string\")\n $util.base64.decode(d.peerRecordEnvelope, m.peerRecordEnvelope = $util.newBuffer($util.base64.length(d.peerRecordEnvelope)), 0);\n else if (d.peerRecordEnvelope.length)\n m.peerRecordEnvelope = d.peerRecordEnvelope;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Peer message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Peer\n * @static\n * @param {Peer} m Peer\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Peer.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.addresses = [];\n d.protocols = [];\n d.metadata = [];\n }\n if (m.addresses && m.addresses.length) {\n d.addresses = [];\n for (var j = 0; j < m.addresses.length; ++j) {\n d.addresses[j] = $root.Address.toObject(m.addresses[j], o);\n }\n }\n if (m.protocols && m.protocols.length) {\n d.protocols = [];\n for (var j = 0; j < m.protocols.length; ++j) {\n d.protocols[j] = m.protocols[j];\n }\n }\n if (m.metadata && m.metadata.length) {\n d.metadata = [];\n for (var j = 0; j < m.metadata.length; ++j) {\n d.metadata[j] = $root.Metadata.toObject(m.metadata[j], o);\n }\n }\n if (m.pubKey != null && m.hasOwnProperty(\"pubKey\")) {\n d.pubKey = o.bytes === String ? $util.base64.encode(m.pubKey, 0, m.pubKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.pubKey) : m.pubKey;\n if (o.oneofs)\n d._pubKey = \"pubKey\";\n }\n if (m.peerRecordEnvelope != null && m.hasOwnProperty(\"peerRecordEnvelope\")) {\n d.peerRecordEnvelope = o.bytes === String ? $util.base64.encode(m.peerRecordEnvelope, 0, m.peerRecordEnvelope.length) : o.bytes === Array ? Array.prototype.slice.call(m.peerRecordEnvelope) : m.peerRecordEnvelope;\n if (o.oneofs)\n d._peerRecordEnvelope = \"peerRecordEnvelope\";\n }\n return d;\n };\n\n /**\n * Converts this Peer to JSON.\n * @function toJSON\n * @memberof Peer\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Peer.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Peer;\n})();\n\n$root.Address = (function() {\n\n /**\n * Properties of an Address.\n * @exports IAddress\n * @interface IAddress\n * @property {Uint8Array|null} [multiaddr] Address multiaddr\n * @property {boolean|null} [isCertified] Address isCertified\n */\n\n /**\n * Constructs a new Address.\n * @exports Address\n * @classdesc Represents an Address.\n * @implements IAddress\n * @constructor\n * @param {IAddress=} [p] Properties to set\n */\n function Address(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Address multiaddr.\n * @member {Uint8Array} multiaddr\n * @memberof Address\n * @instance\n */\n Address.prototype.multiaddr = $util.newBuffer([]);\n\n /**\n * Address isCertified.\n * @member {boolean|null|undefined} isCertified\n * @memberof Address\n * @instance\n */\n Address.prototype.isCertified = null;\n\n // OneOf field names bound to virtual getters and setters\n var $oneOfFields;\n\n /**\n * Address _isCertified.\n * @member {\"isCertified\"|undefined} _isCertified\n * @memberof Address\n * @instance\n */\n Object.defineProperty(Address.prototype, \"_isCertified\", {\n get: $util.oneOfGetter($oneOfFields = [\"isCertified\"]),\n set: $util.oneOfSetter($oneOfFields)\n });\n\n /**\n * Encodes the specified Address message. Does not implicitly {@link Address.verify|verify} messages.\n * @function encode\n * @memberof Address\n * @static\n * @param {IAddress} m Address message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Address.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.multiaddr != null && Object.hasOwnProperty.call(m, \"multiaddr\"))\n w.uint32(10).bytes(m.multiaddr);\n if (m.isCertified != null && Object.hasOwnProperty.call(m, \"isCertified\"))\n w.uint32(16).bool(m.isCertified);\n return w;\n };\n\n /**\n * Decodes an Address message from the specified reader or buffer.\n * @function decode\n * @memberof Address\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Address} Address\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Address.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Address();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.multiaddr = r.bytes();\n break;\n case 2:\n m.isCertified = r.bool();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates an Address message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Address\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Address} Address\n */\n Address.fromObject = function fromObject(d) {\n if (d instanceof $root.Address)\n return d;\n var m = new $root.Address();\n if (d.multiaddr != null) {\n if (typeof d.multiaddr === \"string\")\n $util.base64.decode(d.multiaddr, m.multiaddr = $util.newBuffer($util.base64.length(d.multiaddr)), 0);\n else if (d.multiaddr.length)\n m.multiaddr = d.multiaddr;\n }\n if (d.isCertified != null) {\n m.isCertified = Boolean(d.isCertified);\n }\n return m;\n };\n\n /**\n * Creates a plain object from an Address message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Address\n * @static\n * @param {Address} m Address\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Address.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.multiaddr = \"\";\n else {\n d.multiaddr = [];\n if (o.bytes !== Array)\n d.multiaddr = $util.newBuffer(d.multiaddr);\n }\n }\n if (m.multiaddr != null && m.hasOwnProperty(\"multiaddr\")) {\n d.multiaddr = o.bytes === String ? $util.base64.encode(m.multiaddr, 0, m.multiaddr.length) : o.bytes === Array ? Array.prototype.slice.call(m.multiaddr) : m.multiaddr;\n }\n if (m.isCertified != null && m.hasOwnProperty(\"isCertified\")) {\n d.isCertified = m.isCertified;\n if (o.oneofs)\n d._isCertified = \"isCertified\";\n }\n return d;\n };\n\n /**\n * Converts this Address to JSON.\n * @function toJSON\n * @memberof Address\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Address.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Address;\n})();\n\n$root.Metadata = (function() {\n\n /**\n * Properties of a Metadata.\n * @exports IMetadata\n * @interface IMetadata\n * @property {string|null} [key] Metadata key\n * @property {Uint8Array|null} [value] Metadata value\n */\n\n /**\n * Constructs a new Metadata.\n * @exports Metadata\n * @classdesc Represents a Metadata.\n * @implements IMetadata\n * @constructor\n * @param {IMetadata=} [p] Properties to set\n */\n function Metadata(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Metadata key.\n * @member {string} key\n * @memberof Metadata\n * @instance\n */\n Metadata.prototype.key = \"\";\n\n /**\n * Metadata value.\n * @member {Uint8Array} value\n * @memberof Metadata\n * @instance\n */\n Metadata.prototype.value = $util.newBuffer([]);\n\n /**\n * Encodes the specified Metadata message. Does not implicitly {@link Metadata.verify|verify} messages.\n * @function encode\n * @memberof Metadata\n * @static\n * @param {IMetadata} m Metadata message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Metadata.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.key != null && Object.hasOwnProperty.call(m, \"key\"))\n w.uint32(10).string(m.key);\n if (m.value != null && Object.hasOwnProperty.call(m, \"value\"))\n w.uint32(18).bytes(m.value);\n return w;\n };\n\n /**\n * Decodes a Metadata message from the specified reader or buffer.\n * @function decode\n * @memberof Metadata\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Metadata} Metadata\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Metadata.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Metadata();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.key = r.string();\n break;\n case 2:\n m.value = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a Metadata message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Metadata\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Metadata} Metadata\n */\n Metadata.fromObject = function fromObject(d) {\n if (d instanceof $root.Metadata)\n return d;\n var m = new $root.Metadata();\n if (d.key != null) {\n m.key = String(d.key);\n }\n if (d.value != null) {\n if (typeof d.value === \"string\")\n $util.base64.decode(d.value, m.value = $util.newBuffer($util.base64.length(d.value)), 0);\n else if (d.value.length)\n m.value = d.value;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a Metadata message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Metadata\n * @static\n * @param {Metadata} m Metadata\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Metadata.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n d.key = \"\";\n if (o.bytes === String)\n d.value = \"\";\n else {\n d.value = [];\n if (o.bytes !== Array)\n d.value = $util.newBuffer(d.value);\n }\n }\n if (m.key != null && m.hasOwnProperty(\"key\")) {\n d.key = m.key;\n }\n if (m.value != null && m.hasOwnProperty(\"value\")) {\n d.value = o.bytes === String ? $util.base64.encode(m.value, 0, m.value.length) : o.bytes === Array ? Array.prototype.slice.call(m.value) : m.value;\n }\n return d;\n };\n\n /**\n * Converts this Metadata to JSON.\n * @function toJSON\n * @memberof Metadata\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Metadata.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Metadata;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst debug = require('debug')\nconst errcode = require('err-code')\nconst { codes } = require('../errors')\nconst PeerId = require('peer-id')\n\n/**\n * @typedef {import('./types').PeerStore} PeerStore\n * @typedef {import('./types').ProtoBook} ProtoBook\n */\n\nconst log = Object.assign(debug('libp2p:peer-store:proto-book'), {\n error: debug('libp2p:peer-store:proto-book:err')\n})\n\nconst EVENT_NAME = 'change:protocols'\n\n/**\n * @implements {ProtoBook}\n */\nclass PersistentProtoBook {\n /**\n * @param {PeerStore[\"emit\"]} emit\n * @param {import('./types').Store} store\n */\n constructor (emit, store) {\n this._emit = emit\n this._store = store\n }\n\n /**\n * @param {PeerId} peerId\n */\n async get (peerId) {\n log('get wait for read lock')\n const release = await this._store.lock.readLock()\n log('get got read lock')\n\n try {\n const peer = await this._store.load(peerId)\n\n return peer.protocols\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('get release read lock')\n release()\n }\n\n return []\n }\n\n /**\n * @param {PeerId} peerId\n * @param {string[]} protocols\n */\n async set (peerId, protocols) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!Array.isArray(protocols)) {\n log.error('protocols must be provided to store data')\n throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('set await write lock')\n const release = await this._store.lock.writeLock()\n log('set got write lock')\n\n let updatedPeer\n\n try {\n try {\n const peer = await this._store.load(peerId)\n\n if (new Set([\n ...protocols\n ]).size === peer.protocols.length) {\n return\n }\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n updatedPeer = await this._store.patchOrCreate(peerId, {\n protocols\n })\n\n log(`stored provided protocols for ${peerId.toB58String()}`)\n } finally {\n log('set release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols })\n }\n\n /**\n * @param {PeerId} peerId\n * @param {string[]} protocols\n */\n async add (peerId, protocols) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!Array.isArray(protocols)) {\n log.error('protocols must be provided to store data')\n throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('add await write lock')\n const release = await this._store.lock.writeLock()\n log('add got write lock')\n\n let updatedPeer\n\n try {\n try {\n const peer = await this._store.load(peerId)\n\n if (new Set([\n ...peer.protocols,\n ...protocols\n ]).size === peer.protocols.length) {\n return\n }\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n updatedPeer = await this._store.mergeOrCreate(peerId, {\n protocols\n })\n\n log(`added provided protocols for ${peerId.toB58String()}`)\n } finally {\n log('add release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols })\n }\n\n /**\n * @param {PeerId} peerId\n * @param {string[]} protocols\n */\n async remove (peerId, protocols) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n if (!Array.isArray(protocols)) {\n log.error('protocols must be provided to store data')\n throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS)\n }\n\n log('remove await write lock')\n const release = await this._store.lock.writeLock()\n log('remove got write lock')\n\n let updatedPeer\n\n try {\n try {\n const peer = await this._store.load(peerId)\n const protocolSet = new Set(peer.protocols)\n\n for (const protocol of protocols) {\n protocolSet.delete(protocol)\n }\n\n if (peer.protocols.length === protocolSet.size) {\n return\n }\n\n protocols = Array.from(protocolSet)\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n }\n\n updatedPeer = await this._store.patchOrCreate(peerId, {\n protocols\n })\n } finally {\n log('remove release write lock')\n release()\n }\n\n this._emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols })\n }\n\n /**\n * @param {PeerId} peerId\n */\n async delete (peerId) {\n log('delete await write lock')\n const release = await this._store.lock.writeLock()\n log('delete got write lock')\n let has\n\n try {\n has = await this._store.has(peerId)\n\n await this._store.patchOrCreate(peerId, {\n protocols: []\n })\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n } finally {\n log('delete release write lock')\n release()\n }\n\n if (has) {\n this._emit(EVENT_NAME, { peerId, protocols: [] })\n }\n }\n}\n\nmodule.exports = PersistentProtoBook\n","'use strict'\n\nconst debug = require('debug')\nconst PeerId = require('peer-id')\nconst errcode = require('err-code')\nconst { codes } = require('../errors')\nconst { Key } = require('interface-datastore/key')\nconst { base32 } = require('multiformats/bases/base32')\nconst { keys: { unmarshalPublicKey, marshalPublicKey } } = require('libp2p-crypto')\nconst { Multiaddr } = require('multiaddr')\nconst { Peer: PeerPB } = require('./pb/peer')\n// @ts-expect-error no types\nconst mortice = require('mortice')\nconst { equals: uint8arrayEquals } = require('uint8arrays/equals')\n\nconst log = Object.assign(debug('libp2p:peer-store:store'), {\n error: debug('libp2p:peer-store:store:err')\n})\n\n/**\n * @typedef {import('./types').PeerStore} PeerStore\n * @typedef {import('./types').EventName} EventName\n * @typedef {import('./types').Peer} Peer\n */\n\nconst NAMESPACE_COMMON = '/peers/'\n\nclass PersistentStore {\n /**\n * @param {import('interface-datastore').Datastore} datastore\n */\n constructor (datastore) {\n this._datastore = datastore\n this.lock = mortice('peer-store', {\n singleProcess: true\n })\n }\n\n /**\n * @param {PeerId} peerId\n * @returns {Key}\n */\n _peerIdToDatastoreKey (peerId) {\n if (!PeerId.isPeerId(peerId)) {\n log.error('peerId must be an instance of peer-id to store data')\n throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS)\n }\n\n const b32key = peerId.toString()\n return new Key(`${NAMESPACE_COMMON}${b32key}`)\n }\n\n /**\n * @param {PeerId} peerId\n */\n async has (peerId) {\n return this._datastore.has(this._peerIdToDatastoreKey(peerId))\n }\n\n /**\n * @param {PeerId} peerId\n */\n async delete (peerId) {\n await this._datastore.delete(this._peerIdToDatastoreKey(peerId))\n }\n\n /**\n * @param {PeerId} peerId\n * @returns {Promise<import('./types').Peer>} peer\n */\n async load (peerId) {\n const buf = await this._datastore.get(this._peerIdToDatastoreKey(peerId))\n const peer = PeerPB.decode(buf)\n const pubKey = peer.pubKey ? unmarshalPublicKey(peer.pubKey) : peerId.pubKey\n const metadata = new Map()\n\n for (const meta of peer.metadata) {\n metadata.set(meta.key, meta.value)\n }\n\n return {\n ...peer,\n id: peerId,\n pubKey,\n addresses: peer.addresses.map(({ multiaddr, isCertified }) => ({\n multiaddr: new Multiaddr(multiaddr),\n isCertified: isCertified || false\n })),\n metadata,\n peerRecordEnvelope: peer.peerRecordEnvelope || undefined\n }\n }\n\n /**\n * @param {Peer} peer\n */\n async save (peer) {\n if (peer.pubKey != null && peer.id.pubKey != null && !uint8arrayEquals(peer.pubKey.bytes, peer.id.pubKey.bytes)) {\n log.error('peer publicKey bytes do not match peer id publicKey bytes')\n throw errcode(new Error('publicKey bytes do not match peer id publicKey bytes'), codes.ERR_INVALID_PARAMETERS)\n }\n\n // dedupe addresses\n const addressSet = new Set()\n\n const buf = PeerPB.encode({\n addresses: peer.addresses\n .filter(address => {\n if (addressSet.has(address.multiaddr.toString())) {\n return false\n }\n\n addressSet.add(address.multiaddr.toString())\n return true\n })\n .sort((a, b) => {\n return a.multiaddr.toString().localeCompare(b.multiaddr.toString())\n })\n .map(({ multiaddr, isCertified }) => ({\n multiaddr: multiaddr.bytes,\n isCertified\n })),\n protocols: peer.protocols.sort(),\n pubKey: peer.pubKey ? marshalPublicKey(peer.pubKey) : undefined,\n metadata: [...peer.metadata.keys()].sort().map(key => ({ key, value: peer.metadata.get(key) })),\n peerRecordEnvelope: peer.peerRecordEnvelope\n }).finish()\n\n await this._datastore.put(this._peerIdToDatastoreKey(peer.id), buf)\n\n return this.load(peer.id)\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Partial<Peer>} data\n */\n async patch (peerId, data) {\n const peer = await this.load(peerId)\n\n return await this._patch(peerId, data, peer)\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Partial<Peer>} data\n */\n async patchOrCreate (peerId, data) {\n /** @type {Peer} */\n let peer\n\n try {\n peer = await this.load(peerId)\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n\n peer = { id: peerId, addresses: [], protocols: [], metadata: new Map() }\n }\n\n return await this._patch(peerId, data, peer)\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Partial<Peer>} data\n * @param {Peer} peer\n */\n async _patch (peerId, data, peer) {\n return await this.save({\n ...peer,\n ...data,\n id: peerId\n })\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Partial<Peer>} data\n */\n async merge (peerId, data) {\n const peer = await this.load(peerId)\n\n return this._merge(peerId, data, peer)\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Partial<Peer>} data\n */\n async mergeOrCreate (peerId, data) {\n /** @type {Peer} */\n let peer\n\n try {\n peer = await this.load(peerId)\n } catch (/** @type {any} */ err) {\n if (err.code !== codes.ERR_NOT_FOUND) {\n throw err\n }\n\n peer = { id: peerId, addresses: [], protocols: [], metadata: new Map() }\n }\n\n return await this._merge(peerId, data, peer)\n }\n\n /**\n * @param {PeerId} peerId\n * @param {Partial<Peer>} data\n * @param {Peer} peer\n */\n async _merge (peerId, data, peer) {\n // if the peer has certified addresses, use those in\n // favour of the supplied versions\n /** @type {Map<string, boolean>} */\n const addresses = new Map()\n\n ;(data.addresses || []).forEach(addr => {\n addresses.set(addr.multiaddr.toString(), addr.isCertified)\n })\n\n peer.addresses.forEach(({ multiaddr, isCertified }) => {\n const addrStr = multiaddr.toString()\n addresses.set(addrStr, Boolean(addresses.get(addrStr) || isCertified))\n })\n\n return await this.save({\n id: peerId,\n addresses: Array.from(addresses.entries()).map(([addrStr, isCertified]) => {\n return {\n multiaddr: new Multiaddr(addrStr),\n isCertified\n }\n }),\n protocols: Array.from(new Set([\n ...(peer.protocols || []),\n ...(data.protocols || [])\n ])),\n metadata: new Map([\n ...(peer.metadata ? peer.metadata.entries() : []),\n ...(data.metadata ? data.metadata.entries() : [])\n ]),\n pubKey: data.pubKey || (peer != null ? peer.pubKey : undefined),\n peerRecordEnvelope: data.peerRecordEnvelope || (peer != null ? peer.peerRecordEnvelope : undefined)\n })\n }\n\n async * all () {\n for await (const key of this._datastore.queryKeys({\n prefix: NAMESPACE_COMMON\n })) {\n // /peers/${peer-id-as-libp2p-key-cid-string-in-base-32}\n const base32Str = key.toString().split('/')[2]\n const buf = base32.decode(base32Str)\n\n yield this.load(PeerId.createFromBytes(buf))\n }\n }\n}\n\nmodule.exports = PersistentStore\n","'use strict'\n\nmodule.exports = {\n PROTOCOL: '/ipfs/ping/1.0.0', // deprecated\n PING_LENGTH: 32,\n PROTOCOL_VERSION: '1.0.0',\n PROTOCOL_NAME: 'ping'\n}\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:ping'), {\n error: debug('libp2p:ping:err')\n})\nconst errCode = require('err-code')\nconst { codes } = require('../errors')\nconst crypto = require('libp2p-crypto')\nconst { pipe } = require('it-pipe')\n// @ts-ignore it-buffer has no types exported\nconst { toBuffer } = require('it-buffer')\nconst { collect, take } = require('streaming-iterables')\nconst { equals } = require('uint8arrays/equals')\n\nconst { PROTOCOL_NAME, PING_LENGTH, PROTOCOL_VERSION } = require('./constants')\n\n/**\n * @typedef {import('../')} Libp2p\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n */\n\nclass PingService {\n /**\n * @param {import('../')} libp2p\n */\n static getProtocolStr (libp2p) {\n return `/${libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`\n }\n\n /**\n * @param {Libp2p} libp2p\n */\n constructor (libp2p) {\n this._libp2p = libp2p\n }\n\n /**\n * A handler to register with Libp2p to process ping messages\n *\n * @param {Object} options\n * @param {MuxedStream} options.stream\n */\n handleMessage ({ stream }) {\n return pipe(stream, stream)\n }\n\n /**\n * Ping a given peer and wait for its response, getting the operation latency.\n *\n * @param {PeerId|Multiaddr} peer\n * @returns {Promise<number>}\n */\n async ping (peer) {\n const protocol = `/${this._libp2p._config.protocolPrefix}/${PROTOCOL_NAME}/${PROTOCOL_VERSION}`\n // @ts-ignore multiaddr might not have toB58String\n log('dialing %s to %s', protocol, peer.toB58String ? peer.toB58String() : peer)\n\n const connection = await this._libp2p.dial(peer)\n const { stream } = await connection.newStream(protocol)\n\n const start = Date.now()\n const data = crypto.randomBytes(PING_LENGTH)\n\n const [result] = await pipe(\n [data],\n stream,\n (/** @type {MuxedStream} */ stream) => take(1, stream),\n toBuffer,\n collect\n )\n const end = Date.now()\n\n if (!equals(data, result)) {\n throw errCode(new Error('Received wrong ping ack'), codes.ERR_WRONG_PING_ACK)\n }\n\n return end - start\n }\n}\n\nmodule.exports = PingService\n","'use strict'\n\n// Pubsub adapter to keep API with handlers while not removed.\n/**\n * @typedef {import('libp2p-interfaces/src/pubsub').InMessage} InMessage\n * @typedef {import('libp2p-interfaces/src/pubsub')} PubsubRouter\n */\n\n/**\n * @param {{new(...args: any[]): PubsubRouter}} PubsubRouter\n * @param {import('.')} libp2p\n * @param {{ enabled: boolean; } & import(\".\").PubsubLocalOptions & import(\"libp2p-interfaces/src/pubsub\").PubsubOptions} options\n */\nfunction pubsubAdapter (PubsubRouter, libp2p, options) {\n /** @type {PubsubRouter & { _subscribeAdapter: PubsubRouter['subscribe'], _unsubscribeAdapter: PubsubRouter['unsubscribe'] }} */\n // @ts-ignore we set the extra _subscribeAdapter and _unsubscribeAdapter properties afterwards\n const pubsub = new PubsubRouter(libp2p, options)\n pubsub._subscribeAdapter = pubsub.subscribe\n pubsub._unsubscribeAdapter = pubsub.unsubscribe\n\n /**\n * Subscribes to a given topic.\n *\n * @override\n * @param {string} topic\n * @param {(msg: InMessage) => void} [handler]\n * @returns {void}\n */\n function subscribe (topic, handler) {\n // Bind provided handler\n handler && pubsub.on(topic, handler)\n pubsub._subscribeAdapter(topic)\n }\n\n /**\n * Unsubscribe from the given topic.\n *\n * @override\n * @param {string} topic\n * @param {(msg: InMessage) => void} [handler]\n * @returns {void}\n */\n function unsubscribe (topic, handler) {\n if (!handler) {\n pubsub.removeAllListeners(topic)\n } else {\n pubsub.removeListener(topic, handler)\n }\n\n if (pubsub.listenerCount(topic) === 0) {\n pubsub._unsubscribeAdapter(topic)\n }\n }\n\n pubsub.subscribe = subscribe\n pubsub.unsubscribe = unsubscribe\n\n return pubsub\n}\n\nmodule.exports = pubsubAdapter\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-envelope\"] || ($protobuf.roots[\"libp2p-envelope\"] = {});\n\n$root.Envelope = (function() {\n\n /**\n * Properties of an Envelope.\n * @exports IEnvelope\n * @interface IEnvelope\n * @property {Uint8Array|null} [publicKey] Envelope publicKey\n * @property {Uint8Array|null} [payloadType] Envelope payloadType\n * @property {Uint8Array|null} [payload] Envelope payload\n * @property {Uint8Array|null} [signature] Envelope signature\n */\n\n /**\n * Constructs a new Envelope.\n * @exports Envelope\n * @classdesc Represents an Envelope.\n * @implements IEnvelope\n * @constructor\n * @param {IEnvelope=} [p] Properties to set\n */\n function Envelope(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * Envelope publicKey.\n * @member {Uint8Array} publicKey\n * @memberof Envelope\n * @instance\n */\n Envelope.prototype.publicKey = $util.newBuffer([]);\n\n /**\n * Envelope payloadType.\n * @member {Uint8Array} payloadType\n * @memberof Envelope\n * @instance\n */\n Envelope.prototype.payloadType = $util.newBuffer([]);\n\n /**\n * Envelope payload.\n * @member {Uint8Array} payload\n * @memberof Envelope\n * @instance\n */\n Envelope.prototype.payload = $util.newBuffer([]);\n\n /**\n * Envelope signature.\n * @member {Uint8Array} signature\n * @memberof Envelope\n * @instance\n */\n Envelope.prototype.signature = $util.newBuffer([]);\n\n /**\n * Encodes the specified Envelope message. Does not implicitly {@link Envelope.verify|verify} messages.\n * @function encode\n * @memberof Envelope\n * @static\n * @param {IEnvelope} m Envelope message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n Envelope.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.publicKey != null && Object.hasOwnProperty.call(m, \"publicKey\"))\n w.uint32(10).bytes(m.publicKey);\n if (m.payloadType != null && Object.hasOwnProperty.call(m, \"payloadType\"))\n w.uint32(18).bytes(m.payloadType);\n if (m.payload != null && Object.hasOwnProperty.call(m, \"payload\"))\n w.uint32(26).bytes(m.payload);\n if (m.signature != null && Object.hasOwnProperty.call(m, \"signature\"))\n w.uint32(42).bytes(m.signature);\n return w;\n };\n\n /**\n * Decodes an Envelope message from the specified reader or buffer.\n * @function decode\n * @memberof Envelope\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {Envelope} Envelope\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n Envelope.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.Envelope();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.publicKey = r.bytes();\n break;\n case 2:\n m.payloadType = r.bytes();\n break;\n case 3:\n m.payload = r.bytes();\n break;\n case 5:\n m.signature = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates an Envelope message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof Envelope\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {Envelope} Envelope\n */\n Envelope.fromObject = function fromObject(d) {\n if (d instanceof $root.Envelope)\n return d;\n var m = new $root.Envelope();\n if (d.publicKey != null) {\n if (typeof d.publicKey === \"string\")\n $util.base64.decode(d.publicKey, m.publicKey = $util.newBuffer($util.base64.length(d.publicKey)), 0);\n else if (d.publicKey.length)\n m.publicKey = d.publicKey;\n }\n if (d.payloadType != null) {\n if (typeof d.payloadType === \"string\")\n $util.base64.decode(d.payloadType, m.payloadType = $util.newBuffer($util.base64.length(d.payloadType)), 0);\n else if (d.payloadType.length)\n m.payloadType = d.payloadType;\n }\n if (d.payload != null) {\n if (typeof d.payload === \"string\")\n $util.base64.decode(d.payload, m.payload = $util.newBuffer($util.base64.length(d.payload)), 0);\n else if (d.payload.length)\n m.payload = d.payload;\n }\n if (d.signature != null) {\n if (typeof d.signature === \"string\")\n $util.base64.decode(d.signature, m.signature = $util.newBuffer($util.base64.length(d.signature)), 0);\n else if (d.signature.length)\n m.signature = d.signature;\n }\n return m;\n };\n\n /**\n * Creates a plain object from an Envelope message. Also converts values to other types if specified.\n * @function toObject\n * @memberof Envelope\n * @static\n * @param {Envelope} m Envelope\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n Envelope.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.publicKey = \"\";\n else {\n d.publicKey = [];\n if (o.bytes !== Array)\n d.publicKey = $util.newBuffer(d.publicKey);\n }\n if (o.bytes === String)\n d.payloadType = \"\";\n else {\n d.payloadType = [];\n if (o.bytes !== Array)\n d.payloadType = $util.newBuffer(d.payloadType);\n }\n if (o.bytes === String)\n d.payload = \"\";\n else {\n d.payload = [];\n if (o.bytes !== Array)\n d.payload = $util.newBuffer(d.payload);\n }\n if (o.bytes === String)\n d.signature = \"\";\n else {\n d.signature = [];\n if (o.bytes !== Array)\n d.signature = $util.newBuffer(d.signature);\n }\n }\n if (m.publicKey != null && m.hasOwnProperty(\"publicKey\")) {\n d.publicKey = o.bytes === String ? $util.base64.encode(m.publicKey, 0, m.publicKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.publicKey) : m.publicKey;\n }\n if (m.payloadType != null && m.hasOwnProperty(\"payloadType\")) {\n d.payloadType = o.bytes === String ? $util.base64.encode(m.payloadType, 0, m.payloadType.length) : o.bytes === Array ? Array.prototype.slice.call(m.payloadType) : m.payloadType;\n }\n if (m.payload != null && m.hasOwnProperty(\"payload\")) {\n d.payload = o.bytes === String ? $util.base64.encode(m.payload, 0, m.payload.length) : o.bytes === Array ? Array.prototype.slice.call(m.payload) : m.payload;\n }\n if (m.signature != null && m.hasOwnProperty(\"signature\")) {\n d.signature = o.bytes === String ? $util.base64.encode(m.signature, 0, m.signature.length) : o.bytes === Array ? Array.prototype.slice.call(m.signature) : m.signature;\n }\n return d;\n };\n\n /**\n * Converts this Envelope to JSON.\n * @function toJSON\n * @memberof Envelope\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n Envelope.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return Envelope;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst errCode = require('err-code')\nconst { concat: uint8arraysConcat } = require('uint8arrays/concat')\nconst { fromString: uint8arraysFromString } = require('uint8arrays/from-string')\n// @ts-ignore libp2p-crypto does not support types\nconst cryptoKeys = require('libp2p-crypto/src/keys')\nconst PeerId = require('peer-id')\nconst varint = require('varint')\nconst { equals: uint8arraysEquals } = require('uint8arrays/equals')\n\nconst { codes } = require('../../errors')\nconst { Envelope: Protobuf } = require('./envelope')\n\n/**\n * @typedef {import('libp2p-interfaces/src/record/types').Record} Record\n */\n\nclass Envelope {\n /**\n * The Envelope is responsible for keeping an arbitrary signed record\n * by a libp2p peer.\n *\n * @class\n * @param {object} params\n * @param {PeerId} params.peerId\n * @param {Uint8Array} params.payloadType\n * @param {Uint8Array} params.payload - marshaled record\n * @param {Uint8Array} params.signature - signature of the domain string :: type hint :: payload.\n */\n constructor ({ peerId, payloadType, payload, signature }) {\n this.peerId = peerId\n this.payloadType = payloadType\n this.payload = payload\n this.signature = signature\n\n // Cache\n this._marshal = undefined\n }\n\n /**\n * Marshal the envelope content.\n *\n * @returns {Uint8Array}\n */\n marshal () {\n if (this._marshal) {\n return this._marshal\n }\n\n const publicKey = cryptoKeys.marshalPublicKey(this.peerId.pubKey)\n\n this._marshal = Protobuf.encode({\n publicKey: publicKey,\n payloadType: this.payloadType,\n payload: this.payload,\n signature: this.signature\n }).finish()\n\n return this._marshal\n }\n\n /**\n * Verifies if the other Envelope is identical to this one.\n *\n * @param {Envelope} other\n * @returns {boolean}\n */\n equals (other) {\n return uint8arraysEquals(this.peerId.pubKey.bytes, other.peerId.pubKey.bytes) &&\n uint8arraysEquals(this.payloadType, other.payloadType) &&\n uint8arraysEquals(this.payload, other.payload) &&\n uint8arraysEquals(this.signature, other.signature)\n }\n\n /**\n * Validate envelope data signature for the given domain.\n *\n * @param {string} domain\n * @returns {Promise<boolean>}\n */\n validate (domain) {\n const signData = formatSignaturePayload(domain, this.payloadType, this.payload)\n\n return this.peerId.pubKey.verify(signData, this.signature)\n }\n}\n\n/**\n * Helper function that prepares a Uint8Array to sign or verify a signature.\n *\n * @param {string} domain\n * @param {Uint8Array} payloadType\n * @param {Uint8Array} payload\n * @returns {Uint8Array}\n */\nconst formatSignaturePayload = (domain, payloadType, payload) => {\n // When signing, a peer will prepare a Uint8Array by concatenating the following:\n // - The length of the domain separation string string in bytes\n // - The domain separation string, encoded as UTF-8\n // - The length of the payload_type field in bytes\n // - The value of the payload_type field\n // - The length of the payload field in bytes\n // - The value of the payload field\n\n const domainUint8Array = uint8arraysFromString(domain)\n const domainLength = varint.encode(domainUint8Array.byteLength)\n const payloadTypeLength = varint.encode(payloadType.length)\n const payloadLength = varint.encode(payload.length)\n\n return uint8arraysConcat([\n new Uint8Array(domainLength),\n domainUint8Array,\n new Uint8Array(payloadTypeLength),\n payloadType,\n new Uint8Array(payloadLength),\n payload\n ])\n}\n\n/**\n * Unmarshal a serialized Envelope protobuf message.\n *\n * @param {Uint8Array} data\n * @returns {Promise<Envelope>}\n */\nEnvelope.createFromProtobuf = async (data) => {\n const envelopeData = Protobuf.decode(data)\n const peerId = await PeerId.createFromPubKey(envelopeData.publicKey)\n\n return new Envelope({\n peerId,\n payloadType: envelopeData.payloadType,\n payload: envelopeData.payload,\n signature: envelopeData.signature\n })\n}\n\n/**\n * Seal marshals the given Record, places the marshaled bytes inside an Envelope\n * and signs it with the given peerId's private key.\n *\n * @async\n * @param {Record} record\n * @param {PeerId} peerId\n * @returns {Promise<Envelope>}\n */\nEnvelope.seal = async (record, peerId) => {\n const domain = record.domain\n const payloadType = record.codec\n const payload = record.marshal()\n\n const signData = formatSignaturePayload(domain, payloadType, payload)\n const signature = await peerId.privKey.sign(signData)\n\n return new Envelope({\n peerId,\n payloadType,\n payload,\n signature\n })\n}\n\n/**\n * Open and certify a given marshalled envelope.\n * Data is unmarshalled and the signature validated for the given domain.\n *\n * @param {Uint8Array} data\n * @param {string} domain\n * @returns {Promise<Envelope>}\n */\nEnvelope.openAndCertify = async (data, domain) => {\n const envelope = await Envelope.createFromProtobuf(data)\n const valid = await envelope.validate(domain)\n\n if (!valid) {\n throw errCode(new Error('envelope signature is not valid for the given domain'), codes.ERR_SIGNATURE_NOT_VALID)\n }\n\n return envelope\n}\n\nmodule.exports = Envelope\n","'use strict'\n\n// The domain string used for peer records contained in a Envelope.\nconst domain = 'libp2p-peer-record'\n\n// The type hint used to identify peer records in a Envelope.\n// Defined in https://github.com/multiformats/multicodec/blob/master/table.csv\n// with name \"libp2p-peer-record\"\nconst payloadType = Uint8Array.from([3, 1])\n\nmodule.exports = {\n ENVELOPE_DOMAIN_PEER_RECORD: domain,\n ENVELOPE_PAYLOAD_TYPE_PEER_RECORD: payloadType\n}\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\nconst PeerId = require('peer-id')\nconst arrayEquals = require('libp2p-utils/src/array-equals')\n\nconst { PeerRecord: Protobuf } = require('./peer-record')\nconst {\n ENVELOPE_DOMAIN_PEER_RECORD,\n ENVELOPE_PAYLOAD_TYPE_PEER_RECORD\n} = require('./consts')\n\n/**\n * @typedef {import('../../peer-store/types').Address} Address\n * @typedef {import('libp2p-interfaces/src/record/types').Record} Record\n */\n\n/**\n * @implements {Record}\n */\nclass PeerRecord {\n /**\n * The PeerRecord is used for distributing peer routing records across the network.\n * It contains the peer's reachable listen addresses.\n *\n * @class\n * @param {Object} params\n * @param {PeerId} params.peerId\n * @param {Multiaddr[]} params.multiaddrs - addresses of the associated peer.\n * @param {number} [params.seqNumber] - monotonically-increasing sequence counter that's used to order PeerRecords in time.\n */\n constructor ({ peerId, multiaddrs = [], seqNumber = Date.now() }) {\n this.domain = ENVELOPE_DOMAIN_PEER_RECORD\n this.codec = ENVELOPE_PAYLOAD_TYPE_PEER_RECORD\n\n this.peerId = peerId\n this.multiaddrs = multiaddrs\n this.seqNumber = seqNumber\n\n // Cache\n this._marshal = undefined\n }\n\n /**\n * Marshal a record to be used in an envelope.\n *\n * @returns {Uint8Array}\n */\n marshal () {\n if (this._marshal) {\n return this._marshal\n }\n\n this._marshal = Protobuf.encode({\n peerId: this.peerId.toBytes(),\n seq: this.seqNumber,\n addresses: this.multiaddrs.map((m) => ({\n multiaddr: m.bytes\n }))\n }).finish()\n\n return this._marshal\n }\n\n /**\n * Returns true if `this` record equals the `other`.\n *\n * @param {unknown} other\n * @returns {boolean}\n */\n equals (other) {\n if (!(other instanceof PeerRecord)) {\n return false\n }\n\n // Validate PeerId\n if (!this.peerId.equals(other.peerId)) {\n return false\n }\n\n // Validate seqNumber\n if (this.seqNumber !== other.seqNumber) {\n return false\n }\n\n // Validate multiaddrs\n if (!arrayEquals(this.multiaddrs, other.multiaddrs)) {\n return false\n }\n\n return true\n }\n}\n\n/**\n * Unmarshal Peer Record Protobuf.\n *\n * @param {Uint8Array} buf - marshaled peer record.\n * @returns {PeerRecord}\n */\nPeerRecord.createFromProtobuf = (buf) => {\n const peerRecord = Protobuf.decode(buf)\n\n const peerId = PeerId.createFromBytes(peerRecord.peerId)\n const multiaddrs = (peerRecord.addresses || []).map((a) => new Multiaddr(a.multiaddr))\n const seqNumber = Number(peerRecord.seq)\n\n return new PeerRecord({ peerId, multiaddrs, seqNumber })\n}\n\nPeerRecord.DOMAIN = ENVELOPE_DOMAIN_PEER_RECORD\n\nmodule.exports = PeerRecord\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-peer-record\"] || ($protobuf.roots[\"libp2p-peer-record\"] = {});\n\n$root.PeerRecord = (function() {\n\n /**\n * Properties of a PeerRecord.\n * @exports IPeerRecord\n * @interface IPeerRecord\n * @property {Uint8Array|null} [peerId] PeerRecord peerId\n * @property {number|null} [seq] PeerRecord seq\n * @property {Array.<PeerRecord.IAddressInfo>|null} [addresses] PeerRecord addresses\n */\n\n /**\n * Constructs a new PeerRecord.\n * @exports PeerRecord\n * @classdesc Represents a PeerRecord.\n * @implements IPeerRecord\n * @constructor\n * @param {IPeerRecord=} [p] Properties to set\n */\n function PeerRecord(p) {\n this.addresses = [];\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * PeerRecord peerId.\n * @member {Uint8Array} peerId\n * @memberof PeerRecord\n * @instance\n */\n PeerRecord.prototype.peerId = $util.newBuffer([]);\n\n /**\n * PeerRecord seq.\n * @member {number} seq\n * @memberof PeerRecord\n * @instance\n */\n PeerRecord.prototype.seq = $util.Long ? $util.Long.fromBits(0,0,true) : 0;\n\n /**\n * PeerRecord addresses.\n * @member {Array.<PeerRecord.IAddressInfo>} addresses\n * @memberof PeerRecord\n * @instance\n */\n PeerRecord.prototype.addresses = $util.emptyArray;\n\n /**\n * Encodes the specified PeerRecord message. Does not implicitly {@link PeerRecord.verify|verify} messages.\n * @function encode\n * @memberof PeerRecord\n * @static\n * @param {IPeerRecord} m PeerRecord message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PeerRecord.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.peerId != null && Object.hasOwnProperty.call(m, \"peerId\"))\n w.uint32(10).bytes(m.peerId);\n if (m.seq != null && Object.hasOwnProperty.call(m, \"seq\"))\n w.uint32(16).uint64(m.seq);\n if (m.addresses != null && m.addresses.length) {\n for (var i = 0; i < m.addresses.length; ++i)\n $root.PeerRecord.AddressInfo.encode(m.addresses[i], w.uint32(26).fork()).ldelim();\n }\n return w;\n };\n\n /**\n * Decodes a PeerRecord message from the specified reader or buffer.\n * @function decode\n * @memberof PeerRecord\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PeerRecord} PeerRecord\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PeerRecord.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PeerRecord();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.peerId = r.bytes();\n break;\n case 2:\n m.seq = r.uint64();\n break;\n case 3:\n if (!(m.addresses && m.addresses.length))\n m.addresses = [];\n m.addresses.push($root.PeerRecord.AddressInfo.decode(r, r.uint32()));\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates a PeerRecord message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PeerRecord\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {PeerRecord} PeerRecord\n */\n PeerRecord.fromObject = function fromObject(d) {\n if (d instanceof $root.PeerRecord)\n return d;\n var m = new $root.PeerRecord();\n if (d.peerId != null) {\n if (typeof d.peerId === \"string\")\n $util.base64.decode(d.peerId, m.peerId = $util.newBuffer($util.base64.length(d.peerId)), 0);\n else if (d.peerId.length)\n m.peerId = d.peerId;\n }\n if (d.seq != null) {\n if ($util.Long)\n (m.seq = $util.Long.fromValue(d.seq)).unsigned = true;\n else if (typeof d.seq === \"string\")\n m.seq = parseInt(d.seq, 10);\n else if (typeof d.seq === \"number\")\n m.seq = d.seq;\n else if (typeof d.seq === \"object\")\n m.seq = new $util.LongBits(d.seq.low >>> 0, d.seq.high >>> 0).toNumber(true);\n }\n if (d.addresses) {\n if (!Array.isArray(d.addresses))\n throw TypeError(\".PeerRecord.addresses: array expected\");\n m.addresses = [];\n for (var i = 0; i < d.addresses.length; ++i) {\n if (typeof d.addresses[i] !== \"object\")\n throw TypeError(\".PeerRecord.addresses: object expected\");\n m.addresses[i] = $root.PeerRecord.AddressInfo.fromObject(d.addresses[i]);\n }\n }\n return m;\n };\n\n /**\n * Creates a plain object from a PeerRecord message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PeerRecord\n * @static\n * @param {PeerRecord} m PeerRecord\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n PeerRecord.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.arrays || o.defaults) {\n d.addresses = [];\n }\n if (o.defaults) {\n if (o.bytes === String)\n d.peerId = \"\";\n else {\n d.peerId = [];\n if (o.bytes !== Array)\n d.peerId = $util.newBuffer(d.peerId);\n }\n if ($util.Long) {\n var n = new $util.Long(0, 0, true);\n d.seq = o.longs === String ? n.toString() : o.longs === Number ? n.toNumber() : n;\n } else\n d.seq = o.longs === String ? \"0\" : 0;\n }\n if (m.peerId != null && m.hasOwnProperty(\"peerId\")) {\n d.peerId = o.bytes === String ? $util.base64.encode(m.peerId, 0, m.peerId.length) : o.bytes === Array ? Array.prototype.slice.call(m.peerId) : m.peerId;\n }\n if (m.seq != null && m.hasOwnProperty(\"seq\")) {\n if (typeof m.seq === \"number\")\n d.seq = o.longs === String ? String(m.seq) : m.seq;\n else\n d.seq = o.longs === String ? $util.Long.prototype.toString.call(m.seq) : o.longs === Number ? new $util.LongBits(m.seq.low >>> 0, m.seq.high >>> 0).toNumber(true) : m.seq;\n }\n if (m.addresses && m.addresses.length) {\n d.addresses = [];\n for (var j = 0; j < m.addresses.length; ++j) {\n d.addresses[j] = $root.PeerRecord.AddressInfo.toObject(m.addresses[j], o);\n }\n }\n return d;\n };\n\n /**\n * Converts this PeerRecord to JSON.\n * @function toJSON\n * @memberof PeerRecord\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n PeerRecord.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n PeerRecord.AddressInfo = (function() {\n\n /**\n * Properties of an AddressInfo.\n * @memberof PeerRecord\n * @interface IAddressInfo\n * @property {Uint8Array|null} [multiaddr] AddressInfo multiaddr\n */\n\n /**\n * Constructs a new AddressInfo.\n * @memberof PeerRecord\n * @classdesc Represents an AddressInfo.\n * @implements IAddressInfo\n * @constructor\n * @param {PeerRecord.IAddressInfo=} [p] Properties to set\n */\n function AddressInfo(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * AddressInfo multiaddr.\n * @member {Uint8Array} multiaddr\n * @memberof PeerRecord.AddressInfo\n * @instance\n */\n AddressInfo.prototype.multiaddr = $util.newBuffer([]);\n\n /**\n * Encodes the specified AddressInfo message. Does not implicitly {@link PeerRecord.AddressInfo.verify|verify} messages.\n * @function encode\n * @memberof PeerRecord.AddressInfo\n * @static\n * @param {PeerRecord.IAddressInfo} m AddressInfo message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n AddressInfo.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n if (m.multiaddr != null && Object.hasOwnProperty.call(m, \"multiaddr\"))\n w.uint32(10).bytes(m.multiaddr);\n return w;\n };\n\n /**\n * Decodes an AddressInfo message from the specified reader or buffer.\n * @function decode\n * @memberof PeerRecord.AddressInfo\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PeerRecord.AddressInfo} AddressInfo\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n AddressInfo.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PeerRecord.AddressInfo();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.multiaddr = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n return m;\n };\n\n /**\n * Creates an AddressInfo message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PeerRecord.AddressInfo\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {PeerRecord.AddressInfo} AddressInfo\n */\n AddressInfo.fromObject = function fromObject(d) {\n if (d instanceof $root.PeerRecord.AddressInfo)\n return d;\n var m = new $root.PeerRecord.AddressInfo();\n if (d.multiaddr != null) {\n if (typeof d.multiaddr === \"string\")\n $util.base64.decode(d.multiaddr, m.multiaddr = $util.newBuffer($util.base64.length(d.multiaddr)), 0);\n else if (d.multiaddr.length)\n m.multiaddr = d.multiaddr;\n }\n return m;\n };\n\n /**\n * Creates a plain object from an AddressInfo message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PeerRecord.AddressInfo\n * @static\n * @param {PeerRecord.AddressInfo} m AddressInfo\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n AddressInfo.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.multiaddr = \"\";\n else {\n d.multiaddr = [];\n if (o.bytes !== Array)\n d.multiaddr = $util.newBuffer(d.multiaddr);\n }\n }\n if (m.multiaddr != null && m.hasOwnProperty(\"multiaddr\")) {\n d.multiaddr = o.bytes === String ? $util.base64.encode(m.multiaddr, 0, m.multiaddr.length) : o.bytes === Array ? Array.prototype.slice.call(m.multiaddr) : m.multiaddr;\n }\n return d;\n };\n\n /**\n * Converts this AddressInfo to JSON.\n * @function toJSON\n * @memberof PeerRecord.AddressInfo\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n AddressInfo.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return AddressInfo;\n })();\n\n return PeerRecord;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nconst Envelope = require('./envelope')\nconst PeerRecord = require('./peer-record')\n\n/**\n * @typedef {import('../')} Libp2p\n */\n\n/**\n * Create (or update if existing) self peer record and store it in the AddressBook.\n *\n * @param {Libp2p} libp2p\n * @returns {Promise<void>}\n */\nasync function updateSelfPeerRecord (libp2p) {\n const peerRecord = new PeerRecord({\n peerId: libp2p.peerId,\n multiaddrs: libp2p.multiaddrs\n })\n const envelope = await Envelope.seal(peerRecord, libp2p.peerId)\n await libp2p.peerStore.addressBook.consumePeerRecord(envelope)\n}\n\nmodule.exports.updateSelfPeerRecord = updateSelfPeerRecord\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:registrar'), {\n error: debug('libp2p:registrar:err')\n})\nconst errcode = require('err-code')\n\nconst {\n codes: { ERR_INVALID_PARAMETERS }\n} = require('./errors')\nconst Topology = require('libp2p-interfaces/src/topology')\n\n/**\n * @typedef {import('peer-id')} PeerId\n * @typedef {import('./peer-store/types').PeerStore} PeerStore\n * @typedef {import('./connection-manager')} ConnectionManager\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('./').HandlerProps} HandlerProps\n */\n\n/**\n *\n */\n\n/**\n * Responsible for notifying registered protocols of events in the network.\n */\nclass Registrar {\n /**\n * @param {Object} props\n * @param {PeerStore} props.peerStore\n * @param {ConnectionManager} props.connectionManager\n * @class\n */\n constructor ({ peerStore, connectionManager }) {\n // Used on topology to listen for protocol changes\n this.peerStore = peerStore\n\n this.connectionManager = connectionManager\n\n /**\n * Map of topologies\n *\n * @type {Map<string, Topology>}\n */\n this.topologies = new Map()\n\n /** @type {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void} */\n // @ts-ignore handle is not optional\n this._handle = undefined\n\n this._onDisconnect = this._onDisconnect.bind(this)\n this.connectionManager.on('peer:disconnect', this._onDisconnect)\n }\n\n /**\n * @returns {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void}\n */\n get handle () {\n return this._handle\n }\n\n /**\n * @param {(protocols: string[]|string, handler: (props: HandlerProps) => void) => void} handle\n */\n set handle (handle) {\n this._handle = handle\n }\n\n /**\n * Get a connection with a peer.\n *\n * @param {PeerId} peerId\n * @returns {Connection | null}\n */\n getConnection (peerId) {\n return this.connectionManager.get(peerId)\n }\n\n /**\n * Register handlers for a set of multicodecs given\n *\n * @param {Topology} topology - protocol topology\n * @returns {Promise<string>} registrar identifier\n */\n async register (topology) {\n if (!Topology.isTopology(topology)) {\n log.error('topology must be an instance of interfaces/topology')\n throw errcode(new Error('topology must be an instance of interfaces/topology'), ERR_INVALID_PARAMETERS)\n }\n\n // Create topology\n const id = (Math.random() * 1e9).toString(36) + Date.now()\n\n this.topologies.set(id, topology)\n\n // Set registrar\n await topology.setRegistrar(this)\n\n return id\n }\n\n /**\n * Unregister topology.\n *\n * @param {string} id - registrar identifier\n * @returns {boolean} unregistered successfully\n */\n unregister (id) {\n return this.topologies.delete(id)\n }\n\n /**\n * Remove a disconnected peer from the record\n *\n * @param {Connection} connection\n * @returns {void}\n */\n _onDisconnect (connection) {\n for (const [, topology] of this.topologies) {\n topology.disconnect(connection.remotePeer)\n }\n }\n}\n\nmodule.exports = Registrar\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:transports'), {\n error: debug('libp2p:transports:err')\n})\n\nconst pSettle = require('p-settle')\nconst { codes } = require('./errors')\nconst errCode = require('err-code')\n\nconst { updateSelfPeerRecord } = require('./record/utils')\n\n/**\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('libp2p-interfaces/src/transport/types').TransportFactory<any, any>} TransportFactory\n * @typedef {import('libp2p-interfaces/src/transport/types').Transport<any, any>} Transport\n *\n * @typedef {Object} TransportManagerProperties\n * @property {import('./')} libp2p\n * @property {import('./upgrader')} upgrader\n *\n * @typedef {Object} TransportManagerOptions\n * @property {number} [faultTolerance = FAULT_TOLERANCE.FATAL_ALL] - Address listen error tolerance.\n */\n\nclass TransportManager {\n /**\n * @class\n * @param {TransportManagerProperties & TransportManagerOptions} options\n */\n constructor ({ libp2p, upgrader, faultTolerance = FAULT_TOLERANCE.FATAL_ALL }) {\n this.libp2p = libp2p\n this.upgrader = upgrader\n /** @type {Map<string, Transport>} */\n this._transports = new Map()\n this._listeners = new Map()\n this._listenerOptions = new Map()\n this.faultTolerance = faultTolerance\n }\n\n /**\n * Adds a `Transport` to the manager\n *\n * @param {string} key\n * @param {TransportFactory} Transport\n * @param {*} transportOptions - Additional options to pass to the transport\n * @returns {void}\n */\n add (key, Transport, transportOptions = {}) {\n log('adding %s', key)\n if (!key) {\n throw errCode(new Error(`Transport must have a valid key, was given '${key}'`), codes.ERR_INVALID_KEY)\n }\n if (this._transports.has(key)) {\n throw errCode(new Error('There is already a transport with this key'), codes.ERR_DUPLICATE_TRANSPORT)\n }\n\n const transport = new Transport({\n ...transportOptions,\n libp2p: this.libp2p,\n upgrader: this.upgrader\n })\n\n this._transports.set(key, transport)\n this._listenerOptions.set(key, transportOptions.listenerOptions || {})\n if (!this._listeners.has(key)) {\n this._listeners.set(key, [])\n }\n }\n\n /**\n * Stops all listeners\n *\n * @async\n */\n async close () {\n const tasks = []\n for (const [key, listeners] of this._listeners) {\n log('closing listeners for %s', key)\n while (listeners.length) {\n const listener = listeners.pop()\n listener.removeAllListeners('listening')\n listener.removeAllListeners('close')\n tasks.push(listener.close())\n }\n }\n\n await Promise.all(tasks)\n log('all listeners closed')\n for (const key of this._listeners.keys()) {\n this._listeners.set(key, [])\n }\n }\n\n /**\n * Dials the given Multiaddr over it's supported transport\n *\n * @param {Multiaddr} ma\n * @param {*} options\n * @returns {Promise<Connection>}\n */\n async dial (ma, options) {\n const transport = this.transportForMultiaddr(ma)\n if (!transport) {\n throw errCode(new Error(`No transport available for address ${String(ma)}`), codes.ERR_TRANSPORT_UNAVAILABLE)\n }\n\n try {\n return await transport.dial(ma, options)\n } catch (/** @type {any} */ err) {\n if (!err.code) err.code = codes.ERR_TRANSPORT_DIAL_FAILED\n throw err\n }\n }\n\n /**\n * Returns all Multiaddr's the listeners are using\n *\n * @returns {Multiaddr[]}\n */\n getAddrs () {\n /** @type {Multiaddr[]} */\n let addrs = []\n for (const listeners of this._listeners.values()) {\n for (const listener of listeners) {\n addrs = [...addrs, ...listener.getAddrs()]\n }\n }\n return addrs\n }\n\n /**\n * Returns all the transports instances.\n *\n * @returns {IterableIterator<Transport>}\n */\n getTransports () {\n return this._transports.values()\n }\n\n /**\n * Finds a transport that matches the given Multiaddr\n *\n * @param {Multiaddr} ma\n * @returns {Transport|null}\n */\n transportForMultiaddr (ma) {\n for (const transport of this._transports.values()) {\n const addrs = transport.filter([ma])\n if (addrs.length) return transport\n }\n return null\n }\n\n /**\n * Starts listeners for each listen Multiaddr.\n *\n * @async\n * @param {Multiaddr[]} addrs - addresses to attempt to listen on\n */\n async listen (addrs) {\n if (!addrs || addrs.length === 0) {\n log('no addresses were provided for listening, this node is dial only')\n return\n }\n\n const couldNotListen = []\n for (const [key, transport] of this._transports.entries()) {\n const supportedAddrs = transport.filter(addrs)\n const tasks = []\n\n // For each supported multiaddr, create a listener\n for (const addr of supportedAddrs) {\n log('creating listener for %s on %s', key, addr)\n const listener = transport.createListener(this._listenerOptions.get(key))\n this._listeners.get(key).push(listener)\n\n // Track listen/close events\n listener.on('listening', () => updateSelfPeerRecord(this.libp2p))\n listener.on('close', () => updateSelfPeerRecord(this.libp2p))\n\n // We need to attempt to listen on everything\n tasks.push(listener.listen(addr))\n }\n\n // Keep track of transports we had no addresses for\n if (tasks.length === 0) {\n couldNotListen.push(key)\n continue\n }\n\n const results = await pSettle(tasks)\n // If we are listening on at least 1 address, succeed.\n // TODO: we should look at adding a retry (`p-retry`) here to better support\n // listening on remote addresses as they may be offline. We could then potentially\n // just wait for any (`p-any`) listener to succeed on each transport before returning\n const isListening = results.find(r => r.isFulfilled === true)\n if (!isListening && this.faultTolerance !== FAULT_TOLERANCE.NO_FATAL) {\n throw errCode(new Error(`Transport (${key}) could not listen on any available address`), codes.ERR_NO_VALID_ADDRESSES)\n }\n }\n\n // If no transports were able to listen, throw an error. This likely\n // means we were given addresses we do not have transports for\n if (couldNotListen.length === this._transports.size) {\n const message = `no valid addresses were provided for transports [${couldNotListen}]`\n if (this.faultTolerance === FAULT_TOLERANCE.FATAL_ALL) {\n throw errCode(new Error(message), codes.ERR_NO_VALID_ADDRESSES)\n }\n log(`libp2p in dial mode only: ${message}`)\n }\n }\n\n /**\n * Removes the given transport from the manager.\n * If a transport has any running listeners, they will be closed.\n *\n * @async\n * @param {string} key\n */\n async remove (key) {\n log('removing %s', key)\n if (this._listeners.has(key)) {\n // Close any running listeners\n for (const listener of this._listeners.get(key)) {\n listener.removeAllListeners('listening')\n listener.removeAllListeners('close')\n await listener.close()\n }\n }\n\n this._transports.delete(key)\n this._listeners.delete(key)\n }\n\n /**\n * Removes all transports from the manager.\n * If any listeners are running, they will be closed.\n *\n * @async\n */\n async removeAll () {\n const tasks = []\n for (const key of this._transports.keys()) {\n tasks.push(this.remove(key))\n }\n\n await Promise.all(tasks)\n }\n}\n\n/**\n * Enum Transport Manager Fault Tolerance values.\n * FATAL_ALL should be used for failing in any listen circumstance.\n * NO_FATAL should be used for not failing when not listening.\n *\n * @readonly\n * @enum {number}\n */\nconst FAULT_TOLERANCE = {\n FATAL_ALL: 0,\n NO_FATAL: 1\n}\n\nTransportManager.FaultTolerance = FAULT_TOLERANCE\n\nmodule.exports = TransportManager\n","'use strict'\n\nconst debug = require('debug')\nconst log = Object.assign(debug('libp2p:upgrader'), {\n error: debug('libp2p:upgrader:err')\n})\nconst errCode = require('err-code')\nconst Multistream = require('multistream-select')\nconst { Connection } = require('libp2p-interfaces/src/connection')\nconst PeerId = require('peer-id')\nconst { pipe } = require('it-pipe')\n// @ts-ignore mutable-proxy does not export types\nconst mutableProxy = require('mutable-proxy')\n\nconst { codes } = require('./errors')\n\n/**\n * @typedef {import('libp2p-interfaces/src/transport/types').MultiaddrConnection} MultiaddrConnection\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxerFactory} MuxerFactory\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').Muxer} Muxer\n * @typedef {import('libp2p-interfaces/src/stream-muxer/types').MuxedStream} MuxedStream\n * @typedef {import('libp2p-interfaces/src/crypto/types').Crypto} Crypto\n * @typedef {import('libp2p-interfaces/src/connection').Connection} Connection\n * @typedef {import('multiaddr').Multiaddr} Multiaddr\n * @typedef {import('./types').ConnectionGater} ConnectionGater\n */\n\n/**\n * @typedef CryptoResult\n * @property {MultiaddrConnection} conn A duplex iterable\n * @property {PeerId} remotePeer\n * @property {string} protocol\n */\n\nclass Upgrader {\n /**\n * @param {object} options\n * @param {PeerId} options.localPeer\n * @param {ConnectionGater} options.connectionGater\n *\n * @param {import('./metrics')} [options.metrics]\n * @param {Map<string, Crypto>} [options.cryptos]\n * @param {Map<string, MuxerFactory>} [options.muxers]\n * @param {(connection: Connection) => void} options.onConnection - Called when a connection is upgraded\n * @param {(connection: Connection) => void} options.onConnectionEnd\n */\n constructor ({\n localPeer,\n metrics,\n connectionGater,\n cryptos = new Map(),\n muxers = new Map(),\n onConnectionEnd = () => {},\n onConnection = () => {}\n }) {\n this.connectionGater = connectionGater\n this.localPeer = localPeer\n this.metrics = metrics\n this.cryptos = cryptos\n this.muxers = muxers\n /** @type {import(\"./pnet\") | null} */\n this.protector = null\n this.protocols = new Map()\n this.onConnection = onConnection\n this.onConnectionEnd = onConnectionEnd\n }\n\n /**\n * Upgrades an inbound connection\n *\n * @async\n * @param {MultiaddrConnection} maConn\n * @returns {Promise<Connection>}\n */\n async upgradeInbound (maConn) {\n let encryptedConn\n let remotePeer\n let upgradedConn\n let Muxer\n let cryptoProtocol\n let setPeer\n let proxyPeer\n\n if (await this.connectionGater.denyInboundConnection(maConn)) {\n throw errCode(new Error('The multiaddr connection is blocked by gater.acceptConnection'), codes.ERR_CONNECTION_INTERCEPTED)\n }\n\n if (this.metrics) {\n ({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())\n const idString = (Math.random() * 1e9).toString(36) + Date.now()\n setPeer({ toB58String: () => idString })\n maConn = this.metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })\n }\n\n log('Starting the inbound connection upgrade')\n\n // Protect\n let protectedConn = maConn\n if (this.protector) {\n protectedConn = await this.protector.protect(maConn)\n }\n\n try {\n // Encrypt the connection\n ({\n conn: encryptedConn,\n remotePeer,\n protocol: cryptoProtocol\n } = await this._encryptInbound(this.localPeer, protectedConn, this.cryptos))\n\n if (await this.connectionGater.denyInboundEncryptedConnection(remotePeer, encryptedConn)) {\n throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)\n }\n\n // Multiplex the connection\n if (this.muxers.size) {\n ({ stream: upgradedConn, Muxer } = await this._multiplexInbound(encryptedConn, this.muxers))\n } else {\n upgradedConn = encryptedConn\n }\n } catch (/** @type {any} */ err) {\n log.error('Failed to upgrade inbound connection', err)\n await maConn.close(err)\n throw err\n }\n\n if (await this.connectionGater.denyInboundUpgradedConnection(remotePeer, encryptedConn)) {\n throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)\n }\n\n if (this.metrics) {\n this.metrics.updatePlaceholder(proxyPeer, remotePeer)\n setPeer(remotePeer)\n }\n\n log('Successfully upgraded inbound connection')\n\n return this._createConnection({\n cryptoProtocol,\n direction: 'inbound',\n maConn,\n upgradedConn,\n Muxer,\n remotePeer\n })\n }\n\n /**\n * Upgrades an outbound connection\n *\n * @async\n * @param {MultiaddrConnection} maConn\n * @returns {Promise<Connection>}\n */\n async upgradeOutbound (maConn) {\n const idStr = maConn.remoteAddr.getPeerId()\n if (!idStr) {\n throw errCode(new Error('outbound connection must have a peer id'), codes.ERR_INVALID_MULTIADDR)\n }\n\n const remotePeerId = PeerId.createFromB58String(idStr)\n\n if (await this.connectionGater.denyOutboundConnection(remotePeerId, maConn)) {\n throw errCode(new Error('The multiaddr connection is blocked by connectionGater.denyOutboundConnection'), codes.ERR_CONNECTION_INTERCEPTED)\n }\n\n let encryptedConn\n let remotePeer\n let upgradedConn\n let cryptoProtocol\n let Muxer\n let setPeer\n let proxyPeer\n\n if (this.metrics) {\n ({ setTarget: setPeer, proxy: proxyPeer } = mutableProxy())\n const idString = (Math.random() * 1e9).toString(36) + Date.now()\n setPeer({ toB58String: () => idString })\n maConn = this.metrics.trackStream({ stream: maConn, remotePeer: proxyPeer })\n }\n\n log('Starting the outbound connection upgrade')\n\n // Protect\n let protectedConn = maConn\n if (this.protector) {\n protectedConn = await this.protector.protect(maConn)\n }\n\n try {\n // Encrypt the connection\n ({\n conn: encryptedConn,\n remotePeer,\n protocol: cryptoProtocol\n } = await this._encryptOutbound(this.localPeer, protectedConn, remotePeerId, this.cryptos))\n\n if (await this.connectionGater.denyOutboundEncryptedConnection(remotePeer, encryptedConn)) {\n throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)\n }\n\n // Multiplex the connection\n if (this.muxers.size) {\n ({ stream: upgradedConn, Muxer } = await this._multiplexOutbound(encryptedConn, this.muxers))\n } else {\n upgradedConn = encryptedConn\n }\n } catch (/** @type {any} */ err) {\n log.error('Failed to upgrade outbound connection', err)\n await maConn.close(err)\n throw err\n }\n\n if (await this.connectionGater.denyOutboundUpgradedConnection(remotePeer, encryptedConn)) {\n throw errCode(new Error('The multiaddr connection is blocked by gater.acceptEncryptedConnection'), codes.ERR_CONNECTION_INTERCEPTED)\n }\n\n if (this.metrics) {\n this.metrics.updatePlaceholder(proxyPeer, remotePeer)\n setPeer(remotePeer)\n }\n\n log('Successfully upgraded outbound connection')\n\n return this._createConnection({\n cryptoProtocol,\n direction: 'outbound',\n maConn,\n upgradedConn,\n Muxer,\n remotePeer\n })\n }\n\n /**\n * A convenience method for generating a new `Connection`\n *\n * @private\n * @param {object} options\n * @param {string} options.cryptoProtocol - The crypto protocol that was negotiated\n * @param {'inbound' | 'outbound'} options.direction - One of ['inbound', 'outbound']\n * @param {MultiaddrConnection} options.maConn - The transport layer connection\n * @param {MuxedStream | MultiaddrConnection} options.upgradedConn - A duplex connection returned from multiplexer and/or crypto selection\n * @param {MuxerFactory} [options.Muxer] - The muxer to be used for muxing\n * @param {PeerId} options.remotePeer - The peer the connection is with\n * @returns {Connection}\n */\n _createConnection ({\n cryptoProtocol,\n direction,\n maConn,\n upgradedConn,\n Muxer,\n remotePeer\n }) {\n /** @type {import(\"libp2p-interfaces/src/stream-muxer/types\").Muxer} */\n let muxer\n /** @type {import(\"libp2p-interfaces/src/connection/connection\").CreatedMuxedStream | undefined} */\n let newStream\n /** @type {Connection} */\n let connection // eslint-disable-line prefer-const\n\n if (Muxer) {\n // Create the muxer\n muxer = new Muxer({\n // Run anytime a remote stream is created\n onStream: async muxedStream => {\n if (!connection) return\n const mss = new Multistream.Listener(muxedStream)\n try {\n const { stream, protocol } = await mss.handle(Array.from(this.protocols.keys()))\n log('%s: incoming stream opened on %s', direction, protocol)\n if (this.metrics) this.metrics.trackStream({ stream, remotePeer, protocol })\n connection.addStream(muxedStream, { protocol })\n this._onStream({ connection, stream: { ...muxedStream, ...stream }, protocol })\n } catch (/** @type {any} */ err) {\n log.error(err)\n }\n },\n // Run anytime a stream closes\n onStreamEnd: muxedStream => {\n connection.removeStream(muxedStream.id)\n }\n })\n\n newStream = async (protocols) => {\n log('%s: starting new stream on %s', direction, protocols)\n const muxedStream = muxer.newStream()\n const mss = new Multistream.Dialer(muxedStream)\n try {\n const { stream, protocol } = await mss.select(protocols)\n if (this.metrics) this.metrics.trackStream({ stream, remotePeer, protocol })\n return { stream: { ...muxedStream, ...stream }, protocol }\n } catch (/** @type {any} */ err) {\n log.error('could not create new stream', err)\n throw errCode(err, codes.ERR_UNSUPPORTED_PROTOCOL)\n }\n }\n\n // Pipe all data through the muxer\n pipe(upgradedConn, muxer, upgradedConn).catch(log.error)\n }\n\n const _timeline = maConn.timeline\n maConn.timeline = new Proxy(_timeline, {\n set: (...args) => {\n if (connection && args[1] === 'close' && args[2] && !_timeline.close) {\n // Wait for close to finish before notifying of the closure\n (async () => {\n try {\n if (connection.stat.status === 'open') {\n await connection.close()\n }\n } catch (/** @type {any} */ err) {\n log.error(err)\n } finally {\n this.onConnectionEnd(connection)\n }\n })().catch(err => {\n log.error(err)\n })\n }\n\n return Reflect.set(...args)\n }\n })\n maConn.timeline.upgraded = Date.now()\n\n const errConnectionNotMultiplexed = () => {\n throw errCode(new Error('connection is not multiplexed'), codes.ERR_CONNECTION_NOT_MULTIPLEXED)\n }\n\n // Create the connection\n connection = new Connection({\n localAddr: maConn.localAddr,\n remoteAddr: maConn.remoteAddr,\n localPeer: this.localPeer,\n remotePeer: remotePeer,\n stat: {\n direction,\n // @ts-ignore\n timeline: maConn.timeline,\n multiplexer: Muxer && Muxer.multicodec,\n encryption: cryptoProtocol\n },\n newStream: newStream || errConnectionNotMultiplexed,\n getStreams: () => muxer ? muxer.streams : errConnectionNotMultiplexed(),\n close: async () => {\n await maConn.close()\n // Ensure remaining streams are aborted\n if (muxer) {\n muxer.streams.map(stream => stream.abort())\n }\n }\n })\n\n this.onConnection(connection)\n\n return connection\n }\n\n /**\n * Routes incoming streams to the correct handler\n *\n * @private\n * @param {object} options\n * @param {Connection} options.connection - The connection the stream belongs to\n * @param {MuxedStream} options.stream\n * @param {string} options.protocol\n */\n _onStream ({ connection, stream, protocol }) {\n const handler = this.protocols.get(protocol)\n handler({ connection, stream, protocol })\n }\n\n /**\n * Attempts to encrypt the incoming `connection` with the provided `cryptos`.\n *\n * @private\n * @async\n * @param {PeerId} localPeer - The initiators PeerId\n * @param {*} connection\n * @param {Map<string, Crypto>} cryptos\n * @returns {Promise<CryptoResult>} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used\n */\n async _encryptInbound (localPeer, connection, cryptos) {\n const mss = new Multistream.Listener(connection)\n const protocols = Array.from(cryptos.keys())\n log('handling inbound crypto protocol selection', protocols)\n\n try {\n const { stream, protocol } = await mss.handle(protocols)\n const crypto = cryptos.get(protocol)\n log('encrypting inbound connection...')\n\n if (!crypto) {\n throw new Error(`no crypto module found for ${protocol}`)\n }\n\n return {\n ...await crypto.secureInbound(localPeer, stream),\n protocol\n }\n } catch (/** @type {any} */ err) {\n throw errCode(err, codes.ERR_ENCRYPTION_FAILED)\n }\n }\n\n /**\n * Attempts to encrypt the given `connection` with the provided `cryptos`.\n * The first `Crypto` module to succeed will be used\n *\n * @private\n * @async\n * @param {PeerId} localPeer - The initiators PeerId\n * @param {MultiaddrConnection} connection\n * @param {PeerId} remotePeerId\n * @param {Map<string, Crypto>} cryptos\n * @returns {Promise<CryptoResult>} An encrypted connection, remote peer `PeerId` and the protocol of the `Crypto` used\n */\n async _encryptOutbound (localPeer, connection, remotePeerId, cryptos) {\n const mss = new Multistream.Dialer(connection)\n const protocols = Array.from(cryptos.keys())\n log('selecting outbound crypto protocol', protocols)\n\n try {\n const { stream, protocol } = await mss.select(protocols)\n const crypto = cryptos.get(protocol)\n log('encrypting outbound connection to %j', remotePeerId)\n\n if (!crypto) {\n throw new Error(`no crypto module found for ${protocol}`)\n }\n\n return {\n ...await crypto.secureOutbound(localPeer, stream, remotePeerId),\n protocol\n }\n } catch (/** @type {any} */ err) {\n throw errCode(err, codes.ERR_ENCRYPTION_FAILED)\n }\n }\n\n /**\n * Selects one of the given muxers via multistream-select. That\n * muxer will be used for all future streams on the connection.\n *\n * @private\n * @async\n * @param {MultiaddrConnection} connection - A basic duplex connection to multiplex\n * @param {Map<string, MuxerFactory>} muxers - The muxers to attempt multiplexing with\n * @returns {Promise<{ stream: MuxedStream, Muxer?: MuxerFactory}>} A muxed connection\n */\n async _multiplexOutbound (connection, muxers) {\n const dialer = new Multistream.Dialer(connection)\n const protocols = Array.from(muxers.keys())\n log('outbound selecting muxer %s', protocols)\n try {\n const { stream, protocol } = await dialer.select(protocols)\n log('%s selected as muxer protocol', protocol)\n const Muxer = muxers.get(protocol)\n return { stream, Muxer }\n } catch (/** @type {any} */ err) {\n throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)\n }\n }\n\n /**\n * Registers support for one of the given muxers via multistream-select. The\n * selected muxer will be used for all future streams on the connection.\n *\n * @private\n * @async\n * @param {MultiaddrConnection} connection - A basic duplex connection to multiplex\n * @param {Map<string, MuxerFactory>} muxers - The muxers to attempt multiplexing with\n * @returns {Promise<{ stream: MuxedStream, Muxer?: MuxerFactory}>} A muxed connection\n */\n async _multiplexInbound (connection, muxers) {\n const listener = new Multistream.Listener(connection)\n const protocols = Array.from(muxers.keys())\n log('inbound handling muxers %s', protocols)\n try {\n const { stream, protocol } = await listener.handle(protocols)\n const Muxer = muxers.get(protocol)\n return { stream, Muxer }\n } catch (/** @type {any} */ err) {\n throw errCode(err, codes.ERR_MUXER_UNAVAILABLE)\n }\n }\n}\n\nmodule.exports = Upgrader\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 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\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.<number>} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.<number>} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.<number>} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.<number>} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.<number>} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.<number>} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","'use strict'\n\nconst { Multiaddr } = require('multiaddr')\n\n/**\n * @typedef {import('./types').MatchesFunction} MatchesFunction\n * @typedef {import('./types').PartialMatchesFunction} PartialMatchesFunction\n * @typedef {import('./types').Mafmt} Mafmt\n */\n\n/*\n * Valid combinations\n */\nconst DNS4 = base('dns4')\nconst DNS6 = base('dns6')\nconst DNSADDR = base('dnsaddr')\nconst DNS = or(\n base('dns'),\n DNSADDR,\n DNS4,\n DNS6\n)\n\nconst IP = or(base('ip4'), base('ip6'))\nconst TCP = or(\n and(IP, base('tcp')),\n and(DNS, base('tcp'))\n)\nconst UDP = and(IP, base('udp'))\nconst UTP = and(UDP, base('utp'))\n\nconst QUIC = and(UDP, base('quic'))\n\nconst WebSockets = or(\n and(TCP, base('ws')),\n and(DNS, base('ws'))\n)\n\nconst WebSocketsSecure = or(\n and(TCP, base('wss')),\n and(DNS, base('wss'))\n)\n\nconst HTTP = or(\n and(TCP, base('http')),\n and(IP, base('http')),\n and(DNS, base('http'))\n)\n\nconst HTTPS = or(\n and(TCP, base('https')),\n and(IP, base('https')),\n and(DNS, base('https'))\n)\n\nconst WebRTCStar = or(\n and(WebSockets, base('p2p-webrtc-star'), base('p2p')),\n and(WebSocketsSecure, base('p2p-webrtc-star'), base('p2p')),\n and(WebSockets, base('p2p-webrtc-star')),\n and(WebSocketsSecure, base('p2p-webrtc-star'))\n)\n\nconst WebSocketStar = or(\n and(WebSockets, base('p2p-websocket-star'), base('p2p')),\n and(WebSocketsSecure, base('p2p-websocket-star'), base('p2p')),\n and(WebSockets, base('p2p-websocket-star')),\n and(WebSocketsSecure, base('p2p-websocket-star'))\n)\n\nconst WebRTCDirect = or(\n and(HTTP, base('p2p-webrtc-direct'), base('p2p')),\n and(HTTPS, base('p2p-webrtc-direct'), base('p2p')),\n and(HTTP, base('p2p-webrtc-direct')),\n and(HTTPS, base('p2p-webrtc-direct'))\n)\n\nconst Reliable = or(\n WebSockets,\n WebSocketsSecure,\n HTTP,\n HTTPS,\n WebRTCStar,\n WebRTCDirect,\n TCP,\n UTP,\n QUIC,\n DNS\n)\n\n// Unlike ws-star, stardust can run over any transport thus removing the requirement for websockets (but don't even think about running a stardust server over webrtc-star ;) )\nconst Stardust = or(\n and(Reliable, base('p2p-stardust'), base('p2p')),\n and(Reliable, base('p2p-stardust'))\n)\n\nconst _P2P = or(\n and(Reliable, base('p2p')),\n WebRTCStar,\n WebRTCDirect,\n base('p2p')\n)\n\nconst _Circuit = or(\n and(_P2P, base('p2p-circuit'), _P2P),\n and(_P2P, base('p2p-circuit')),\n and(base('p2p-circuit'), _P2P),\n and(Reliable, base('p2p-circuit')),\n and(base('p2p-circuit'), Reliable),\n base('p2p-circuit')\n)\n\nconst CircuitRecursive = () => or(\n and(_Circuit, CircuitRecursive),\n _Circuit\n)\n\nconst Circuit = CircuitRecursive()\n\nconst P2P = or(\n and(Circuit, _P2P, Circuit),\n and(_P2P, Circuit),\n and(Circuit, _P2P),\n Circuit,\n _P2P\n)\n\nmodule.exports = {\n DNS,\n DNS4,\n DNS6,\n DNSADDR,\n IP,\n TCP,\n UDP,\n QUIC,\n UTP,\n HTTP,\n HTTPS,\n WebSockets,\n WebSocketsSecure,\n WebSocketStar,\n WebRTCStar,\n WebRTCDirect,\n Reliable,\n Stardust,\n Circuit,\n P2P,\n IPFS: P2P\n}\n\n/*\n * Validation funcs\n */\n\n/**\n * @param {PartialMatchesFunction} partialMatch\n */\nfunction makeMatchesFunction (partialMatch) {\n /**\n * @type {MatchesFunction}\n */\n function matches (a) {\n if (!Multiaddr.isMultiaddr(a)) {\n try {\n a = new Multiaddr(a)\n } catch (err) { // catch error\n return false // also if it's invalid it's propably not matching as well so return false\n }\n }\n const out = partialMatch(a.protoNames())\n if (out === null) {\n return false\n }\n\n if (out === true || out === false) {\n return out\n }\n\n return out.length === 0\n }\n\n return matches\n}\n\n/**\n * @param {Array<Mafmt | (() => Mafmt)>} args\n * @returns {Mafmt}\n */\nfunction and (...args) {\n /**\n * @type {PartialMatchesFunction}\n */\n function partialMatch (a) {\n if (a.length < args.length) {\n return null\n }\n\n /** @type {boolean | string[] | null} */\n let out = a\n\n args.some((arg) => {\n out = typeof arg === 'function'\n ? arg().partialMatch(a)\n : arg.partialMatch(a)\n\n if (Array.isArray(out)) {\n a = out\n }\n\n if (out === null) {\n return true\n }\n\n return false\n })\n\n return out\n }\n\n return {\n toString: function () { return '{ ' + args.join(' ') + ' }' },\n input: args,\n matches: makeMatchesFunction(partialMatch),\n partialMatch: partialMatch\n }\n}\n\n/**\n * @param {Array<Mafmt | (() => Mafmt)>} args\n * @returns {Mafmt}\n */\nfunction or (...args) {\n /**\n * @type {PartialMatchesFunction}\n */\n function partialMatch (a) {\n let out = null\n args.some((arg) => {\n const res = typeof arg === 'function'\n ? arg().partialMatch(a)\n : arg.partialMatch(a)\n if (res) {\n out = res\n return true\n }\n return false\n })\n\n return out\n }\n\n const result = {\n toString: function () { return '{ ' + args.join(' ') + ' }' },\n input: args,\n matches: makeMatchesFunction(partialMatch),\n partialMatch: partialMatch\n }\n\n return result\n}\n\n/**\n * @param {string} n\n * @returns {Mafmt}\n */\nfunction base (n) {\n const name = n\n\n /**\n * @type {MatchesFunction}\n */\n function matches (a) {\n let ma\n\n if (typeof a === 'string' || a instanceof Uint8Array) {\n try {\n ma = new Multiaddr(a)\n } catch (err) { // catch error\n return false // also if it's invalid it's probably not matching as well so return false\n }\n } else {\n ma = a\n }\n\n const pnames = ma.protoNames()\n if (pnames.length === 1 && pnames[0] === name) {\n return true\n }\n return false\n }\n\n /**\n * @type {PartialMatchesFunction}\n */\n function partialMatch (protos) {\n if (protos.length === 0) {\n return null\n }\n\n if (protos[0] === name) {\n return protos.slice(1)\n }\n return null\n }\n\n return {\n toString: function () { return name },\n matches: matches,\n partialMatch: partialMatch\n }\n}\n","'use strict';\nconst isOptionObject = require('is-plain-obj');\n\nconst {hasOwnProperty} = Object.prototype;\nconst {propertyIsEnumerable} = Object;\nconst defineProperty = (object, name, value) => Object.defineProperty(object, name, {\n\tvalue,\n\twritable: true,\n\tenumerable: true,\n\tconfigurable: true\n});\n\nconst globalThis = this;\nconst defaultMergeOptions = {\n\tconcatArrays: false,\n\tignoreUndefined: false\n};\n\nconst getEnumerableOwnPropertyKeys = value => {\n\tconst keys = [];\n\n\tfor (const key in value) {\n\t\tif (hasOwnProperty.call(value, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\n\t/* istanbul ignore else */\n\tif (Object.getOwnPropertySymbols) {\n\t\tconst symbols = Object.getOwnPropertySymbols(value);\n\n\t\tfor (const symbol of symbols) {\n\t\t\tif (propertyIsEnumerable.call(value, symbol)) {\n\t\t\t\tkeys.push(symbol);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn keys;\n};\n\nfunction clone(value) {\n\tif (Array.isArray(value)) {\n\t\treturn cloneArray(value);\n\t}\n\n\tif (isOptionObject(value)) {\n\t\treturn cloneOptionObject(value);\n\t}\n\n\treturn value;\n}\n\nfunction cloneArray(array) {\n\tconst result = array.slice(0, 0);\n\n\tgetEnumerableOwnPropertyKeys(array).forEach(key => {\n\t\tdefineProperty(result, key, clone(array[key]));\n\t});\n\n\treturn result;\n}\n\nfunction cloneOptionObject(object) {\n\tconst result = Object.getPrototypeOf(object) === null ? Object.create(null) : {};\n\n\tgetEnumerableOwnPropertyKeys(object).forEach(key => {\n\t\tdefineProperty(result, key, clone(object[key]));\n\t});\n\n\treturn result;\n}\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {string[]} keys keys to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nconst mergeKeys = (merged, source, keys, config) => {\n\tkeys.forEach(key => {\n\t\tif (typeof source[key] === 'undefined' && config.ignoreUndefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not recurse into prototype chain of merged\n\t\tif (key in merged && merged[key] !== Object.getPrototypeOf(merged)) {\n\t\t\tdefineProperty(merged, key, merge(merged[key], source[key], config));\n\t\t} else {\n\t\t\tdefineProperty(merged, key, clone(source[key]));\n\t\t}\n\t});\n\n\treturn merged;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n *\n * see [Array.prototype.concat ( ...arguments )](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.concat)\n */\nconst concatArrays = (merged, source, config) => {\n\tlet result = merged.slice(0, 0);\n\tlet resultIndex = 0;\n\n\t[merged, source].forEach(array => {\n\t\tconst indices = [];\n\n\t\t// `result.concat(array)` with cloning\n\t\tfor (let k = 0; k < array.length; k++) {\n\t\t\tif (!hasOwnProperty.call(array, k)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tindices.push(String(k));\n\n\t\t\tif (array === merged) {\n\t\t\t\t// Already cloned\n\t\t\t\tdefineProperty(result, resultIndex++, array[k]);\n\t\t\t} else {\n\t\t\t\tdefineProperty(result, resultIndex++, clone(array[k]));\n\t\t\t}\n\t\t}\n\n\t\t// Merge non-index keys\n\t\tresult = mergeKeys(result, array, getEnumerableOwnPropertyKeys(array).filter(key => !indices.includes(key)), config);\n\t});\n\n\treturn result;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nfunction merge(merged, source, config) {\n\tif (config.concatArrays && Array.isArray(merged) && Array.isArray(source)) {\n\t\treturn concatArrays(merged, source, config);\n\t}\n\n\tif (!isOptionObject(source) || !isOptionObject(merged)) {\n\t\treturn clone(source);\n\t}\n\n\treturn mergeKeys(merged, source, getEnumerableOwnPropertyKeys(source), config);\n}\n\nmodule.exports = function (...options) {\n\tconst config = merge(clone(defaultMergeOptions), (this !== globalThis && this) || {}, defaultMergeOptions);\n\tlet merged = {_: {}};\n\n\tfor (const option of options) {\n\t\tif (option === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isOptionObject(option)) {\n\t\t\tthrow new TypeError('`' + option + '` is not an Option Object');\n\t\t}\n\n\t\tmerged = merge(merged, {_: option}, config);\n\t}\n\n\treturn merged._;\n};\n","module.exports = assert;\n\nfunction assert(val, msg) {\n if (!val)\n throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n if (l != r)\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\n};\n","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n if (Array.isArray(msg))\n return msg.slice();\n if (!msg)\n return [];\n var res = [];\n if (typeof msg !== 'string') {\n for (var i = 0; i < msg.length; i++)\n res[i] = msg[i] | 0;\n return res;\n }\n if (enc === 'hex') {\n msg = msg.replace(/[^a-z0-9]+/ig, '');\n if (msg.length % 2 !== 0)\n msg = '0' + msg;\n for (var i = 0; i < msg.length; i += 2)\n res.push(parseInt(msg[i] + msg[i + 1], 16));\n } else {\n for (var i = 0; i < msg.length; i++) {\n var c = msg.charCodeAt(i);\n var hi = c >> 8;\n var lo = c & 0xff;\n if (hi)\n res.push(hi, lo);\n else\n res.push(lo);\n }\n }\n return res;\n}\nutils.toArray = toArray;\n\nfunction zero2(word) {\n if (word.length === 1)\n return '0' + word;\n else\n return word;\n}\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n var res = '';\n for (var i = 0; i < msg.length; i++)\n res += zero2(msg[i].toString(16));\n return res;\n}\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n if (enc === 'hex')\n return toHex(arr);\n else\n return arr;\n};\n","const EventEmitter = require('events').EventEmitter\nconst { nanoid } = require('nanoid')\nconst {\n WORKER_REQUEST_READ_LOCK,\n WORKER_RELEASE_READ_LOCK,\n MASTER_GRANT_READ_LOCK,\n WORKER_REQUEST_WRITE_LOCK,\n WORKER_RELEASE_WRITE_LOCK,\n MASTER_GRANT_WRITE_LOCK\n} = require('./constants')\nconst observer = require('observable-webworkers')\n\nconst handleWorkerLockRequest = (emitter, masterEvent, requestType, releaseType, grantType) => {\n return (worker, event) => {\n if (!event || !event.data || event.data.type !== requestType) {\n return\n }\n\n const requestEvent = {\n type: event.data.type,\n name: event.data.name,\n identifier: event.data.identifier\n }\n\n emitter.emit(masterEvent, requestEvent.name, () => {\n // grant lock to worker\n worker.postMessage({\n type: grantType,\n name: requestEvent.name,\n identifier: requestEvent.identifier\n })\n\n // wait for worker to finish\n return new Promise((resolve) => {\n const releaseEventListener = (event) => {\n if (!event || !event.data) {\n return\n }\n\n const releaseEvent = {\n type: event.data.type,\n name: event.data.name,\n identifier: event.data.identifier\n }\n\n if (releaseEvent && releaseEvent.type === releaseType && releaseEvent.identifier === requestEvent.identifier) {\n worker.removeEventListener('message', releaseEventListener)\n resolve()\n }\n }\n\n worker.addEventListener('message', releaseEventListener)\n })\n })\n }\n}\n\nconst makeWorkerLockRequest = (name, requestType, grantType, releaseType) => {\n return () => {\n const id = nanoid()\n\n globalThis.postMessage({\n type: requestType,\n identifier: id,\n name\n })\n\n return new Promise((resolve) => {\n const listener = (event) => {\n if (!event || !event.data) {\n return\n }\n\n const responseEvent = {\n type: event.data.type,\n identifier: event.data.identifier\n }\n\n if (responseEvent && responseEvent.type === grantType && responseEvent.identifier === id) {\n globalThis.removeEventListener('message', listener)\n\n // grant lock\n resolve(() => {\n // release lock\n globalThis.postMessage({\n type: releaseType,\n identifier: id,\n name\n })\n })\n }\n }\n\n globalThis.addEventListener('message', listener)\n })\n }\n}\n\nconst defaultOptions = {\n singleProcess: false\n}\n\nmodule.exports = (options) => {\n options = Object.assign({}, defaultOptions, options)\n const isMaster = !!globalThis.document || options.singleProcess\n\n if (isMaster) {\n const emitter = new EventEmitter()\n\n observer.addEventListener('message', handleWorkerLockRequest(emitter, 'requestReadLock', WORKER_REQUEST_READ_LOCK, WORKER_RELEASE_READ_LOCK, MASTER_GRANT_READ_LOCK))\n observer.addEventListener('message', handleWorkerLockRequest(emitter, 'requestWriteLock', WORKER_REQUEST_WRITE_LOCK, WORKER_RELEASE_WRITE_LOCK, MASTER_GRANT_WRITE_LOCK))\n\n return emitter\n }\n\n return {\n isWorker: true,\n readLock: (name) => makeWorkerLockRequest(name, WORKER_REQUEST_READ_LOCK, MASTER_GRANT_READ_LOCK, WORKER_RELEASE_READ_LOCK),\n writeLock: (name) => makeWorkerLockRequest(name, WORKER_REQUEST_WRITE_LOCK, MASTER_GRANT_WRITE_LOCK, WORKER_RELEASE_WRITE_LOCK)\n }\n}\n","\nmodule.exports = {\n WORKER_REQUEST_READ_LOCK: 'lock:worker:request-read',\n WORKER_RELEASE_READ_LOCK: 'lock:worker:release-read',\n MASTER_GRANT_READ_LOCK: 'lock:master:grant-read',\n\n WORKER_REQUEST_WRITE_LOCK: 'lock:worker:request-write',\n WORKER_RELEASE_WRITE_LOCK: 'lock:worker:release-write',\n MASTER_GRANT_WRITE_LOCK: 'lock:master:grant-write'\n}\n","const node = require('./node')\nconst browser = require('./browser')\nconst { default: Queue } = require('p-queue')\nconst { timeout } = require('promise-timeout')\nconst observe = require('observable-webworkers')\n\nconst mutexes = {}\nlet implementation\n\nfunction createReleaseable (queue, options) {\n let res\n\n const p = new Promise((resolve) => {\n res = resolve\n })\n\n queue.add(() => timeout((() => {\n return new Promise((resolve) => {\n res(() => {\n resolve()\n })\n })\n })(), options.timeout))\n\n return p\n}\n\nconst createMutex = (name, options) => {\n if (implementation.isWorker) {\n return {\n readLock: implementation.readLock(name, options),\n writeLock: implementation.writeLock(name, options)\n }\n }\n\n const masterQueue = new Queue({ concurrency: 1 })\n let readQueue = null\n\n return {\n readLock: () => {\n // If there's already a read queue, just add the task to it\n if (readQueue) {\n return createReleaseable(readQueue, options)\n }\n\n // Create a new read queue\n readQueue = new Queue({\n concurrency: options.concurrency,\n autoStart: false\n })\n const localReadQueue = readQueue\n\n // Add the task to the read queue\n const readPromise = createReleaseable(readQueue, options)\n\n masterQueue.add(() => {\n // Start the task only once the master queue has completed processing\n // any previous tasks\n localReadQueue.start()\n\n // Once all the tasks in the read queue have completed, remove it so\n // that the next read lock will occur after any write locks that were\n // started in the interim\n return localReadQueue.onIdle()\n .then(() => {\n if (readQueue === localReadQueue) {\n readQueue = null\n }\n })\n })\n\n return readPromise\n },\n writeLock: () => {\n // Remove the read queue reference, so that any later read locks will be\n // added to a new queue that starts after this write lock has been\n // released\n readQueue = null\n\n return createReleaseable(masterQueue, options)\n }\n }\n}\n\nconst defaultOptions = {\n concurrency: Infinity,\n timeout: 84600000,\n global: global,\n singleProcess: false\n}\n\nmodule.exports = (name, options) => {\n if (!options) {\n options = {}\n }\n\n if (typeof name === 'object') {\n options = name\n name = 'lock'\n }\n\n if (!name) {\n name = 'lock'\n }\n\n options = Object.assign({}, defaultOptions, options)\n\n if (!implementation) {\n implementation = node(options) || browser(options)\n\n if (!implementation.isWorker) {\n // we are master, set up worker requests\n implementation.on('requestReadLock', (name, fn) => {\n if (!mutexes[name]) {\n return\n }\n\n mutexes[name].readLock()\n .then(release => fn().finally(() => release()))\n })\n\n implementation.on('requestWriteLock', async (name, fn) => {\n if (!mutexes[name]) {\n return\n }\n\n mutexes[name].writeLock()\n .then(release => fn().finally(() => release()))\n })\n }\n }\n\n if (!mutexes[name]) {\n mutexes[name] = createMutex(name, options)\n }\n\n return mutexes[name]\n}\n\nmodule.exports.Worker = function (script, Impl) {\n Impl = Impl || global.Worker\n let worker\n\n try {\n worker = new Impl(script)\n } catch (error) {\n if (error.message.includes('not a constructor')) {\n worker = Impl(script)\n }\n }\n\n if (!worker) {\n throw new Error('Could not create Worker from', Impl)\n }\n\n observe(worker)\n\n return worker\n}\n","const EventEmitter = require('events').EventEmitter\nconst { nanoid } = require('nanoid')\nconst {\n WORKER_REQUEST_READ_LOCK,\n WORKER_RELEASE_READ_LOCK,\n MASTER_GRANT_READ_LOCK,\n WORKER_REQUEST_WRITE_LOCK,\n WORKER_RELEASE_WRITE_LOCK,\n MASTER_GRANT_WRITE_LOCK\n} = require('./constants')\nlet cluster\n\nconst handleWorkerLockRequest = (emitter, masterEvent, requestType, releaseType, grantType) => {\n return (worker, requestEvent) => {\n if (requestEvent && requestEvent.type === requestType) {\n emitter.emit(masterEvent, requestEvent.name, () => {\n // grant lock to worker\n worker.send({\n type: grantType,\n name: requestEvent.name,\n identifier: requestEvent.identifier\n })\n\n // wait for worker to finish\n return new Promise((resolve) => {\n const releaseEventListener = (releaseEvent) => {\n if (releaseEvent && releaseEvent.type === releaseType && releaseEvent.identifier === requestEvent.identifier) {\n worker.removeListener('message', releaseEventListener)\n resolve()\n }\n }\n\n worker.on('message', releaseEventListener)\n })\n })\n }\n }\n}\n\nconst makeWorkerLockRequest = (name, requestType, grantType, releaseType) => {\n return () => {\n const id = nanoid()\n\n process.send({\n type: requestType,\n identifier: id,\n name\n })\n\n return new Promise((resolve) => {\n const listener = (event) => {\n if (event && event.type === grantType && event.identifier === id) {\n process.removeListener('message', listener)\n\n // grant lock\n resolve(() => {\n // release lock\n process.send({\n type: releaseType,\n identifier: id,\n name\n })\n })\n }\n }\n\n process.on('message', listener)\n })\n }\n}\n\nmodule.exports = (options) => {\n try {\n cluster = require('cluster')\n\n if (!Object.keys(cluster).length) {\n return\n }\n } catch (_) {\n return\n }\n\n if (cluster.isMaster || options.singleProcess) {\n const emitter = new EventEmitter()\n\n cluster.on('message', handleWorkerLockRequest(emitter, 'requestReadLock', WORKER_REQUEST_READ_LOCK, WORKER_RELEASE_READ_LOCK, MASTER_GRANT_READ_LOCK))\n cluster.on('message', handleWorkerLockRequest(emitter, 'requestWriteLock', WORKER_REQUEST_WRITE_LOCK, WORKER_RELEASE_WRITE_LOCK, MASTER_GRANT_WRITE_LOCK))\n\n return emitter\n }\n\n return {\n isWorker: true,\n readLock: (name) => makeWorkerLockRequest(name, WORKER_REQUEST_READ_LOCK, MASTER_GRANT_READ_LOCK, WORKER_RELEASE_READ_LOCK),\n writeLock: (name) => makeWorkerLockRequest(name, WORKER_REQUEST_WRITE_LOCK, MASTER_GRANT_WRITE_LOCK, WORKER_RELEASE_WRITE_LOCK)\n }\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","const { Multiaddr } = require('multiaddr')\n\nconst reduceValue = (_, v) => v\nconst tcpUri = (str, port, parts, opts) => {\n // return tcp when explicitly requested\n if (opts && opts.assumeHttp === false) return `tcp://${str}:${port}`\n // check if tcp is the last protocol in multiaddr\n let protocol = 'tcp'\n let explicitPort = `:${port}`\n const last = parts[parts.length - 1]\n if (last.protocol === 'tcp') {\n // assume http and produce clean urls\n protocol = port === '443' ? 'https' : 'http'\n explicitPort = port === '443' || port === '80' ? '' : explicitPort\n }\n return `${protocol}://${str}${explicitPort}`\n}\n\nconst Reducers = {\n ip4: reduceValue,\n ip6: (str, content, i, parts) => (\n parts.length === 1 && parts[0].protocol === 'ip6'\n ? content\n : `[${content}]`\n ),\n tcp: (str, content, i, parts, opts) => (\n parts.some(p => ['http', 'https', 'ws', 'wss'].includes(p.protocol))\n ? `${str}:${content}`\n : tcpUri(str, content, parts, opts)\n ),\n udp: (str, content) => `udp://${str}:${content}`,\n dnsaddr: reduceValue,\n dns4: reduceValue,\n dns6: reduceValue,\n ipfs: (str, content) => `${str}/ipfs/${content}`,\n p2p: (str, content) => `${str}/p2p/${content}`,\n http: str => `http://${str}`,\n https: str => `https://${str}`,\n ws: str => `ws://${str}`,\n wss: str => `wss://${str}`,\n 'p2p-websocket-star': str => `${str}/p2p-websocket-star`,\n 'p2p-webrtc-star': str => `${str}/p2p-webrtc-star`,\n 'p2p-webrtc-direct': str => `${str}/p2p-webrtc-direct`\n}\n\nmodule.exports = (multiaddr, opts) => {\n const ma = new Multiaddr(multiaddr)\n const parts = multiaddr.toString().split('/').slice(1)\n return ma\n .tuples()\n .map(tuple => ({\n protocol: parts.shift(),\n content: tuple[1] ? parts.shift() : null\n }))\n .reduce((str, part, i, parts) => {\n const reduce = Reducers[part.protocol]\n if (!reduce) throw new Error(`Unsupported protocol ${part.protocol}`)\n return reduce(str, part.content, i, parts, opts)\n }, '')\n}\n","'use strict'\n\nconst convert = require('./convert')\nconst protocols = require('./protocols-table')\nconst varint = require('varint')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\n\n// export codec\nmodule.exports = {\n stringToStringTuples,\n stringTuplesToString,\n\n tuplesToStringTuples,\n stringTuplesToTuples,\n\n bytesToTuples,\n tuplesToBytes,\n\n bytesToString,\n stringToBytes,\n\n fromString,\n fromBytes,\n validateBytes,\n isValidBytes,\n cleanPath,\n\n ParseError,\n protoFromTuple,\n\n sizeForAddr\n}\n\n// string -> [[str name, str addr]... ]\n/**\n * @param {string} str\n */\nfunction stringToStringTuples (str) {\n const tuples = []\n const parts = str.split('/').slice(1) // skip first empty elem\n if (parts.length === 1 && parts[0] === '') {\n return []\n }\n\n for (let p = 0; p < parts.length; p++) {\n const part = parts[p]\n const proto = protocols(part)\n\n if (proto.size === 0) {\n tuples.push([part])\n continue\n }\n\n p++ // advance addr part\n if (p >= parts.length) {\n throw ParseError('invalid address: ' + str)\n }\n\n // if it's a path proto, take the rest\n if (proto.path) {\n tuples.push([\n part,\n // TODO: should we need to check each path part to see if it's a proto?\n // This would allow for other protocols to be added after a unix path,\n // however it would have issues if the path had a protocol name in the path\n cleanPath(parts.slice(p).join('/'))\n ])\n break\n }\n\n tuples.push([part, parts[p]])\n }\n\n return tuples\n}\n\n// [[str name, str addr]... ] -> string\n/**\n * @param {[number, string?][]} tuples\n */\nfunction stringTuplesToString (tuples) {\n /** @type {Array<string | undefined>} */\n const parts = []\n tuples.map((tup) => {\n const proto = protoFromTuple(tup)\n parts.push(proto.name)\n if (tup.length > 1) {\n parts.push(tup[1])\n }\n return null\n })\n\n return cleanPath(parts.join('/'))\n}\n\n// [[str name, str addr]... ] -> [[int code, Uint8Array]... ]\n/**\n * @param {Array<string[] | string >} tuples\n * @returns {[number , Uint8Array?][]}\n */\nfunction stringTuplesToTuples (tuples) {\n return tuples.map((tup) => {\n if (!Array.isArray(tup)) {\n tup = [tup]\n }\n const proto = protoFromTuple(tup)\n if (tup.length > 1) {\n return [proto.code, convert.toBytes(proto.code, tup[1])]\n }\n return [proto.code]\n })\n}\n\n/**\n * Convert tuples to string tuples\n *\n * [[int code, Uint8Array]... ] -> [[int code, str addr]... ]\n *\n * @param {Array<[number, Uint8Array?]>} tuples\n * @returns {Array<[number, string?]>}\n */\n\nfunction tuplesToStringTuples (tuples) {\n return tuples.map(tup => {\n const proto = protoFromTuple(tup)\n if (tup[1]) {\n return [proto.code, convert.toString(proto.code, tup[1])]\n }\n return [proto.code]\n })\n}\n\n// [[int code, Uint8Array ]... ] -> Uint8Array\n/**\n * @param {[number, Uint8Array?][]} tuples\n */\nfunction tuplesToBytes (tuples) {\n return fromBytes(uint8ArrayConcat(tuples.map((/** @type {any[]} */ tup) => {\n const proto = protoFromTuple(tup)\n let buf = Uint8Array.from(varint.encode(proto.code))\n\n if (tup.length > 1) {\n buf = uint8ArrayConcat([buf, tup[1]]) // add address buffer\n }\n\n return buf\n })))\n}\n\n/**\n * @param {import(\"./types\").Protocol} p\n * @param {Uint8Array | number[]} addr\n */\nfunction sizeForAddr (p, addr) {\n if (p.size > 0) {\n return p.size / 8\n } else if (p.size === 0) {\n return 0\n } else {\n const size = varint.decode(addr)\n return size + varint.decode.bytes\n }\n}\n\n/**\n *\n * @param {Uint8Array} buf\n * @returns {Array<[number, Uint8Array?]>}\n */\nfunction bytesToTuples (buf) {\n /** @type {Array<[number, Uint8Array?]>} */\n const tuples = []\n let i = 0\n while (i < buf.length) {\n const code = varint.decode(buf, i)\n const n = varint.decode.bytes\n\n const p = protocols(code)\n\n const size = sizeForAddr(p, buf.slice(i + n))\n\n if (size === 0) {\n tuples.push([code])\n i += n\n continue\n }\n\n const addr = buf.slice(i + n, i + n + size)\n\n i += (size + n)\n\n if (i > buf.length) { // did not end _exactly_ at buffer.length\n throw ParseError('Invalid address Uint8Array: ' + uint8ArrayToString(buf, 'base16'))\n }\n\n // ok, tuple seems good.\n tuples.push([code, addr])\n }\n\n return tuples\n}\n\n// Uint8Array -> String\n/**\n * @param {Uint8Array} buf\n */\nfunction bytesToString (buf) {\n const a = bytesToTuples(buf)\n const b = tuplesToStringTuples(a)\n return stringTuplesToString(b)\n}\n\n// String -> Uint8Array\n/**\n * @param {string} str\n */\nfunction stringToBytes (str) {\n str = cleanPath(str)\n const a = stringToStringTuples(str)\n const b = stringTuplesToTuples(a)\n\n return tuplesToBytes(b)\n}\n\n// String -> Uint8Array\n/**\n * @param {string} str\n */\nfunction fromString (str) {\n return stringToBytes(str)\n}\n\n// Uint8Array -> Uint8Array\n/**\n * @param {Uint8Array} buf\n */\nfunction fromBytes (buf) {\n const err = validateBytes(buf)\n if (err) throw err\n return Uint8Array.from(buf) // copy\n}\n\n/**\n * @param {Uint8Array} buf\n */\nfunction validateBytes (buf) {\n try {\n bytesToTuples(buf) // try to parse. will throw if breaks\n } catch (err) {\n return err\n }\n}\n\n/**\n * @param {Uint8Array} buf\n */\nfunction isValidBytes (buf) {\n return validateBytes(buf) === undefined\n}\n\n/**\n * @param {string} str\n */\nfunction cleanPath (str) {\n return '/' + str.trim().split('/').filter((/** @type {any} */ a) => a).join('/')\n}\n\n/**\n * @param {string} str\n */\nfunction ParseError (str) {\n return new Error('Error parsing address: ' + str)\n}\n\n/**\n * @param {any[]} tup\n */\nfunction protoFromTuple (tup) {\n const proto = protocols(tup[0])\n return proto\n}\n","'use strict'\n\nconst ip = require('./ip')\nconst protocols = require('./protocols-table')\nconst { CID } = require('multiformats/cid')\nconst { base32 } = require('multiformats/bases/base32')\nconst { base58btc } = require('multiformats/bases/base58')\nconst Digest = require('multiformats/hashes/digest')\nconst varint = require('varint')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nmodule.exports = Convert\n\n// converts (serializes) addresses\n/**\n * @param {string} proto\n * @param {string | Uint8Array} a\n */\nfunction Convert (proto, a) {\n if (a instanceof Uint8Array) {\n return Convert.toString(proto, a)\n } else {\n return Convert.toBytes(proto, a)\n }\n}\n\n/**\n * Convert [code,Uint8Array] to string\n *\n * @param {number|string} proto\n * @param {Uint8Array} buf\n * @returns {string}\n */\nConvert.toString = function convertToString (proto, buf) {\n const protocol = protocols(proto)\n switch (protocol.code) {\n case 4: // ipv4\n case 41: // ipv6\n return bytes2ip(buf)\n\n case 6: // tcp\n case 273: // udp\n case 33: // dccp\n case 132: // sctp\n return bytes2port(buf).toString()\n\n case 53: // dns\n case 54: // dns4\n case 55: // dns6\n case 56: // dnsaddr\n case 400: // unix\n case 777: // memory\n return bytes2str(buf)\n\n case 421: // ipfs\n return bytes2mh(buf)\n case 444: // onion\n return bytes2onion(buf)\n case 445: // onion3\n return bytes2onion(buf)\n default:\n return uint8ArrayToString(buf, 'base16') // no clue. convert to hex\n }\n}\n\nConvert.toBytes = function convertToBytes (/** @type {string | number } */ proto, /** @type {string} */ str) {\n const protocol = protocols(proto)\n switch (protocol.code) {\n case 4: // ipv4\n return ip2bytes(str)\n case 41: // ipv6\n return ip2bytes(str)\n\n case 6: // tcp\n case 273: // udp\n case 33: // dccp\n case 132: // sctp\n return port2bytes(parseInt(str, 10))\n\n case 53: // dns\n case 54: // dns4\n case 55: // dns6\n case 56: // dnsaddr\n case 400: // unix\n case 777: // memory\n return str2bytes(str)\n\n case 421: // ipfs\n return mh2bytes(str)\n case 444: // onion\n return onion2bytes(str)\n case 445: // onion3\n return onion32bytes(str)\n default:\n return uint8ArrayFromString(str, 'base16') // no clue. convert from hex\n }\n}\n\n/**\n * @param {string} ipString\n */\nfunction ip2bytes (ipString) {\n if (!ip.isIP(ipString)) {\n throw new Error('invalid ip address')\n }\n return ip.toBytes(ipString)\n}\n\n/**\n * @param {Uint8Array} ipBuff\n */\nfunction bytes2ip (ipBuff) {\n const ipString = ip.toString(ipBuff)\n if (!ipString || !ip.isIP(ipString)) {\n throw new Error('invalid ip address')\n }\n return ipString\n}\n\n/**\n * @param {number} port\n */\nfunction port2bytes (port) {\n const buf = new ArrayBuffer(2)\n const view = new DataView(buf)\n view.setUint16(0, port)\n\n return new Uint8Array(buf)\n}\n\n/**\n * @param {Uint8Array} buf\n */\nfunction bytes2port (buf) {\n const view = new DataView(buf.buffer)\n return view.getUint16(buf.byteOffset)\n}\n\n/**\n * @param {string} str\n */\nfunction str2bytes (str) {\n const buf = uint8ArrayFromString(str)\n const size = Uint8Array.from(varint.encode(buf.length))\n return uint8ArrayConcat([size, buf], size.length + buf.length)\n}\n\n/**\n * @param {Uint8Array} buf\n */\nfunction bytes2str (buf) {\n const size = varint.decode(buf)\n buf = buf.slice(varint.decode.bytes)\n\n if (buf.length !== size) {\n throw new Error('inconsistent lengths')\n }\n\n return uint8ArrayToString(buf)\n}\n\n/**\n * @param {string} hash - base58btc string\n */\nfunction mh2bytes (hash) {\n let mh\n\n if (hash[0] === 'Q' || hash[0] === '1') {\n mh = Digest.decode(base58btc.decode(`z${hash}`)).bytes\n } else {\n mh = CID.parse(hash).multihash.bytes\n }\n\n // the address is a varint prefixed multihash string representation\n const size = Uint8Array.from(varint.encode(mh.length))\n return uint8ArrayConcat([size, mh], size.length + mh.length)\n}\n\n/**\n * Converts bytes to bas58btc string\n *\n * @param {Uint8Array} buf\n * @returns {string} base58btc string\n */\nfunction bytes2mh (buf) {\n const size = varint.decode(buf)\n const address = buf.slice(varint.decode.bytes)\n\n if (address.length !== size) {\n throw new Error('inconsistent lengths')\n }\n\n return uint8ArrayToString(address, 'base58btc')\n}\n\n/**\n * @param {string} str\n */\nfunction onion2bytes (str) {\n const addr = str.split(':')\n if (addr.length !== 2) {\n throw new Error('failed to parse onion addr: ' + addr + ' does not contain a port number')\n }\n if (addr[0].length !== 16) {\n throw new Error('failed to parse onion addr: ' + addr[0] + ' not a Tor onion address.')\n }\n\n // onion addresses do not include the multibase prefix, add it before decoding\n const buf = base32.decode('b' + addr[0])\n\n // onion port number\n const port = parseInt(addr[1], 10)\n if (port < 1 || port > 65536) {\n throw new Error('Port number is not in range(1, 65536)')\n }\n const portBuf = port2bytes(port)\n return uint8ArrayConcat([buf, portBuf], buf.length + portBuf.length)\n}\n\n/**\n * @param {string} str\n */\nfunction onion32bytes (str) {\n const addr = str.split(':')\n if (addr.length !== 2) {\n throw new Error('failed to parse onion addr: ' + addr + ' does not contain a port number')\n }\n if (addr[0].length !== 56) {\n throw new Error('failed to parse onion addr: ' + addr[0] + ' not a Tor onion3 address.')\n }\n // onion addresses do not include the multibase prefix, add it before decoding\n const buf = base32.decode('b' + addr[0])\n\n // onion port number\n const port = parseInt(addr[1], 10)\n if (port < 1 || port > 65536) {\n throw new Error('Port number is not in range(1, 65536)')\n }\n const portBuf = port2bytes(port)\n return uint8ArrayConcat([buf, portBuf], buf.length + portBuf.length)\n}\n\n/**\n * @param {Uint8Array} buf\n */\nfunction bytes2onion (buf) {\n const addrBytes = buf.slice(0, buf.length - 2)\n const portBytes = buf.slice(buf.length - 2)\n const addr = uint8ArrayToString(addrBytes, 'base32')\n const port = bytes2port(portBytes)\n return addr + ':' + port\n}\n","'use strict'\n\nconst codec = require('./codec')\nconst protocols = require('./protocols-table')\nconst varint = require('varint')\nconst { CID } = require('multiformats/cid')\nconst { base58btc } = require('multiformats/bases/base58')\nconst errCode = require('err-code')\nconst inspect = Symbol.for('nodejs.util.inspect.custom')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\n\n/**\n * @typedef {(addr: Multiaddr) => Promise<string[]>} Resolver\n * @typedef {string | Multiaddr | Uint8Array | null} MultiaddrInput\n * @typedef {import('./types').MultiaddrObject} MultiaddrObject\n * @typedef {import('./types').Protocol} Protocol\n */\n\n/** @type {Map<string, Resolver>} */\nconst resolvers = new Map()\nconst symbol = Symbol.for('@multiformats/js-multiaddr/multiaddr')\n\n/**\n * Creates a [multiaddr](https://github.com/multiformats/multiaddr) from\n * a Uint8Array, String or another Multiaddr instance\n * public key.\n *\n */\nclass Multiaddr {\n /**\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001')\n * // <Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>\n * ```\n *\n * @param {MultiaddrInput} [addr] - If String or Uint8Array, needs to adhere to the address format of a [multiaddr](https://github.com/multiformats/multiaddr#string-format)\n */\n constructor (addr) {\n // default\n if (addr == null) {\n addr = ''\n }\n\n // Define symbol\n Object.defineProperty(this, symbol, { value: true })\n\n if (addr instanceof Uint8Array) {\n /** @type {Uint8Array} - The raw bytes representing this multiaddress */\n this.bytes = codec.fromBytes(addr)\n } else if (typeof addr === 'string') {\n if (addr.length > 0 && addr.charAt(0) !== '/') {\n throw new Error(`multiaddr \"${addr}\" must start with a \"/\"`)\n }\n this.bytes = codec.fromString(addr)\n } else if (Multiaddr.isMultiaddr(addr)) { // Multiaddr\n this.bytes = codec.fromBytes(addr.bytes) // validate + copy buffer\n } else {\n throw new Error('addr must be a string, Buffer, or another Multiaddr')\n }\n }\n\n /**\n * Returns Multiaddr as a String\n *\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001').toString()\n * // '/ip4/127.0.0.1/tcp/4001'\n * ```\n */\n toString () {\n return codec.bytesToString(this.bytes)\n }\n\n /**\n * Returns Multiaddr as a JSON encoded object\n *\n * @example\n * ```js\n * JSON.stringify(new Multiaddr('/ip4/127.0.0.1/tcp/4001'))\n * // '/ip4/127.0.0.1/tcp/4001'\n * ```\n */\n toJSON () {\n return this.toString()\n }\n\n /**\n * Returns Multiaddr as a convinient options object to be used with net.createConnection\n *\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001').toOptions()\n * // { family: 4, host: '127.0.0.1', transport: 'tcp', port: 4001 }\n * ```\n */\n toOptions () {\n /** @type {MultiaddrObject} */\n const opts = {}\n const parsed = this.toString().split('/')\n opts.family = parsed[1] === 'ip4' ? 4 : 6\n opts.host = parsed[2]\n opts.transport = parsed[3]\n opts.port = parseInt(parsed[4])\n return opts\n }\n\n /**\n * Returns the protocols the Multiaddr is defined with, as an array of objects, in\n * left-to-right order. Each object contains the protocol code, protocol name,\n * and the size of its address space in bits.\n * [See list of protocols](https://github.com/multiformats/multiaddr/blob/master/protocols.csv)\n *\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001').protos()\n * // [ { code: 4, size: 32, name: 'ip4' },\n * // { code: 6, size: 16, name: 'tcp' } ]\n * ```\n *\n * @returns {Protocol[]} protocols - All the protocols the address is composed of\n */\n protos () {\n return this.protoCodes().map(code => Object.assign({}, protocols(code)))\n }\n\n /**\n * Returns the codes of the protocols in left-to-right order.\n * [See list of protocols](https://github.com/multiformats/multiaddr/blob/master/protocols.csv)\n *\n * @example\n * ```js\n * Multiaddr('/ip4/127.0.0.1/tcp/4001').protoCodes()\n * // [ 4, 6 ]\n * ```\n *\n * @returns {number[]} protocol codes\n */\n protoCodes () {\n const codes = []\n const buf = this.bytes\n let i = 0\n while (i < buf.length) {\n const code = varint.decode(buf, i)\n const n = varint.decode.bytes\n\n const p = protocols(code)\n const size = codec.sizeForAddr(p, buf.slice(i + n))\n\n i += (size + n)\n codes.push(code)\n }\n\n return codes\n }\n\n /**\n * Returns the names of the protocols in left-to-right order.\n * [See list of protocols](https://github.com/multiformats/multiaddr/blob/master/protocols.csv)\n *\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001').protoNames()\n * // [ 'ip4', 'tcp' ]\n * ```\n *\n * @returns {string[]} protocol names\n */\n protoNames () {\n return this.protos().map(proto => proto.name)\n }\n\n /**\n * Returns a tuple of parts\n *\n * @example\n * ```js\n * new Multiaddr(\"/ip4/127.0.0.1/tcp/4001\").tuples()\n * // [ [ 4, <Buffer 7f 00 00 01> ], [ 6, <Buffer 0f a1> ] ]\n * ```\n */\n tuples () {\n return codec.bytesToTuples(this.bytes)\n }\n\n /**\n * Returns a tuple of string/number parts\n * - tuples[][0] = code of protocol\n * - tuples[][1] = contents of address\n *\n * @example\n * ```js\n * new Multiaddr(\"/ip4/127.0.0.1/tcp/4001\").stringTuples()\n * // [ [ 4, '127.0.0.1' ], [ 6, '4001' ] ]\n * ```\n */\n stringTuples () {\n const t = codec.bytesToTuples(this.bytes)\n return codec.tuplesToStringTuples(t)\n }\n\n /**\n * Encapsulates a Multiaddr in another Multiaddr\n *\n * @example\n * ```js\n * const mh1 = new Multiaddr('/ip4/8.8.8.8/tcp/1080')\n * // <Multiaddr 0408080808060438 - /ip4/8.8.8.8/tcp/1080>\n *\n * const mh2 = new Multiaddr('/ip4/127.0.0.1/tcp/4001')\n * // <Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>\n *\n * const mh3 = mh1.encapsulate(mh2)\n * // <Multiaddr 0408080808060438047f000001060fa1 - /ip4/8.8.8.8/tcp/1080/ip4/127.0.0.1/tcp/4001>\n *\n * mh3.toString()\n * // '/ip4/8.8.8.8/tcp/1080/ip4/127.0.0.1/tcp/4001'\n * ```\n *\n * @param {MultiaddrInput} addr - Multiaddr to add into this Multiaddr\n */\n encapsulate (addr) {\n addr = new Multiaddr(addr)\n return new Multiaddr(this.toString() + addr.toString())\n }\n\n /**\n * Decapsulates a Multiaddr from another Multiaddr\n *\n * @example\n * ```js\n * const mh1 = new Multiaddr('/ip4/8.8.8.8/tcp/1080')\n * // <Multiaddr 0408080808060438 - /ip4/8.8.8.8/tcp/1080>\n *\n * const mh2 = new Multiaddr('/ip4/127.0.0.1/tcp/4001')\n * // <Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>\n *\n * const mh3 = mh1.encapsulate(mh2)\n * // <Multiaddr 0408080808060438047f000001060fa1 - /ip4/8.8.8.8/tcp/1080/ip4/127.0.0.1/tcp/4001>\n *\n * mh3.decapsulate(mh2).toString()\n * // '/ip4/8.8.8.8/tcp/1080'\n * ```\n *\n * @param {Multiaddr | string} addr - Multiaddr to remove from this Multiaddr\n * @returns {Multiaddr}\n */\n decapsulate (addr) {\n const addrString = addr.toString()\n const s = this.toString()\n const i = s.lastIndexOf(addrString)\n if (i < 0) {\n throw new Error('Address ' + this + ' does not contain subaddress: ' + addr)\n }\n return new Multiaddr(s.slice(0, i))\n }\n\n /**\n * A more reliable version of `decapsulate` if you are targeting a\n * specific code, such as 421 (the `p2p` protocol code). The last index of the code\n * will be removed from the `Multiaddr`, and a new instance will be returned.\n * If the code is not present, the original `Multiaddr` is returned.\n *\n * @example\n * ```js\n * const addr = new Multiaddr('/ip4/0.0.0.0/tcp/8080/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC')\n * // <Multiaddr 0400... - /ip4/0.0.0.0/tcp/8080/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSupNKC>\n *\n * addr.decapsulateCode(421).toString()\n * // '/ip4/0.0.0.0/tcp/8080'\n *\n * new Multiaddr('/ip4/127.0.0.1/tcp/8080').decapsulateCode(421).toString()\n * // '/ip4/127.0.0.1/tcp/8080'\n * ```\n *\n * @param {number} code - The code of the protocol to decapsulate from this Multiaddr\n * @returns {Multiaddr}\n */\n decapsulateCode (code) {\n const tuples = this.tuples()\n for (let i = tuples.length - 1; i >= 0; i--) {\n if (tuples[i][0] === code) {\n return new Multiaddr(codec.tuplesToBytes(tuples.slice(0, i)))\n }\n }\n return this\n }\n\n /**\n * Extract the peerId if the multiaddr contains one\n *\n * @example\n * ```js\n * const mh1 = new Multiaddr('/ip4/8.8.8.8/tcp/1080/ipfs/QmValidBase58string')\n * // <Multiaddr 0408080808060438 - /ip4/8.8.8.8/tcp/1080/ipfs/QmValidBase58string>\n *\n * // should return QmValidBase58string or null if the id is missing or invalid\n * const peerId = mh1.getPeerId()\n * ```\n *\n * @returns {string | null} peerId - The id of the peer or null if invalid or missing from the ma\n */\n getPeerId () {\n try {\n const tuples = this.stringTuples().filter((tuple) => {\n if (tuple[0] === protocols.names.ipfs.code) {\n return true\n }\n return false\n })\n\n // Get the last ipfs tuple ['ipfs', 'peerid string']\n const tuple = tuples.pop()\n if (tuple && tuple[1]) {\n const peerIdStr = tuple[1]\n\n // peer id is base58btc encoded string but not multibase encoded so add the `z`\n // prefix so we can validate that it is correctly encoded\n if (peerIdStr[0] === 'Q' || peerIdStr[0] === '1') {\n return uint8ArrayToString(base58btc.decode(`z${peerIdStr}`), 'base58btc')\n }\n\n // try to parse peer id as CID\n return uint8ArrayToString(CID.parse(peerIdStr).multihash.bytes, 'base58btc')\n }\n\n return null\n } catch (e) {\n return null\n }\n }\n\n /**\n * Extract the path if the multiaddr contains one\n *\n * @example\n * ```js\n * const mh1 = new Multiaddr('/ip4/8.8.8.8/tcp/1080/unix/tmp/p2p.sock')\n * // <Multiaddr 0408080808060438 - /ip4/8.8.8.8/tcp/1080/unix/tmp/p2p.sock>\n *\n * // should return utf8 string or null if the id is missing or invalid\n * const path = mh1.getPath()\n * ```js\n *\n * @returns {string | null} path - The path of the multiaddr, or null if no path protocol is present\n */\n getPath () {\n let path = null\n try {\n path = this.stringTuples().filter((tuple) => {\n const proto = protocols(tuple[0])\n if (proto.path) {\n return true\n }\n return false\n })[0][1]\n\n if (!path) {\n path = null\n }\n } catch (e) {\n path = null\n }\n return path\n }\n\n /**\n * Checks if two Multiaddrs are the same\n *\n * @example\n * ```js\n * const mh1 = new Multiaddr('/ip4/8.8.8.8/tcp/1080')\n * // <Multiaddr 0408080808060438 - /ip4/8.8.8.8/tcp/1080>\n *\n * const mh2 = new Multiaddr('/ip4/127.0.0.1/tcp/4001')\n * // <Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>\n *\n * mh1.equals(mh1)\n * // true\n *\n * mh1.equals(mh2)\n * // false\n * ```\n *\n * @param {Multiaddr} addr\n * @returns {boolean}\n */\n equals (addr) {\n return uint8ArrayEquals(this.bytes, addr.bytes)\n }\n\n /**\n * Resolve multiaddr if containing resolvable hostname.\n *\n * @example\n * ```js\n * Multiaddr.resolvers.set('dnsaddr', resolverFunction)\n * const mh1 = new Multiaddr('/dnsaddr/bootstrap.libp2p.io/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb')\n * const resolvedMultiaddrs = await mh1.resolve()\n * // [\n * // <Multiaddr 04934b5353060fa1a503221220c10f9319dac35c270a6b74cd644cb3acfc1f6efc8c821f8eb282599fd1814f64 - /ip4/147.75.83.83/tcp/4001/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb>,\n * // <Multiaddr 04934b53530601bbde03a503221220c10f9319dac35c270a6b74cd644cb3acfc1f6efc8c821f8eb282599fd1814f64 - /ip4/147.75.83.83/tcp/443/wss/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb>,\n * // <Multiaddr 04934b535391020fa1cc03a503221220c10f9319dac35c270a6b74cd644cb3acfc1f6efc8c821f8eb282599fd1814f64 - /ip4/147.75.83.83/udp/4001/quic/p2p/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb>\n * // ]\n * ```\n *\n * @returns {Promise<Array<Multiaddr>>}\n */\n async resolve () {\n const resolvableProto = this.protos().find((p) => p.resolvable)\n\n // Multiaddr is not resolvable?\n if (!resolvableProto) {\n return [this]\n }\n\n const resolver = resolvers.get(resolvableProto.name)\n if (!resolver) {\n throw errCode(new Error(`no available resolver for ${resolvableProto.name}`), 'ERR_NO_AVAILABLE_RESOLVER')\n }\n\n const addresses = await resolver(this)\n return addresses.map((a) => new Multiaddr(a))\n }\n\n /**\n * Gets a Multiaddrs node-friendly address object. Note that protocol information\n * is left out: in Node (and most network systems) the protocol is unknowable\n * given only the address.\n *\n * Has to be a ThinWaist Address, otherwise throws error\n *\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001').nodeAddress()\n * // {family: 4, address: '127.0.0.1', port: 4001}\n * ```\n *\n * @returns {{family: 4 | 6, address: string, port: number}}\n * @throws {Error} Throws error if Multiaddr is not a Thin Waist address\n */\n nodeAddress () {\n const codes = this.protoCodes()\n const names = this.protoNames()\n const parts = this.toString().split('/').slice(1)\n\n if (parts.length < 4) {\n throw new Error('multiaddr must have a valid format: \"/{ip4, ip6, dns4, dns6}/{address}/{tcp, udp}/{port}\".')\n } else if (codes[0] !== 4 && codes[0] !== 41 && codes[0] !== 54 && codes[0] !== 55) {\n throw new Error(`no protocol with name: \"'${names[0]}'\". Must have a valid family name: \"{ip4, ip6, dns4, dns6}\".`)\n } else if (parts[2] !== 'tcp' && parts[2] !== 'udp') {\n throw new Error(`no protocol with name: \"'${names[1]}'\". Must have a valid transport protocol: \"{tcp, udp}\".`)\n }\n\n return {\n family: (codes[0] === 41 || codes[0] === 55) ? 6 : 4,\n address: parts[1],\n port: parseInt(parts[3]) // tcp or udp port\n }\n }\n\n /**\n * Returns if a Multiaddr is a Thin Waist address or not.\n *\n * Thin Waist is if a Multiaddr adheres to the standard combination of:\n *\n * `{IPv4, IPv6}/{TCP, UDP}`\n *\n * @example\n * ```js\n * const mh1 = new Multiaddr('/ip4/127.0.0.1/tcp/4001')\n * // <Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>\n * const mh2 = new Multiaddr('/ip4/192.168.2.1/tcp/5001')\n * // <Multiaddr 04c0a80201061389 - /ip4/192.168.2.1/tcp/5001>\n * const mh3 = mh1.encapsulate(mh2)\n * // <Multiaddr 047f000001060fa104c0a80201061389 - /ip4/127.0.0.1/tcp/4001/ip4/192.168.2.1/tcp/5001>\n * const mh4 = new Multiaddr('/ip4/127.0.0.1/tcp/2000/wss/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2a')\n * // <Multiaddr 047f0000010607d0de039302a503221220d52ebb89d85b02a284948203a62ff28389c57c9f42beec4ec20db76a64835843 - /ip4/127.0.0.1/tcp/2000/wss/p2p-webrtc-star/p2p/QmcgpsyWgH8Y8ajJz1Cu72KnS5uo2Aa2LpzU7kinSooo2a>\n * mh1.isThinWaistAddress()\n * // true\n * mh2.isThinWaistAddress()\n * // true\n * mh3.isThinWaistAddress()\n * // false\n * mh4.isThinWaistAddress()\n * // false\n * ```\n *\n * @param {Multiaddr} [addr] - Defaults to using `this` instance\n */\n isThinWaistAddress (addr) {\n const protos = (addr || this).protos()\n\n if (protos.length !== 2) {\n return false\n }\n\n if (protos[0].code !== 4 && protos[0].code !== 41) {\n return false\n }\n if (protos[1].code !== 6 && protos[1].code !== 273) {\n return false\n }\n return true\n }\n\n /**\n * Creates a Multiaddr from a node-friendly address object\n *\n * @example\n * ```js\n * Multiaddr.fromNodeAddress({address: '127.0.0.1', port: '4001'}, 'tcp')\n * // <Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>\n * ```\n *\n * @param {{family: 4 | 6, address: string, port: number}} addr\n * @param {string} transport\n */\n static fromNodeAddress (addr, transport) {\n if (!addr) { throw new Error('requires node address object') }\n if (!transport) { throw new Error('requires transport protocol') }\n let ip\n switch (addr.family) {\n case 4:\n ip = 'ip4'\n break\n case 6:\n ip = 'ip6'\n break\n default:\n throw Error(`Invalid addr family. Got '${addr.family}' instead of 4 or 6`)\n }\n return new Multiaddr('/' + [ip, addr.address, transport, addr.port].join('/'))\n }\n\n /**\n * Returns if something is a Multiaddr that is a name\n *\n * @param {Multiaddr} addr\n * @returns {boolean} isName\n */\n static isName (addr) {\n if (!Multiaddr.isMultiaddr(addr)) {\n return false\n }\n\n // if a part of the multiaddr is resolvable, then return true\n return addr.protos().some((proto) => proto.resolvable)\n }\n\n /**\n * Check if object is a CID instance\n *\n * @param {any} value\n * @returns {value is Multiaddr}\n */\n static isMultiaddr (value) {\n return value instanceof Multiaddr || Boolean(value && value[symbol])\n }\n\n /**\n * Returns Multiaddr as a human-readable string.\n * For post Node.js v10.0.0.\n * https://nodejs.org/api/deprecations.html#deprecations_dep0079_custom_inspection_function_on_objects_via_inspect\n *\n * @example\n * ```js\n * console.log(new Multiaddr('/ip4/127.0.0.1/tcp/4001'))\n * // '<Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>'\n * ```\n *\n * @returns {string}\n */\n [inspect] () {\n return '<Multiaddr ' +\n uint8ArrayToString(this.bytes, 'base16') + ' - ' +\n codec.bytesToString(this.bytes) + '>'\n }\n\n /**\n * Returns Multiaddr as a human-readable string.\n * Fallback for pre Node.js v10.0.0.\n * https://nodejs.org/api/deprecations.html#deprecations_dep0079_custom_inspection_function_on_objects_via_inspect\n *\n * @example\n * ```js\n * new Multiaddr('/ip4/127.0.0.1/tcp/4001').inspect()\n * // '<Multiaddr 047f000001060fa1 - /ip4/127.0.0.1/tcp/4001>'\n * ```\n *\n * @returns {string}\n */\n inspect () {\n return '<Multiaddr ' +\n uint8ArrayToString(this.bytes, 'base16') + ' - ' +\n codec.bytesToString(this.bytes) + '>'\n }\n}\n\n/**\n * Object containing table, names and codes of all supported protocols.\n * To get the protocol values from a Multiaddr, you can use\n * [`.protos()`](#multiaddrprotos),\n * [`.protoCodes()`](#multiaddrprotocodes) or\n * [`.protoNames()`](#multiaddrprotonames)\n *\n * @returns {{table: Array, names: Object, codes: Object}}\n */\nMultiaddr.protocols = protocols\n\nMultiaddr.resolvers = resolvers\n\n/**\n * Static factory\n *\n * @param {MultiaddrInput} addr\n */\nfunction multiaddr (addr) {\n return new Multiaddr(addr)\n}\n\nmodule.exports = { Multiaddr, multiaddr, protocols, resolvers }\n","'use strict'\n\nconst isIp = require('is-ip')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\n\nconst isIP = isIp\nconst isV4 = isIp.v4\nconst isV6 = isIp.v6\n\n// Copied from https://github.com/indutny/node-ip/blob/master/lib/ip.js#L7\n// @ts-ignore - this is copied from the link above better to keep it the same\nconst toBytes = function (ip, buff, offset) {\n offset = ~~offset\n\n let result\n\n if (isV4(ip)) {\n result = buff || new Uint8Array(offset + 4)\n // @ts-ignore\n // eslint-disable-next-line array-callback-return\n ip.split(/\\./g).map(function (byte) {\n result[offset++] = parseInt(byte, 10) & 0xff\n })\n } else if (isV6(ip)) {\n const sections = ip.split(':', 8)\n\n let i\n for (i = 0; i < sections.length; i++) {\n const isv4 = isV4(sections[i])\n let v4Buffer\n\n if (isv4) {\n v4Buffer = toBytes(sections[i])\n sections[i] = uint8ArrayToString(v4Buffer.slice(0, 2), 'base16')\n }\n\n if (v4Buffer && ++i < 8) {\n sections.splice(i, 0, uint8ArrayToString(v4Buffer.slice(2, 4), 'base16'))\n }\n }\n\n if (sections[0] === '') {\n while (sections.length < 8) sections.unshift('0')\n } else if (sections[sections.length - 1] === '') {\n while (sections.length < 8) sections.push('0')\n } else if (sections.length < 8) {\n for (i = 0; i < sections.length && sections[i] !== ''; i++);\n const argv = [i, '1']\n for (i = 9 - sections.length; i > 0; i--) {\n argv.push('0')\n }\n sections.splice.apply(sections, argv)\n }\n\n result = buff || new Uint8Array(offset + 16)\n for (i = 0; i < sections.length; i++) {\n const word = parseInt(sections[i], 16)\n result[offset++] = (word >> 8) & 0xff\n result[offset++] = word & 0xff\n }\n }\n\n if (!result) {\n throw Error('Invalid ip address: ' + ip)\n }\n\n return result\n}\n\n// Copied from https://github.com/indutny/node-ip/blob/master/lib/ip.js#L63\n// @ts-ignore - this is copied from the link above better to keep it the same\nconst toString = function (buff, offset, length) {\n offset = ~~offset\n length = length || (buff.length - offset)\n\n const result = []\n let string\n const view = new DataView(buff.buffer)\n if (length === 4) {\n // IPv4\n for (let i = 0; i < length; i++) {\n result.push(buff[offset + i])\n }\n string = result.join('.')\n } else if (length === 16) {\n // IPv6\n for (let i = 0; i < length; i += 2) {\n result.push(view.getUint16(offset + i).toString(16))\n }\n string = result.join(':')\n string = string.replace(/(^|:)0(:0)*:0(:|$)/, '$1::$3')\n string = string.replace(/:{3,4}/, '::')\n }\n\n return string\n}\n\nmodule.exports = {\n isIP,\n isV4,\n isV6,\n toBytes,\n toString\n}\n","'use strict'\n/** @typedef {import(\"./types\").Protocol} Protocol */\n\n/**\n * Protocols\n *\n * @param {number | string} proto\n * @returns {Protocol}\n */\nfunction Protocols (proto) {\n if (typeof (proto) === 'number') {\n if (Protocols.codes[proto]) {\n return Protocols.codes[proto]\n }\n\n throw new Error('no protocol with code: ' + proto)\n } else if (typeof (proto) === 'string') {\n if (Protocols.names[proto]) {\n return Protocols.names[proto]\n }\n\n throw new Error('no protocol with name: ' + proto)\n }\n\n throw new Error('invalid protocol id type: ' + proto)\n}\n\nconst V = -1\nProtocols.lengthPrefixedVarSize = V\nProtocols.V = V\n\n/** @type {Array<[number, number, string, (string|boolean)?, string?]>} */\nProtocols.table = [\n [4, 32, 'ip4'],\n [6, 16, 'tcp'],\n [33, 16, 'dccp'],\n [41, 128, 'ip6'],\n [42, V, 'ip6zone'],\n [53, V, 'dns', 'resolvable'],\n [54, V, 'dns4', 'resolvable'],\n [55, V, 'dns6', 'resolvable'],\n [56, V, 'dnsaddr', 'resolvable'],\n [132, 16, 'sctp'],\n [273, 16, 'udp'],\n [275, 0, 'p2p-webrtc-star'],\n [276, 0, 'p2p-webrtc-direct'],\n [277, 0, 'p2p-stardust'],\n [290, 0, 'p2p-circuit'],\n [301, 0, 'udt'],\n [302, 0, 'utp'],\n [400, V, 'unix', false, 'path'],\n // `ipfs` is added before `p2p` for legacy support.\n // All text representations will default to `p2p`, but `ipfs` will\n // still be supported\n [421, V, 'ipfs'],\n // `p2p` is the preferred name for 421, and is now the default\n [421, V, 'p2p'],\n [443, 0, 'https'],\n [444, 96, 'onion'],\n [445, 296, 'onion3'],\n [446, V, 'garlic64'],\n [460, 0, 'quic'],\n [477, 0, 'ws'],\n [478, 0, 'wss'],\n [479, 0, 'p2p-websocket-star'],\n [480, 0, 'http'],\n [777, V, 'memory']\n]\n/** @type {Record<string,Protocol>} */\nProtocols.names = {}\n/** @type {Record<number,Protocol>} */\nProtocols.codes = {}\n\n// populate tables\nProtocols.table.map(row => {\n const proto = p.apply(null, row)\n Protocols.codes[proto.code] = proto\n Protocols.names[proto.name] = proto\n return null\n})\n\nProtocols.object = p\n\n/**\n *\n * Create a protocol\n *\n * @param {number} code\n * @param {number} size\n * @param {string} name\n * @param {any} [resolvable]\n * @param {any} [path]\n * @returns {Protocol}\n */\nfunction p (code, size, name, resolvable, path) {\n return {\n code,\n size,\n name,\n resolvable: Boolean(resolvable),\n path: Boolean(path)\n }\n}\n\nmodule.exports = Protocols\n","'use strict'\n\n/** @type {import('dns').promises.Resolver} */\n// @ts-ignore - has no types\nconst dns = require('dns-over-http-resolver')\n\nmodule.exports = dns\n","'use strict'\n\nconst protocols = require('../protocols-table')\n\nconst { code: dnsaddrCode } = protocols('dnsaddr')\n\n/**\n * @typedef {import('..').Multiaddr} Multiaddr\n */\n\n/**\n * Resolver for dnsaddr addresses.\n *\n * @param {Multiaddr} addr\n * @returns {Promise<string[]>}\n */\nasync function dnsaddrResolver (addr) {\n const Resolver = require('./dns')\n const resolver = new Resolver()\n\n const peerId = addr.getPeerId()\n const [, hostname] = addr.stringTuples().find(([proto]) => proto === dnsaddrCode) || []\n\n const records = await resolver.resolveTxt(`_dnsaddr.${hostname}`)\n let addresses = records.flat().map((a) => a.split('=')[1])\n\n if (peerId) {\n addresses = addresses.filter((entry) => entry.includes(peerId))\n }\n\n return addresses\n}\n\nmodule.exports = {\n dnsaddrResolver\n}\n","'use strict'\n\nconst { encodeText } = require('./util')\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n\n/**\n * Class to encode/decode in the supported Bases\n *\n */\nclass Base {\n /**\n * @param {BaseName} name\n * @param {BaseCode} code\n * @param {CodecFactory} factory\n * @param {string} alphabet\n */\n constructor (name, code, factory, alphabet) {\n this.name = name\n this.code = code\n this.codeBuf = encodeText(this.code)\n this.alphabet = alphabet\n this.codec = factory(alphabet)\n }\n\n /**\n * @param {Uint8Array} buf\n * @returns {string}\n */\n encode (buf) {\n return this.codec.encode(buf)\n }\n\n /**\n * @param {string} string\n * @returns {Uint8Array}\n */\n decode (string) {\n for (const char of string) {\n if (this.alphabet && this.alphabet.indexOf(char) < 0) {\n throw new Error(`invalid character '${char}' in '${string}'`)\n }\n }\n return this.codec.decode(string)\n }\n}\n\nmodule.exports = Base\n","'use strict'\n\nconst baseX = require('@multiformats/base-x')\nconst Base = require('./base.js')\nconst { rfc4648 } = require('./rfc4648')\nconst { decodeText, encodeText } = require('./util')\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n/** @typedef {import('./types').Codec} Codec */\n/** @typedef {import('./types').BaseName} BaseName */\n/** @typedef {import('./types').BaseCode} BaseCode */\n\n/** @type {CodecFactory} */\nconst identity = () => {\n return {\n encode: decodeText,\n decode: encodeText\n }\n}\n\n/**\n *\n * name, code, implementation, alphabet\n *\n * @type {Array<[BaseName, BaseCode, CodecFactory, string]>}\n */\nconst constants = [\n ['identity', '\\x00', identity, ''],\n ['base2', '0', rfc4648(1), '01'],\n ['base8', '7', rfc4648(3), '01234567'],\n ['base10', '9', baseX, '0123456789'],\n ['base16', 'f', rfc4648(4), '0123456789abcdef'],\n ['base16upper', 'F', rfc4648(4), '0123456789ABCDEF'],\n ['base32hex', 'v', rfc4648(5), '0123456789abcdefghijklmnopqrstuv'],\n ['base32hexupper', 'V', rfc4648(5), '0123456789ABCDEFGHIJKLMNOPQRSTUV'],\n ['base32hexpad', 't', rfc4648(5), '0123456789abcdefghijklmnopqrstuv='],\n ['base32hexpadupper', 'T', rfc4648(5), '0123456789ABCDEFGHIJKLMNOPQRSTUV='],\n ['base32', 'b', rfc4648(5), 'abcdefghijklmnopqrstuvwxyz234567'],\n ['base32upper', 'B', rfc4648(5), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'],\n ['base32pad', 'c', rfc4648(5), 'abcdefghijklmnopqrstuvwxyz234567='],\n ['base32padupper', 'C', rfc4648(5), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567='],\n ['base32z', 'h', rfc4648(5), 'ybndrfg8ejkmcpqxot1uwisza345h769'],\n ['base36', 'k', baseX, '0123456789abcdefghijklmnopqrstuvwxyz'],\n ['base36upper', 'K', baseX, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'],\n ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\n ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\n ['base64', 'm', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\n ['base64pad', 'M', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\n ['base64url', 'u', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\n ['base64urlpad', 'U', rfc4648(6), 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\n]\n\n/** @type {Record<BaseName,Base>} */\nconst names = constants.reduce((prev, tupple) => {\n prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\n return prev\n}, /** @type {Record<BaseName,Base>} */({}))\n\n/** @type {Record<BaseCode,Base>} */\nconst codes = constants.reduce((prev, tupple) => {\n prev[tupple[1]] = names[tupple[0]]\n return prev\n}, /** @type {Record<BaseCode,Base>} */({}))\n\nmodule.exports = {\n names,\n codes\n}\n","/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n *\n */\n'use strict'\n\nconst constants = require('./constants')\nconst { encodeText, decodeText, concat } = require('./util')\n\n/** @typedef {import('./base')} Base */\n/** @typedef {import(\"./types\").BaseNameOrCode} BaseNameOrCode */\n/** @typedef {import(\"./types\").BaseCode} BaseCode */\n/** @typedef {import(\"./types\").BaseName} BaseName */\n\n/**\n * Create a new Uint8Array with the multibase varint+code.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be prefixed with multibase.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction multibase (nameOrCode, buf) {\n if (!buf) {\n throw new Error('requires an encoded Uint8Array')\n }\n const { name, codeBuf } = encoding(nameOrCode)\n validEncode(name, buf)\n\n return concat([codeBuf, buf], codeBuf.length + buf.length)\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {BaseNameOrCode} nameOrCode - The multibase name or code number.\n * @param {Uint8Array} buf - The data to be encoded.\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction encode (nameOrCode, buf) {\n const enc = encoding(nameOrCode)\n const data = encodeText(enc.encode(buf))\n\n return concat([enc.codeBuf, data], enc.codeBuf.length + data.length)\n}\n\n/**\n * Takes a Uint8Array or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Uint8Array|string} data\n * @returns {Uint8Array}\n * @throws {Error} Will throw if the encoding is not supported\n *\n */\nfunction decode (data) {\n if (data instanceof Uint8Array) {\n data = decodeText(data)\n }\n const prefix = data[0]\n\n // Make all encodings case-insensitive except the ones that include upper and lower chars in the alphabet\n if (['f', 'F', 'v', 'V', 't', 'T', 'b', 'B', 'c', 'C', 'h', 'k', 'K'].includes(prefix)) {\n data = data.toLowerCase()\n }\n const enc = encoding(/** @type {BaseCode} */(data[0]))\n return enc.decode(data.substring(1))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Uint8Array|string} data\n */\nfunction isEncoded (data) {\n if (data instanceof Uint8Array) {\n data = decodeText(data)\n }\n\n // Ensure bufOrString is a string\n if (Object.prototype.toString.call(data) !== '[object String]') {\n return false\n }\n\n try {\n const enc = encoding(/** @type {BaseCode} */(data[0]))\n return enc.name\n } catch (err) {\n return false\n }\n}\n\n/**\n * Validate encoded data\n *\n * @param {BaseNameOrCode} name\n * @param {Uint8Array} buf\n * @returns {void}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction validEncode (name, buf) {\n const enc = encoding(name)\n enc.decode(decodeText(buf))\n}\n\n/**\n * Get the encoding by name or code\n *\n * @param {BaseNameOrCode} nameOrCode\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encoding (nameOrCode) {\n if (Object.prototype.hasOwnProperty.call(constants.names, /** @type {BaseName} */(nameOrCode))) {\n return constants.names[/** @type {BaseName} */(nameOrCode)]\n } else if (Object.prototype.hasOwnProperty.call(constants.codes, /** @type {BaseCode} */(nameOrCode))) {\n return constants.codes[/** @type {BaseCode} */(nameOrCode)]\n } else {\n throw new Error(`Unsupported encoding: ${nameOrCode}`)\n }\n}\n\n/**\n * Get encoding from data\n *\n * @param {string|Uint8Array} data\n * @returns {Base}\n * @throws {Error} Will throw if the encoding is not supported\n */\nfunction encodingFromData (data) {\n if (data instanceof Uint8Array) {\n data = decodeText(data)\n }\n\n return encoding(/** @type {BaseCode} */(data[0]))\n}\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.encoding = encoding\nexports.encodingFromData = encodingFromData\nconst names = Object.freeze(constants.names)\nconst codes = Object.freeze(constants.codes)\nexports.names = names\nexports.codes = codes\n","'use strict'\n\n/** @typedef {import('./types').CodecFactory} CodecFactory */\n\n/**\n * @param {string} string\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {Uint8Array}\n */\nconst decode = (string, alphabet, bitsPerChar) => {\n // Build the character lookup table:\n /** @type {Record<string, number>} */\n const codes = {}\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i\n }\n\n // Count the padding bytes:\n let end = string.length\n while (string[end - 1] === '=') {\n --end\n }\n\n // Allocate the output:\n const out = new Uint8Array((end * bitsPerChar / 8) | 0)\n\n // Parse the data:\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n let written = 0 // Next byte to write\n for (let i = 0; i < end; ++i) {\n // Read one character from the string:\n const value = codes[string[i]]\n if (value === undefined) {\n throw new SyntaxError('Invalid character ' + string[i])\n }\n\n // Append the bits to the buffer:\n buffer = (buffer << bitsPerChar) | value\n bits += bitsPerChar\n\n // Write out some bits if the buffer has a byte's worth:\n if (bits >= 8) {\n bits -= 8\n out[written++] = 0xff & (buffer >> bits)\n }\n }\n\n // Verify that we have received just enough bits:\n if (bits >= bitsPerChar || 0xff & (buffer << (8 - bits))) {\n throw new SyntaxError('Unexpected end of data')\n }\n\n return out\n}\n\n/**\n * @param {Uint8Array} data\n * @param {string} alphabet\n * @param {number} bitsPerChar\n * @returns {string}\n */\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '='\n const mask = (1 << bitsPerChar) - 1\n let out = ''\n\n let bits = 0 // Number of bits currently in the buffer\n let buffer = 0 // Bits waiting to be written out, MSB first\n for (let i = 0; i < data.length; ++i) {\n // Slurp data into the buffer:\n buffer = (buffer << 8) | data[i]\n bits += 8\n\n // Write out as much as we can:\n while (bits > bitsPerChar) {\n bits -= bitsPerChar\n out += alphabet[mask & (buffer >> bits)]\n }\n }\n\n // Partial character:\n if (bits) {\n out += alphabet[mask & (buffer << (bitsPerChar - bits))]\n }\n\n // Add padding characters until we hit a byte boundary:\n if (pad) {\n while ((out.length * bitsPerChar) & 7) {\n out += '='\n }\n }\n\n return out\n}\n\n/**\n * RFC4648 Factory\n *\n * @param {number} bitsPerChar\n * @returns {CodecFactory}\n */\nconst rfc4648 = (bitsPerChar) => (alphabet) => {\n return {\n /**\n * @param {Uint8Array} input\n * @returns {string}\n */\n encode (input) {\n return encode(input, alphabet, bitsPerChar)\n },\n /**\n * @param {string} input\n * @returns {Uint8Array}\n */\n decode (input) {\n return decode(input, alphabet, bitsPerChar)\n }\n }\n}\n\nmodule.exports = { rfc4648 }\n","'use strict'\n\nconst textDecoder = new TextDecoder()\n/**\n * @param {ArrayBufferView|ArrayBuffer} bytes\n * @returns {string}\n */\nconst decodeText = (bytes) => textDecoder.decode(bytes)\n\nconst textEncoder = new TextEncoder()\n/**\n * @param {string} text\n * @returns {Uint8Array}\n */\nconst encodeText = (text) => textEncoder.encode(text)\n\n/**\n * Returns a new Uint8Array created by concatenating the passed Arrays\n *\n * @param {Array<ArrayLike<number>>} arrs\n * @param {number} length\n * @returns {Uint8Array}\n */\nfunction concat (arrs, length) {\n const output = new Uint8Array(length)\n let offset = 0\n\n for (const arr of arrs) {\n output.set(arr, offset)\n offset += arr.length\n }\n\n return output\n}\n\nmodule.exports = { decodeText, encodeText, concat }\n","module.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n","module.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n","/* eslint quote-props: off */\n'use strict'\n\n/**\n * Names for all available hashes\n *\n * @typedef { \"identity\" | \"sha1\" | \"sha2-256\" | \"sha2-512\" | \"sha3-512\" | \"sha3-384\" | \"sha3-256\" | \"sha3-224\" | \"shake-128\" | \"shake-256\" | \"keccak-224\" | \"keccak-256\" | \"keccak-384\" | \"keccak-512\" | \"blake3\" | \"murmur3-128\" | \"murmur3-32\" | \"dbl-sha2-256\" | \"md4\" | \"md5\" | \"bmt\" | \"sha2-256-trunc254-padded\" | \"ripemd-128\" | \"ripemd-160\" | \"ripemd-256\" | \"ripemd-320\" | \"x11\" | \"kangarootwelve\" | \"sm3-256\" | \"blake2b-8\" | \"blake2b-16\" | \"blake2b-24\" | \"blake2b-32\" | \"blake2b-40\" | \"blake2b-48\" | \"blake2b-56\" | \"blake2b-64\" | \"blake2b-72\" | \"blake2b-80\" | \"blake2b-88\" | \"blake2b-96\" | \"blake2b-104\" | \"blake2b-112\" | \"blake2b-120\" | \"blake2b-128\" | \"blake2b-136\" | \"blake2b-144\" | \"blake2b-152\" | \"blake2b-160\" | \"blake2b-168\" | \"blake2b-176\" | \"blake2b-184\" | \"blake2b-192\" | \"blake2b-200\" | \"blake2b-208\" | \"blake2b-216\" | \"blake2b-224\" | \"blake2b-232\" | \"blake2b-240\" | \"blake2b-248\" | \"blake2b-256\" | \"blake2b-264\" | \"blake2b-272\" | \"blake2b-280\" | \"blake2b-288\" | \"blake2b-296\" | \"blake2b-304\" | \"blake2b-312\" | \"blake2b-320\" | \"blake2b-328\" | \"blake2b-336\" | \"blake2b-344\" | \"blake2b-352\" | \"blake2b-360\" | \"blake2b-368\" | \"blake2b-376\" | \"blake2b-384\" | \"blake2b-392\" | \"blake2b-400\" | \"blake2b-408\" | \"blake2b-416\" | \"blake2b-424\" | \"blake2b-432\" | \"blake2b-440\" | \"blake2b-448\" | \"blake2b-456\" | \"blake2b-464\" | \"blake2b-472\" | \"blake2b-480\" | \"blake2b-488\" | \"blake2b-496\" | \"blake2b-504\" | \"blake2b-512\" | \"blake2s-8\" | \"blake2s-16\" | \"blake2s-24\" | \"blake2s-32\" | \"blake2s-40\" | \"blake2s-48\" | \"blake2s-56\" | \"blake2s-64\" | \"blake2s-72\" | \"blake2s-80\" | \"blake2s-88\" | \"blake2s-96\" | \"blake2s-104\" | \"blake2s-112\" | \"blake2s-120\" | \"blake2s-128\" | \"blake2s-136\" | \"blake2s-144\" | \"blake2s-152\" | \"blake2s-160\" | \"blake2s-168\" | \"blake2s-176\" | \"blake2s-184\" | \"blake2s-192\" | \"blake2s-200\" | \"blake2s-208\" | \"blake2s-216\" | \"blake2s-224\" | \"blake2s-232\" | \"blake2s-240\" | \"blake2s-248\" | \"blake2s-256\" | \"skein256-8\" | \"skein256-16\" | \"skein256-24\" | \"skein256-32\" | \"skein256-40\" | \"skein256-48\" | \"skein256-56\" | \"skein256-64\" | \"skein256-72\" | \"skein256-80\" | \"skein256-88\" | \"skein256-96\" | \"skein256-104\" | \"skein256-112\" | \"skein256-120\" | \"skein256-128\" | \"skein256-136\" | \"skein256-144\" | \"skein256-152\" | \"skein256-160\" | \"skein256-168\" | \"skein256-176\" | \"skein256-184\" | \"skein256-192\" | \"skein256-200\" | \"skein256-208\" | \"skein256-216\" | \"skein256-224\" | \"skein256-232\" | \"skein256-240\" | \"skein256-248\" | \"skein256-256\" | \"skein512-8\" | \"skein512-16\" | \"skein512-24\" | \"skein512-32\" | \"skein512-40\" | \"skein512-48\" | \"skein512-56\" | \"skein512-64\" | \"skein512-72\" | \"skein512-80\" | \"skein512-88\" | \"skein512-96\" | \"skein512-104\" | \"skein512-112\" | \"skein512-120\" | \"skein512-128\" | \"skein512-136\" | \"skein512-144\" | \"skein512-152\" | \"skein512-160\" | \"skein512-168\" | \"skein512-176\" | \"skein512-184\" | \"skein512-192\" | \"skein512-200\" | \"skein512-208\" | \"skein512-216\" | \"skein512-224\" | \"skein512-232\" | \"skein512-240\" | \"skein512-248\" | \"skein512-256\" | \"skein512-264\" | \"skein512-272\" | \"skein512-280\" | \"skein512-288\" | \"skein512-296\" | \"skein512-304\" | \"skein512-312\" | \"skein512-320\" | \"skein512-328\" | \"skein512-336\" | \"skein512-344\" | \"skein512-352\" | \"skein512-360\" | \"skein512-368\" | \"skein512-376\" | \"skein512-384\" | \"skein512-392\" | \"skein512-400\" | \"skein512-408\" | \"skein512-416\" | \"skein512-424\" | \"skein512-432\" | \"skein512-440\" | \"skein512-448\" | \"skein512-456\" | \"skein512-464\" | \"skein512-472\" | \"skein512-480\" | \"skein512-488\" | \"skein512-496\" | \"skein512-504\" | \"skein512-512\" | \"skein1024-8\" | \"skein1024-16\" | \"skein1024-24\" | \"skein1024-32\" | \"skein1024-40\" | \"skein1024-48\" | \"skein1024-56\" | \"skein1024-64\" | \"skein1024-72\" | \"skein1024-80\" | \"skein1024-88\" | \"skein1024-96\" | \"skein1024-104\" | \"skein1024-112\" | \"skein1024-120\" | \"skein1024-128\" | \"skein1024-136\" | \"skein1024-144\" | \"skein1024-152\" | \"skein1024-160\" | \"skein1024-168\" | \"skein1024-176\" | \"skein1024-184\" | \"skein1024-192\" | \"skein1024-200\" | \"skein1024-208\" | \"skein1024-216\" | \"skein1024-224\" | \"skein1024-232\" | \"skein1024-240\" | \"skein1024-248\" | \"skein1024-256\" | \"skein1024-264\" | \"skein1024-272\" | \"skein1024-280\" | \"skein1024-288\" | \"skein1024-296\" | \"skein1024-304\" | \"skein1024-312\" | \"skein1024-320\" | \"skein1024-328\" | \"skein1024-336\" | \"skein1024-344\" | \"skein1024-352\" | \"skein1024-360\" | \"skein1024-368\" | \"skein1024-376\" | \"skein1024-384\" | \"skein1024-392\" | \"skein1024-400\" | \"skein1024-408\" | \"skein1024-416\" | \"skein1024-424\" | \"skein1024-432\" | \"skein1024-440\" | \"skein1024-448\" | \"skein1024-456\" | \"skein1024-464\" | \"skein1024-472\" | \"skein1024-480\" | \"skein1024-488\" | \"skein1024-496\" | \"skein1024-504\" | \"skein1024-512\" | \"skein1024-520\" | \"skein1024-528\" | \"skein1024-536\" | \"skein1024-544\" | \"skein1024-552\" | \"skein1024-560\" | \"skein1024-568\" | \"skein1024-576\" | \"skein1024-584\" | \"skein1024-592\" | \"skein1024-600\" | \"skein1024-608\" | \"skein1024-616\" | \"skein1024-624\" | \"skein1024-632\" | \"skein1024-640\" | \"skein1024-648\" | \"skein1024-656\" | \"skein1024-664\" | \"skein1024-672\" | \"skein1024-680\" | \"skein1024-688\" | \"skein1024-696\" | \"skein1024-704\" | \"skein1024-712\" | \"skein1024-720\" | \"skein1024-728\" | \"skein1024-736\" | \"skein1024-744\" | \"skein1024-752\" | \"skein1024-760\" | \"skein1024-768\" | \"skein1024-776\" | \"skein1024-784\" | \"skein1024-792\" | \"skein1024-800\" | \"skein1024-808\" | \"skein1024-816\" | \"skein1024-824\" | \"skein1024-832\" | \"skein1024-840\" | \"skein1024-848\" | \"skein1024-856\" | \"skein1024-864\" | \"skein1024-872\" | \"skein1024-880\" | \"skein1024-888\" | \"skein1024-896\" | \"skein1024-904\" | \"skein1024-912\" | \"skein1024-920\" | \"skein1024-928\" | \"skein1024-936\" | \"skein1024-944\" | \"skein1024-952\" | \"skein1024-960\" | \"skein1024-968\" | \"skein1024-976\" | \"skein1024-984\" | \"skein1024-992\" | \"skein1024-1000\" | \"skein1024-1008\" | \"skein1024-1016\" | \"skein1024-1024\" | \"poseidon-bls12_381-a2-fc1\" | \"poseidon-bls12_381-a2-fc1-sc\" } HashName\n */\n/**\n * Codes for all available hashes\n *\n * @typedef { 0x00 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 | 0x18 | 0x19 | 0x1a | 0x1b | 0x1c | 0x1d | 0x1e | 0x22 | 0x23 | 0x56 | 0xd4 | 0xd5 | 0xd6 | 0x1012 | 0x1052 | 0x1053 | 0x1054 | 0x1055 | 0x1100 | 0x1d01 | 0x534d | 0xb201 | 0xb202 | 0xb203 | 0xb204 | 0xb205 | 0xb206 | 0xb207 | 0xb208 | 0xb209 | 0xb20a | 0xb20b | 0xb20c | 0xb20d | 0xb20e | 0xb20f | 0xb210 | 0xb211 | 0xb212 | 0xb213 | 0xb214 | 0xb215 | 0xb216 | 0xb217 | 0xb218 | 0xb219 | 0xb21a | 0xb21b | 0xb21c | 0xb21d | 0xb21e | 0xb21f | 0xb220 | 0xb221 | 0xb222 | 0xb223 | 0xb224 | 0xb225 | 0xb226 | 0xb227 | 0xb228 | 0xb229 | 0xb22a | 0xb22b | 0xb22c | 0xb22d | 0xb22e | 0xb22f | 0xb230 | 0xb231 | 0xb232 | 0xb233 | 0xb234 | 0xb235 | 0xb236 | 0xb237 | 0xb238 | 0xb239 | 0xb23a | 0xb23b | 0xb23c | 0xb23d | 0xb23e | 0xb23f | 0xb240 | 0xb241 | 0xb242 | 0xb243 | 0xb244 | 0xb245 | 0xb246 | 0xb247 | 0xb248 | 0xb249 | 0xb24a | 0xb24b | 0xb24c | 0xb24d | 0xb24e | 0xb24f | 0xb250 | 0xb251 | 0xb252 | 0xb253 | 0xb254 | 0xb255 | 0xb256 | 0xb257 | 0xb258 | 0xb259 | 0xb25a | 0xb25b | 0xb25c | 0xb25d | 0xb25e | 0xb25f | 0xb260 | 0xb301 | 0xb302 | 0xb303 | 0xb304 | 0xb305 | 0xb306 | 0xb307 | 0xb308 | 0xb309 | 0xb30a | 0xb30b | 0xb30c | 0xb30d | 0xb30e | 0xb30f | 0xb310 | 0xb311 | 0xb312 | 0xb313 | 0xb314 | 0xb315 | 0xb316 | 0xb317 | 0xb318 | 0xb319 | 0xb31a | 0xb31b | 0xb31c | 0xb31d | 0xb31e | 0xb31f | 0xb320 | 0xb321 | 0xb322 | 0xb323 | 0xb324 | 0xb325 | 0xb326 | 0xb327 | 0xb328 | 0xb329 | 0xb32a | 0xb32b | 0xb32c | 0xb32d | 0xb32e | 0xb32f | 0xb330 | 0xb331 | 0xb332 | 0xb333 | 0xb334 | 0xb335 | 0xb336 | 0xb337 | 0xb338 | 0xb339 | 0xb33a | 0xb33b | 0xb33c | 0xb33d | 0xb33e | 0xb33f | 0xb340 | 0xb341 | 0xb342 | 0xb343 | 0xb344 | 0xb345 | 0xb346 | 0xb347 | 0xb348 | 0xb349 | 0xb34a | 0xb34b | 0xb34c | 0xb34d | 0xb34e | 0xb34f | 0xb350 | 0xb351 | 0xb352 | 0xb353 | 0xb354 | 0xb355 | 0xb356 | 0xb357 | 0xb358 | 0xb359 | 0xb35a | 0xb35b | 0xb35c | 0xb35d | 0xb35e | 0xb35f | 0xb360 | 0xb361 | 0xb362 | 0xb363 | 0xb364 | 0xb365 | 0xb366 | 0xb367 | 0xb368 | 0xb369 | 0xb36a | 0xb36b | 0xb36c | 0xb36d | 0xb36e | 0xb36f | 0xb370 | 0xb371 | 0xb372 | 0xb373 | 0xb374 | 0xb375 | 0xb376 | 0xb377 | 0xb378 | 0xb379 | 0xb37a | 0xb37b | 0xb37c | 0xb37d | 0xb37e | 0xb37f | 0xb380 | 0xb381 | 0xb382 | 0xb383 | 0xb384 | 0xb385 | 0xb386 | 0xb387 | 0xb388 | 0xb389 | 0xb38a | 0xb38b | 0xb38c | 0xb38d | 0xb38e | 0xb38f | 0xb390 | 0xb391 | 0xb392 | 0xb393 | 0xb394 | 0xb395 | 0xb396 | 0xb397 | 0xb398 | 0xb399 | 0xb39a | 0xb39b | 0xb39c | 0xb39d | 0xb39e | 0xb39f | 0xb3a0 | 0xb3a1 | 0xb3a2 | 0xb3a3 | 0xb3a4 | 0xb3a5 | 0xb3a6 | 0xb3a7 | 0xb3a8 | 0xb3a9 | 0xb3aa | 0xb3ab | 0xb3ac | 0xb3ad | 0xb3ae | 0xb3af | 0xb3b0 | 0xb3b1 | 0xb3b2 | 0xb3b3 | 0xb3b4 | 0xb3b5 | 0xb3b6 | 0xb3b7 | 0xb3b8 | 0xb3b9 | 0xb3ba | 0xb3bb | 0xb3bc | 0xb3bd | 0xb3be | 0xb3bf | 0xb3c0 | 0xb3c1 | 0xb3c2 | 0xb3c3 | 0xb3c4 | 0xb3c5 | 0xb3c6 | 0xb3c7 | 0xb3c8 | 0xb3c9 | 0xb3ca | 0xb3cb | 0xb3cc | 0xb3cd | 0xb3ce | 0xb3cf | 0xb3d0 | 0xb3d1 | 0xb3d2 | 0xb3d3 | 0xb3d4 | 0xb3d5 | 0xb3d6 | 0xb3d7 | 0xb3d8 | 0xb3d9 | 0xb3da | 0xb3db | 0xb3dc | 0xb3dd | 0xb3de | 0xb3df | 0xb3e0 | 0xb401 | 0xb402 } HashCode\n */\n\n/**\n * @type { Record<HashName,HashCode> }\n */\nconst names = Object.freeze({\n 'identity': 0x00,\n 'sha1': 0x11,\n 'sha2-256': 0x12,\n 'sha2-512': 0x13,\n 'sha3-512': 0x14,\n 'sha3-384': 0x15,\n 'sha3-256': 0x16,\n 'sha3-224': 0x17,\n 'shake-128': 0x18,\n 'shake-256': 0x19,\n 'keccak-224': 0x1a,\n 'keccak-256': 0x1b,\n 'keccak-384': 0x1c,\n 'keccak-512': 0x1d,\n 'blake3': 0x1e,\n 'murmur3-128': 0x22,\n 'murmur3-32': 0x23,\n 'dbl-sha2-256': 0x56,\n 'md4': 0xd4,\n 'md5': 0xd5,\n 'bmt': 0xd6,\n 'sha2-256-trunc254-padded': 0x1012,\n 'ripemd-128': 0x1052,\n 'ripemd-160': 0x1053,\n 'ripemd-256': 0x1054,\n 'ripemd-320': 0x1055,\n 'x11': 0x1100,\n 'kangarootwelve': 0x1d01,\n 'sm3-256': 0x534d,\n 'blake2b-8': 0xb201,\n 'blake2b-16': 0xb202,\n 'blake2b-24': 0xb203,\n 'blake2b-32': 0xb204,\n 'blake2b-40': 0xb205,\n 'blake2b-48': 0xb206,\n 'blake2b-56': 0xb207,\n 'blake2b-64': 0xb208,\n 'blake2b-72': 0xb209,\n 'blake2b-80': 0xb20a,\n 'blake2b-88': 0xb20b,\n 'blake2b-96': 0xb20c,\n 'blake2b-104': 0xb20d,\n 'blake2b-112': 0xb20e,\n 'blake2b-120': 0xb20f,\n 'blake2b-128': 0xb210,\n 'blake2b-136': 0xb211,\n 'blake2b-144': 0xb212,\n 'blake2b-152': 0xb213,\n 'blake2b-160': 0xb214,\n 'blake2b-168': 0xb215,\n 'blake2b-176': 0xb216,\n 'blake2b-184': 0xb217,\n 'blake2b-192': 0xb218,\n 'blake2b-200': 0xb219,\n 'blake2b-208': 0xb21a,\n 'blake2b-216': 0xb21b,\n 'blake2b-224': 0xb21c,\n 'blake2b-232': 0xb21d,\n 'blake2b-240': 0xb21e,\n 'blake2b-248': 0xb21f,\n 'blake2b-256': 0xb220,\n 'blake2b-264': 0xb221,\n 'blake2b-272': 0xb222,\n 'blake2b-280': 0xb223,\n 'blake2b-288': 0xb224,\n 'blake2b-296': 0xb225,\n 'blake2b-304': 0xb226,\n 'blake2b-312': 0xb227,\n 'blake2b-320': 0xb228,\n 'blake2b-328': 0xb229,\n 'blake2b-336': 0xb22a,\n 'blake2b-344': 0xb22b,\n 'blake2b-352': 0xb22c,\n 'blake2b-360': 0xb22d,\n 'blake2b-368': 0xb22e,\n 'blake2b-376': 0xb22f,\n 'blake2b-384': 0xb230,\n 'blake2b-392': 0xb231,\n 'blake2b-400': 0xb232,\n 'blake2b-408': 0xb233,\n 'blake2b-416': 0xb234,\n 'blake2b-424': 0xb235,\n 'blake2b-432': 0xb236,\n 'blake2b-440': 0xb237,\n 'blake2b-448': 0xb238,\n 'blake2b-456': 0xb239,\n 'blake2b-464': 0xb23a,\n 'blake2b-472': 0xb23b,\n 'blake2b-480': 0xb23c,\n 'blake2b-488': 0xb23d,\n 'blake2b-496': 0xb23e,\n 'blake2b-504': 0xb23f,\n 'blake2b-512': 0xb240,\n 'blake2s-8': 0xb241,\n 'blake2s-16': 0xb242,\n 'blake2s-24': 0xb243,\n 'blake2s-32': 0xb244,\n 'blake2s-40': 0xb245,\n 'blake2s-48': 0xb246,\n 'blake2s-56': 0xb247,\n 'blake2s-64': 0xb248,\n 'blake2s-72': 0xb249,\n 'blake2s-80': 0xb24a,\n 'blake2s-88': 0xb24b,\n 'blake2s-96': 0xb24c,\n 'blake2s-104': 0xb24d,\n 'blake2s-112': 0xb24e,\n 'blake2s-120': 0xb24f,\n 'blake2s-128': 0xb250,\n 'blake2s-136': 0xb251,\n 'blake2s-144': 0xb252,\n 'blake2s-152': 0xb253,\n 'blake2s-160': 0xb254,\n 'blake2s-168': 0xb255,\n 'blake2s-176': 0xb256,\n 'blake2s-184': 0xb257,\n 'blake2s-192': 0xb258,\n 'blake2s-200': 0xb259,\n 'blake2s-208': 0xb25a,\n 'blake2s-216': 0xb25b,\n 'blake2s-224': 0xb25c,\n 'blake2s-232': 0xb25d,\n 'blake2s-240': 0xb25e,\n 'blake2s-248': 0xb25f,\n 'blake2s-256': 0xb260,\n 'skein256-8': 0xb301,\n 'skein256-16': 0xb302,\n 'skein256-24': 0xb303,\n 'skein256-32': 0xb304,\n 'skein256-40': 0xb305,\n 'skein256-48': 0xb306,\n 'skein256-56': 0xb307,\n 'skein256-64': 0xb308,\n 'skein256-72': 0xb309,\n 'skein256-80': 0xb30a,\n 'skein256-88': 0xb30b,\n 'skein256-96': 0xb30c,\n 'skein256-104': 0xb30d,\n 'skein256-112': 0xb30e,\n 'skein256-120': 0xb30f,\n 'skein256-128': 0xb310,\n 'skein256-136': 0xb311,\n 'skein256-144': 0xb312,\n 'skein256-152': 0xb313,\n 'skein256-160': 0xb314,\n 'skein256-168': 0xb315,\n 'skein256-176': 0xb316,\n 'skein256-184': 0xb317,\n 'skein256-192': 0xb318,\n 'skein256-200': 0xb319,\n 'skein256-208': 0xb31a,\n 'skein256-216': 0xb31b,\n 'skein256-224': 0xb31c,\n 'skein256-232': 0xb31d,\n 'skein256-240': 0xb31e,\n 'skein256-248': 0xb31f,\n 'skein256-256': 0xb320,\n 'skein512-8': 0xb321,\n 'skein512-16': 0xb322,\n 'skein512-24': 0xb323,\n 'skein512-32': 0xb324,\n 'skein512-40': 0xb325,\n 'skein512-48': 0xb326,\n 'skein512-56': 0xb327,\n 'skein512-64': 0xb328,\n 'skein512-72': 0xb329,\n 'skein512-80': 0xb32a,\n 'skein512-88': 0xb32b,\n 'skein512-96': 0xb32c,\n 'skein512-104': 0xb32d,\n 'skein512-112': 0xb32e,\n 'skein512-120': 0xb32f,\n 'skein512-128': 0xb330,\n 'skein512-136': 0xb331,\n 'skein512-144': 0xb332,\n 'skein512-152': 0xb333,\n 'skein512-160': 0xb334,\n 'skein512-168': 0xb335,\n 'skein512-176': 0xb336,\n 'skein512-184': 0xb337,\n 'skein512-192': 0xb338,\n 'skein512-200': 0xb339,\n 'skein512-208': 0xb33a,\n 'skein512-216': 0xb33b,\n 'skein512-224': 0xb33c,\n 'skein512-232': 0xb33d,\n 'skein512-240': 0xb33e,\n 'skein512-248': 0xb33f,\n 'skein512-256': 0xb340,\n 'skein512-264': 0xb341,\n 'skein512-272': 0xb342,\n 'skein512-280': 0xb343,\n 'skein512-288': 0xb344,\n 'skein512-296': 0xb345,\n 'skein512-304': 0xb346,\n 'skein512-312': 0xb347,\n 'skein512-320': 0xb348,\n 'skein512-328': 0xb349,\n 'skein512-336': 0xb34a,\n 'skein512-344': 0xb34b,\n 'skein512-352': 0xb34c,\n 'skein512-360': 0xb34d,\n 'skein512-368': 0xb34e,\n 'skein512-376': 0xb34f,\n 'skein512-384': 0xb350,\n 'skein512-392': 0xb351,\n 'skein512-400': 0xb352,\n 'skein512-408': 0xb353,\n 'skein512-416': 0xb354,\n 'skein512-424': 0xb355,\n 'skein512-432': 0xb356,\n 'skein512-440': 0xb357,\n 'skein512-448': 0xb358,\n 'skein512-456': 0xb359,\n 'skein512-464': 0xb35a,\n 'skein512-472': 0xb35b,\n 'skein512-480': 0xb35c,\n 'skein512-488': 0xb35d,\n 'skein512-496': 0xb35e,\n 'skein512-504': 0xb35f,\n 'skein512-512': 0xb360,\n 'skein1024-8': 0xb361,\n 'skein1024-16': 0xb362,\n 'skein1024-24': 0xb363,\n 'skein1024-32': 0xb364,\n 'skein1024-40': 0xb365,\n 'skein1024-48': 0xb366,\n 'skein1024-56': 0xb367,\n 'skein1024-64': 0xb368,\n 'skein1024-72': 0xb369,\n 'skein1024-80': 0xb36a,\n 'skein1024-88': 0xb36b,\n 'skein1024-96': 0xb36c,\n 'skein1024-104': 0xb36d,\n 'skein1024-112': 0xb36e,\n 'skein1024-120': 0xb36f,\n 'skein1024-128': 0xb370,\n 'skein1024-136': 0xb371,\n 'skein1024-144': 0xb372,\n 'skein1024-152': 0xb373,\n 'skein1024-160': 0xb374,\n 'skein1024-168': 0xb375,\n 'skein1024-176': 0xb376,\n 'skein1024-184': 0xb377,\n 'skein1024-192': 0xb378,\n 'skein1024-200': 0xb379,\n 'skein1024-208': 0xb37a,\n 'skein1024-216': 0xb37b,\n 'skein1024-224': 0xb37c,\n 'skein1024-232': 0xb37d,\n 'skein1024-240': 0xb37e,\n 'skein1024-248': 0xb37f,\n 'skein1024-256': 0xb380,\n 'skein1024-264': 0xb381,\n 'skein1024-272': 0xb382,\n 'skein1024-280': 0xb383,\n 'skein1024-288': 0xb384,\n 'skein1024-296': 0xb385,\n 'skein1024-304': 0xb386,\n 'skein1024-312': 0xb387,\n 'skein1024-320': 0xb388,\n 'skein1024-328': 0xb389,\n 'skein1024-336': 0xb38a,\n 'skein1024-344': 0xb38b,\n 'skein1024-352': 0xb38c,\n 'skein1024-360': 0xb38d,\n 'skein1024-368': 0xb38e,\n 'skein1024-376': 0xb38f,\n 'skein1024-384': 0xb390,\n 'skein1024-392': 0xb391,\n 'skein1024-400': 0xb392,\n 'skein1024-408': 0xb393,\n 'skein1024-416': 0xb394,\n 'skein1024-424': 0xb395,\n 'skein1024-432': 0xb396,\n 'skein1024-440': 0xb397,\n 'skein1024-448': 0xb398,\n 'skein1024-456': 0xb399,\n 'skein1024-464': 0xb39a,\n 'skein1024-472': 0xb39b,\n 'skein1024-480': 0xb39c,\n 'skein1024-488': 0xb39d,\n 'skein1024-496': 0xb39e,\n 'skein1024-504': 0xb39f,\n 'skein1024-512': 0xb3a0,\n 'skein1024-520': 0xb3a1,\n 'skein1024-528': 0xb3a2,\n 'skein1024-536': 0xb3a3,\n 'skein1024-544': 0xb3a4,\n 'skein1024-552': 0xb3a5,\n 'skein1024-560': 0xb3a6,\n 'skein1024-568': 0xb3a7,\n 'skein1024-576': 0xb3a8,\n 'skein1024-584': 0xb3a9,\n 'skein1024-592': 0xb3aa,\n 'skein1024-600': 0xb3ab,\n 'skein1024-608': 0xb3ac,\n 'skein1024-616': 0xb3ad,\n 'skein1024-624': 0xb3ae,\n 'skein1024-632': 0xb3af,\n 'skein1024-640': 0xb3b0,\n 'skein1024-648': 0xb3b1,\n 'skein1024-656': 0xb3b2,\n 'skein1024-664': 0xb3b3,\n 'skein1024-672': 0xb3b4,\n 'skein1024-680': 0xb3b5,\n 'skein1024-688': 0xb3b6,\n 'skein1024-696': 0xb3b7,\n 'skein1024-704': 0xb3b8,\n 'skein1024-712': 0xb3b9,\n 'skein1024-720': 0xb3ba,\n 'skein1024-728': 0xb3bb,\n 'skein1024-736': 0xb3bc,\n 'skein1024-744': 0xb3bd,\n 'skein1024-752': 0xb3be,\n 'skein1024-760': 0xb3bf,\n 'skein1024-768': 0xb3c0,\n 'skein1024-776': 0xb3c1,\n 'skein1024-784': 0xb3c2,\n 'skein1024-792': 0xb3c3,\n 'skein1024-800': 0xb3c4,\n 'skein1024-808': 0xb3c5,\n 'skein1024-816': 0xb3c6,\n 'skein1024-824': 0xb3c7,\n 'skein1024-832': 0xb3c8,\n 'skein1024-840': 0xb3c9,\n 'skein1024-848': 0xb3ca,\n 'skein1024-856': 0xb3cb,\n 'skein1024-864': 0xb3cc,\n 'skein1024-872': 0xb3cd,\n 'skein1024-880': 0xb3ce,\n 'skein1024-888': 0xb3cf,\n 'skein1024-896': 0xb3d0,\n 'skein1024-904': 0xb3d1,\n 'skein1024-912': 0xb3d2,\n 'skein1024-920': 0xb3d3,\n 'skein1024-928': 0xb3d4,\n 'skein1024-936': 0xb3d5,\n 'skein1024-944': 0xb3d6,\n 'skein1024-952': 0xb3d7,\n 'skein1024-960': 0xb3d8,\n 'skein1024-968': 0xb3d9,\n 'skein1024-976': 0xb3da,\n 'skein1024-984': 0xb3db,\n 'skein1024-992': 0xb3dc,\n 'skein1024-1000': 0xb3dd,\n 'skein1024-1008': 0xb3de,\n 'skein1024-1016': 0xb3df,\n 'skein1024-1024': 0xb3e0,\n 'poseidon-bls12_381-a2-fc1': 0xb401,\n 'poseidon-bls12_381-a2-fc1-sc': 0xb402\n})\n\nmodule.exports = { names }\n","/**\n * Multihash implementation in JavaScript.\n */\n'use strict'\n\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst { names } = require('./constants')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { concat: uint8ArrayConcat } = require('uint8arrays/concat')\n\nconst codes = /** @type {import('./types').CodeNameMap} */({})\n\n// eslint-disable-next-line guard-for-in\nfor (const key in names) {\n const name = /** @type {HashName} */(key)\n codes[names[name]] = name\n}\nObject.freeze(codes)\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toHexString (hash) {\n if (!(hash instanceof Uint8Array)) {\n throw new Error('must be passed a Uint8Array')\n }\n\n return uint8ArrayToString(hash, 'base16')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Uint8Array}\n */\nfunction fromHexString (hash) {\n return uint8ArrayFromString(hash, 'base16')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Uint8Array} hash\n * @returns {string}\n */\nfunction toB58String (hash) {\n if (!(hash instanceof Uint8Array)) {\n throw new Error('must be passed a Uint8Array')\n }\n\n return uint8ArrayToString(multibase.encode('base58btc', hash)).slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Uint8Array} hash\n * @returns {Uint8Array}\n */\nfunction fromB58String (hash) {\n const encoded = hash instanceof Uint8Array\n ? uint8ArrayToString(hash)\n : hash\n\n return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Uint8Array} bytes\n * @returns {{code: HashCode, name: HashName, length: number, digest: Uint8Array}} result\n */\nfunction decode (bytes) {\n if (!(bytes instanceof Uint8Array)) {\n throw new Error('multihash must be a Uint8Array')\n }\n\n if (bytes.length < 2) {\n throw new Error('multihash too short. must be > 2 bytes.')\n }\n\n const code = /** @type {HashCode} */(varint.decode(bytes))\n if (!isValidCode(code)) {\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n }\n bytes = bytes.slice(varint.decode.bytes)\n\n const len = varint.decode(bytes)\n if (len < 0) {\n throw new Error(`multihash invalid length: ${len}`)\n }\n bytes = bytes.slice(varint.decode.bytes)\n\n if (bytes.length !== len) {\n throw new Error(`multihash length inconsistent: 0x${uint8ArrayToString(bytes, 'base16')}`)\n }\n\n return {\n code,\n name: codes[code],\n length: len,\n digest: bytes\n }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Uint8Array} digest\n * @param {HashName | HashCode} code\n * @param {number} [length]\n * @returns {Uint8Array}\n */\nfunction encode (digest, code, length) {\n if (!digest || code === undefined) {\n throw new Error('multihash encode requires at least two args: digest, code')\n }\n\n // ensure it's a hashfunction code.\n const hashfn = coerceCode(code)\n\n if (!(digest instanceof Uint8Array)) {\n throw new Error('digest should be a Uint8Array')\n }\n\n if (length == null) {\n length = digest.length\n }\n\n if (length && digest.length !== length) {\n throw new Error('digest length should be equal to specified length.')\n }\n\n const hash = varint.encode(hashfn)\n const len = varint.encode(length)\n return uint8ArrayConcat([hash, len, digest], hash.length + len.length + digest.length)\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n *\n * @param {HashName | number} name\n * @returns {number}\n */\nfunction coerceCode (name) {\n let code = name\n\n if (typeof name === 'string') {\n if (names[name] === undefined) {\n throw new Error(`Unrecognized hash function named: ${name}`)\n }\n code = names[name]\n }\n\n if (typeof code !== 'number') {\n throw new Error(`Hash function code should be a number. Got: ${code}`)\n }\n\n // @ts-ignore\n if (codes[code] === undefined && !isAppCode(code)) {\n throw new Error(`Unrecognized function code: ${code}`)\n }\n\n return code\n}\n\n/**\n * Checks if a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nfunction isAppCode (code) {\n return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {HashCode} code\n * @returns {boolean}\n */\nfunction isValidCode (code) {\n if (isAppCode(code)) {\n return true\n }\n\n if (codes[code]) {\n return true\n }\n\n return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {void}\n * @throws {Error}\n */\nfunction validate (multihash) {\n decode(multihash) // throws if bad.\n}\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Uint8Array} multihash\n * @returns {Uint8Array}\n * @throws {Error}\n */\nfunction prefix (multihash) {\n validate(multihash)\n\n return multihash.subarray(0, 2)\n}\n\nmodule.exports = {\n names,\n codes,\n toHexString,\n fromHexString,\n toB58String,\n fromB58String,\n decode,\n encode,\n coerceCode,\n isAppCode,\n validate,\n prefix,\n isValidCode\n}\n\n/**\n * @typedef { import(\"./constants\").HashCode } HashCode\n * @typedef { import(\"./constants\").HashName } HashName\n */\n","'use strict'\n\nexports.PROTOCOL_ID = '/multistream/1.0.0'\n","'use strict'\n\nconst debug = require('debug')\nconst BufferList = require('bl/BufferList')\nconst multistream = require('./multistream')\n// @ts-expect-error no types\nconst handshake = require('it-handshake')\nconst { PROTOCOL_ID } = require('./constants')\n\nconst log = Object.assign(debug('mss:handle'), {\n error: debug('mss:handle:error')\n})\n\n/**\n * @typedef {import('./types').DuplexStream<Uint8Array | BufferList>} DuplexStream\n * @typedef {import('./types').AbortOptions} AbortOptions\n */\n\n/**\n * @param {DuplexStream} stream\n * @param {string | string[]} protocols\n * @param {AbortOptions} [options]\n */\nmodule.exports = async function handle (stream, protocols, options) {\n protocols = Array.isArray(protocols) ? protocols : [protocols]\n const { writer, reader, rest, stream: shakeStream } = handshake(stream)\n\n while (true) {\n const protocol = (await multistream.read(reader, options)).toString()\n log('read \"%s\"', protocol)\n\n if (protocol === PROTOCOL_ID) {\n log('respond with \"%s\" for \"%s\"', PROTOCOL_ID, protocol)\n multistream.write(writer, PROTOCOL_ID)\n continue\n }\n\n if (protocols.includes(protocol)) {\n multistream.write(writer, protocol)\n log('respond with \"%s\" for \"%s\"', protocol, protocol)\n rest()\n return { stream: shakeStream, protocol }\n }\n\n if (protocol === 'ls') {\n // <varint-msg-len><varint-proto-name-len><proto-name>\\n<varint-proto-name-len><proto-name>\\n\\n\n multistream.write(writer, new BufferList(\n // @ts-expect-error BufferList does not accept Uint8Array[] as a constructor arg\n protocols.map(p => multistream.encode(p))\n ))\n log('respond with \"%s\" for %s', protocols, protocol)\n continue\n }\n\n multistream.write(writer, 'na')\n log('respond with \"na\" for \"%s\"', protocol)\n }\n}\n","'use strict'\n\nconst select = require('./select')\nconst handle = require('./handle')\nconst ls = require('./ls')\nconst { PROTOCOL_ID } = require('./constants')\n\nexports.PROTOCOL_ID = PROTOCOL_ID\n\n/**\n * @typedef {import('bl/BufferList')} BufferList\n * @typedef {import('./types').DuplexStream<Uint8Array | BufferList>} DuplexStream\n * @typedef {import('./types').AbortOptions} AbortOptions\n */\n\nclass MultistreamSelect {\n /**\n * @param {DuplexStream} stream\n */\n constructor (stream) {\n this._stream = stream\n this._shaken = false\n }\n\n /**\n * Perform the multistream-select handshake\n *\n * @param {AbortOptions} [options]\n */\n async _handshake (options) {\n if (this._shaken) return\n const { stream } = await select(this._stream, PROTOCOL_ID, undefined, options)\n this._stream = stream\n this._shaken = true\n }\n}\n\nclass Dialer extends MultistreamSelect {\n /**\n * @param {string | string[]} protocols\n * @param {AbortOptions} [options]\n */\n select (protocols, options) {\n return select(this._stream, protocols, this._shaken ? undefined : PROTOCOL_ID, options)\n }\n\n /**\n * @param {AbortOptions} [options]\n */\n async ls (options) {\n await this._handshake(options)\n /** @type {{ stream: DuplexStream, protocols: string[] }} */\n const res = await ls(this._stream, options)\n const { stream, protocols } = res\n this._stream = stream\n return protocols\n }\n}\n\nexports.Dialer = Dialer\n\nclass Listener extends MultistreamSelect {\n /**\n * @param {string | string[]} protocols\n * @param {AbortOptions} [options]\n */\n handle (protocols, options) {\n return handle(this._stream, protocols, options)\n }\n}\n\nexports.Listener = Listener\n","'use strict'\n\n// @ts-expect-error no types\nconst Reader = require('it-reader')\nconst debug = require('debug')\nconst multistream = require('./multistream')\n// @ts-expect-error no types\nconst handshake = require('it-handshake')\nconst lp = require('it-length-prefixed')\nconst { pipe } = require('it-pipe')\n\nconst log = Object.assign(debug('mss:ls'), {\n error: debug('mss:ls:error')\n})\n\n/**\n * @typedef {import('bl/BufferList')} BufferList\n * @typedef {import('./types').DuplexStream<Uint8Array | BufferList>} DuplexStream\n * @typedef {import('./types').AbortOptions} AbortOptions\n */\n\n/**\n * @param {DuplexStream} stream\n * @param {AbortOptions} [options]\n */\nmodule.exports = async function ls (stream, options) {\n const { reader, writer, rest, stream: shakeStream } = handshake(stream)\n\n log('write \"ls\"')\n multistream.write(writer, 'ls')\n rest()\n\n // Next message from remote will be (e.g. for 2 protocols):\n // <varint-msg-len><varint-proto-name-len><proto-name>\\n<varint-proto-name-len><proto-name>\\n\n const res = await multistream.read(reader, options)\n\n // After reading response we have:\n // <varint-proto-name-len><proto-name>\\n<varint-proto-name-len><proto-name>\\n\n const protocolsReader = Reader([res])\n\n /**\n * @type {string[]}\n */\n const protocols = []\n\n // Decode each of the protocols from the reader\n await pipe(\n protocolsReader,\n lp.decode(),\n async (/** @type {AsyncIterable<BufferList>} */ source) => {\n for await (const protocol of source) {\n // Remove the newline\n protocols.push(protocol.shallowSlice(0, -1).toString())\n }\n }\n )\n\n /** @type {{ stream: DuplexStream, protocols: string[] }} */\n const output = { stream: shakeStream, protocols }\n\n return output\n}\n","'use strict'\n\nconst BufferList = require('bl/BufferList')\nconst lp = require('it-length-prefixed')\nconst { pipe } = require('it-pipe')\nconst errCode = require('err-code')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst first = require('it-first')\nconst { source } = require('abortable-iterator')\n\n/**\n * @typedef {import('it-pushable').Pushable<Uint8Array | BufferList>} Pushable\n * @typedef {import('./types').AbortOptions} AbortOptions\n */\n\nconst NewLine = uint8ArrayFromString('\\n')\n\n/**\n * @param {Uint8Array | BufferList | string} buffer\n * @returns {Uint8Array}\n */\nfunction encode (buffer) {\n // @ts-expect-error BufferList accepts Buffer[], we pass Uint8Array[]\n return lp.encode.single(new BufferList([buffer, NewLine]))\n}\n\n/**\n * `write` encodes and writes a single buffer\n *\n * @param {Pushable} writer\n * @param {Uint8Array | BufferList | string} buffer\n */\nfunction write (writer, buffer) {\n writer.push(encode(buffer))\n}\n\n/**\n * `writeAll` behaves like `write`, except it encodes an array of items as a single write\n *\n * @param {Pushable} writer\n * @param {(Uint8Array | BufferList | string)[]} buffers\n */\nasync function writeAll (writer, buffers) {\n // @ts-expect-error BufferList cannot append Uint8Arrays\n writer.push(buffers.reduce((bl, buffer) => bl.append(encode(buffer)), new BufferList()))\n}\n\n/**\n * @param {AsyncGenerator<Uint8Array | BufferList, void, number>} reader\n * @param {AbortOptions} [options]\n */\nasync function read (reader, options) {\n let byteLength = 1 // Read single byte chunks until the length is known\n const varByteSource = { // No return impl - we want the reader to remain readable\n [Symbol.asyncIterator] () { return this },\n next: () => reader.next(byteLength)\n }\n\n /** @type {AsyncIterable<Uint8Array | BufferList>} */\n let input = varByteSource\n\n // If we have been passed an abort signal, wrap the input source in an abortable\n // iterator that will throw if the operation is aborted\n if (options && options.signal) {\n input = source(varByteSource, options.signal)\n }\n\n // Once the length has been parsed, read chunk for that length\n const onLength = (/** @type {number} */ l) => { byteLength = l }\n\n /** @type {BufferList} */\n const buf = await pipe(\n input,\n lp.decode({ onLength }),\n first\n )\n\n if (buf.get(buf.length - 1) !== NewLine[0]) {\n throw errCode(new Error('missing newline'), 'ERR_INVALID_MULTISTREAM_SELECT_MESSAGE')\n }\n\n return buf.shallowSlice(0, -1) // Remove newline\n}\n\nmodule.exports = {\n encode,\n write,\n writeAll,\n read\n}\n","'use strict'\n\nconst debug = require('debug')\nconst errCode = require('err-code')\nconst multistream = require('./multistream')\n// @ts-expect-error no types\nconst handshake = require('it-handshake')\n\nconst log = Object.assign(debug('mss:select'), {\n error: debug('mss:select:error')\n})\n\n/**\n * @typedef {import('bl/BufferList')} BufferList\n * @typedef {import('./types').DuplexStream<Uint8Array | BufferList>} DuplexStream\n * @typedef {import('./types').AbortOptions} AbortOptions\n */\n\n/**\n * @param {DuplexStream} stream\n * @param {string | string[]} protocols\n * @param {string} [protocolId]\n * @param {AbortOptions} [options]\n */\nmodule.exports = async function select (stream, protocols, protocolId, options) {\n protocols = Array.isArray(protocols) ? [...protocols] : [protocols]\n const { reader, writer, rest, stream: shakeStream } = handshake(stream)\n\n const protocol = protocols.shift()\n\n if (!protocol) {\n throw new Error('At least one protocol must be specified')\n }\n\n if (protocolId) {\n log('select: write [\"%s\", \"%s\"]', protocolId, protocol)\n multistream.writeAll(writer, [protocolId, protocol])\n } else {\n log('select: write \"%s\"', protocol)\n multistream.write(writer, protocol)\n }\n\n let response = (await multistream.read(reader, options)).toString()\n log('select: read \"%s\"', response)\n\n // Read the protocol response if we got the protocolId in return\n if (response === protocolId) {\n response = (await multistream.read(reader, options)).toString()\n log('select: read \"%s\"', response)\n }\n\n // We're done\n if (response === protocol) {\n rest()\n return { stream: shakeStream, protocol }\n }\n\n // We haven't gotten a valid ack, try the other protocols\n for (const protocol of protocols) {\n log('select: write \"%s\"', protocol)\n multistream.write(writer, protocol)\n const response = (await multistream.read(reader, options)).toString()\n log('select: read \"%s\" for \"%s\"', response, protocol)\n\n if (response === protocol) {\n rest() // End our writer so others can start writing to stream\n return { stream: shakeStream, protocol }\n }\n }\n\n rest()\n throw errCode(new Error('protocol selection failed'), 'ERR_UNSUPPORTED_PROTOCOL')\n}\n","'use strict';\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\nmodule.exports = function mutableProxyFactory(defaultTarget) {\n var mutableHandler = void 0;\n var mutableTarget = void 0;\n\n function setTarget(target) {\n if (!(target instanceof Object)) {\n throw new Error('Target \"' + target + '\" is not an object');\n }\n mutableTarget = target;\n }\n\n function setHandler(handler) {\n Object.keys(handler).forEach(function (key) {\n var value = handler[key];\n\n if (typeof value !== 'function') {\n throw new Error('Trap \"' + key + ': ' + value + '\" is not a function');\n }\n\n if (!Reflect[key]) {\n throw new Error('Trap \"' + key + ': ' + value + '\" is not a valid trap');\n }\n });\n mutableHandler = handler;\n }\n setTarget(function () {});\n\n if (defaultTarget) {\n setTarget(defaultTarget);\n }\n setHandler(Reflect);\n\n // Dynamically forward all the traps to the associated methods on the mutable handler\n var handler = new Proxy({}, {\n get: function get(target, property) {\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return mutableHandler[property].apply(null, [mutableTarget].concat(_toConsumableArray(args.slice(1))));\n };\n }\n });\n\n return {\n setTarget: setTarget,\n setHandler: setHandler,\n getTarget: function getTarget() {\n return mutableTarget;\n },\n getHandler: function getHandler() {\n return mutableHandler;\n },\n\n proxy: new Proxy(mutableTarget, handler)\n };\n};","'use strict'\n\nif (globalThis.fetch && globalThis.Headers && globalThis.Request && globalThis.Response) {\n module.exports = {\n default: globalThis.fetch,\n Headers: globalThis.Headers,\n Request: globalThis.Request,\n Response: globalThis.Response\n }\n} else {\n module.exports = {\n default: require('node-fetch').default,\n Headers: require('node-fetch').Headers,\n Request: require('node-fetch').Request,\n Response: require('node-fetch').Response\n }\n}\n","// Generated by CoffeeScript 1.12.7\n(function() {\n var Netmask, atob, chr, chr0, chrA, chra, ip2long, long2ip;\n\n long2ip = function(long) {\n var a, b, c, d;\n a = (long & (0xff << 24)) >>> 24;\n b = (long & (0xff << 16)) >>> 16;\n c = (long & (0xff << 8)) >>> 8;\n d = long & 0xff;\n return [a, b, c, d].join('.');\n };\n\n ip2long = function(ip) {\n var b, c, i, j, n, ref;\n b = [];\n for (i = j = 0; j <= 3; i = ++j) {\n if (ip.length === 0) {\n break;\n }\n if (i > 0) {\n if (ip[0] !== '.') {\n throw new Error('Invalid IP');\n }\n ip = ip.substring(1);\n }\n ref = atob(ip), n = ref[0], c = ref[1];\n ip = ip.substring(c);\n b.push(n);\n }\n if (ip.length !== 0) {\n throw new Error('Invalid IP');\n }\n switch (b.length) {\n case 1:\n if (b[0] > 0xFFFFFFFF) {\n throw new Error('Invalid IP');\n }\n return b[0] >>> 0;\n case 2:\n if (b[0] > 0xFF || b[1] > 0xFFFFFF) {\n throw new Error('Invalid IP');\n }\n return (b[0] << 24 | b[1]) >>> 0;\n case 3:\n if (b[0] > 0xFF || b[1] > 0xFF || b[2] > 0xFFFF) {\n throw new Error('Invalid IP');\n }\n return (b[0] << 24 | b[1] << 16 | b[2]) >>> 0;\n case 4:\n if (b[0] > 0xFF || b[1] > 0xFF || b[2] > 0xFF || b[3] > 0xFF) {\n throw new Error('Invalid IP');\n }\n return (b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3]) >>> 0;\n default:\n throw new Error('Invalid IP');\n }\n };\n\n chr = function(b) {\n return b.charCodeAt(0);\n };\n\n chr0 = chr('0');\n\n chra = chr('a');\n\n chrA = chr('A');\n\n atob = function(s) {\n var base, dmax, i, n, start;\n n = 0;\n base = 10;\n dmax = '9';\n i = 0;\n if (s.length > 1 && s[i] === '0') {\n if (s[i + 1] === 'x' || s[i + 1] === 'X') {\n i += 2;\n base = 16;\n } else if ('0' <= s[i + 1] && s[i + 1] <= '9') {\n i++;\n base = 8;\n dmax = '7';\n }\n }\n start = i;\n while (i < s.length) {\n if ('0' <= s[i] && s[i] <= dmax) {\n n = (n * base + (chr(s[i]) - chr0)) >>> 0;\n } else if (base === 16) {\n if ('a' <= s[i] && s[i] <= 'f') {\n n = (n * base + (10 + chr(s[i]) - chra)) >>> 0;\n } else if ('A' <= s[i] && s[i] <= 'F') {\n n = (n * base + (10 + chr(s[i]) - chrA)) >>> 0;\n } else {\n break;\n }\n } else {\n break;\n }\n if (n > 0xFFFFFFFF) {\n throw new Error('too large');\n }\n i++;\n }\n if (i === start) {\n throw new Error('empty octet');\n }\n return [n, i];\n };\n\n Netmask = (function() {\n function Netmask(net, mask) {\n var error, i, j, ref;\n if (typeof net !== 'string') {\n throw new Error(\"Missing `net' parameter\");\n }\n if (!mask) {\n ref = net.split('/', 2), net = ref[0], mask = ref[1];\n }\n if (!mask) {\n mask = 32;\n }\n if (typeof mask === 'string' && mask.indexOf('.') > -1) {\n try {\n this.maskLong = ip2long(mask);\n } catch (error1) {\n error = error1;\n throw new Error(\"Invalid mask: \" + mask);\n }\n for (i = j = 32; j >= 0; i = --j) {\n if (this.maskLong === (0xffffffff << (32 - i)) >>> 0) {\n this.bitmask = i;\n break;\n }\n }\n } else if (mask || mask === 0) {\n this.bitmask = parseInt(mask, 10);\n this.maskLong = 0;\n if (this.bitmask > 0) {\n this.maskLong = (0xffffffff << (32 - this.bitmask)) >>> 0;\n }\n } else {\n throw new Error(\"Invalid mask: empty\");\n }\n try {\n this.netLong = (ip2long(net) & this.maskLong) >>> 0;\n } catch (error1) {\n error = error1;\n throw new Error(\"Invalid net address: \" + net);\n }\n if (!(this.bitmask <= 32)) {\n throw new Error(\"Invalid mask for ip4: \" + mask);\n }\n this.size = Math.pow(2, 32 - this.bitmask);\n this.base = long2ip(this.netLong);\n this.mask = long2ip(this.maskLong);\n this.hostmask = long2ip(~this.maskLong);\n this.first = this.bitmask <= 30 ? long2ip(this.netLong + 1) : this.base;\n this.last = this.bitmask <= 30 ? long2ip(this.netLong + this.size - 2) : long2ip(this.netLong + this.size - 1);\n this.broadcast = this.bitmask <= 30 ? long2ip(this.netLong + this.size - 1) : void 0;\n }\n\n Netmask.prototype.contains = function(ip) {\n if (typeof ip === 'string' && (ip.indexOf('/') > 0 || ip.split('.').length !== 4)) {\n ip = new Netmask(ip);\n }\n if (ip instanceof Netmask) {\n return this.contains(ip.base) && this.contains(ip.broadcast || ip.last);\n } else {\n return (ip2long(ip) & this.maskLong) >>> 0 === (this.netLong & this.maskLong) >>> 0;\n }\n };\n\n Netmask.prototype.next = function(count) {\n if (count == null) {\n count = 1;\n }\n return new Netmask(long2ip(this.netLong + (this.size * count)), this.mask);\n };\n\n Netmask.prototype.forEach = function(fn) {\n var index, lastLong, long;\n long = ip2long(this.first);\n lastLong = ip2long(this.last);\n index = 0;\n while (long <= lastLong) {\n fn(long2ip(long), long, index);\n index++;\n long++;\n }\n };\n\n Netmask.prototype.toString = function() {\n return this.base + \"/\" + this.bitmask;\n };\n\n return Netmask;\n\n })();\n\n exports.ip2long = ip2long;\n\n exports.long2ip = long2ip;\n\n exports.Netmask = Netmask;\n\n}).call(this);\n","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function () {\n\t// the only reliable means to get the global object is\n\t// `Function('return this')()`\n\t// However, this causes CSP violations in Chrome apps.\n\tif (typeof self !== 'undefined') { return self; }\n\tif (typeof window !== 'undefined') { return window; }\n\tif (typeof global !== 'undefined') { return global; }\n\tthrow new Error('unable to locate global object');\n}\n\nvar global = getGlobal();\n\nmodule.exports = exports = global.fetch;\n\n// Needed for TypeScript and Webpack.\nif (global.fetch) {\n\texports.default = global.fetch.bind(global);\n}\n\nexports.Headers = global.Headers;\nexports.Request = global.Request;\nexports.Response = global.Response;","/**\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-<mode>', 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-<mode>', 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-<mode>', 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-<mode>', 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<N> 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-<mode>', key);\n * forge.cipher.createDecipher('AES-<mode>', 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 * [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 * @return the parsed asn1 object.\n */\nasn1.fromDer = function(bytes, options) {\n if(options === undefined) {\n options = {\n strict: true,\n decodeBitStrings: true\n };\n }\n if(typeof options === 'boolean') {\n options = {\n strict: options,\n decodeBitStrings: true\n };\n }\n if(!('strict' in options)) {\n options.strict = 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 return _fromDer(bytes, bytes.length(), 0, options);\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 verbose: options.verbose,\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 }\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 rval += forge.util.decodeUtf8(obj.value);\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 <stesie@brokenpipe.de>\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-<mode>', 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-<mode>', 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-<mode>', 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-<mode>', 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-<mode>', key);\n * forge.cipher.createDecipher('DES-<mode>', 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<<dbits)-1);\nBigInteger.prototype.DV = (1<<dbits);\n\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2,BI_FP);\nBigInteger.prototype.F1 = BI_FP-dbits;\nBigInteger.prototype.F2 = 2*dbits-BI_FP;\n\n// Digit conversions\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr,vv;\nrr = \"0\".charCodeAt(0);\nfor(vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;\nrr = \"a\".charCodeAt(0);\nfor(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\nrr = \"A\".charCodeAt(0);\nfor(vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;\n\nfunction int2char(n) { return BI_RM.charAt(n); }\nfunction intAt(s,i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c==null)?-1:c;\n}\n\n// (protected) copy this to r\nfunction bnpCopyTo(r) {\n for(var i = this.t-1; i >= 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))<<sh;\n this.data[this.t++] = (x>>(this.DB-sh));\n } else\n this.data[this.t-1] |= x<<sh;\n sh += k;\n if(sh >= 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)<<sh;\n }\n this.clamp();\n if(mi) BigInteger.ZERO.subTo(this,this);\n}\n\n// (protected) clamp off excess high words\nfunction bnpClamp() {\n var c = this.s&this.DM;\n while(this.t > 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<<k)-1, d, m = false, r = \"\", i = this.t;\n var p = this.DB-(i*this.DB)%k;\n if(i-- > 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)-1))<<(k-p);\n d |= this.data[--i]>>(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<<cbs)-1;\n var ds = Math.floor(n/this.DB), c = (this.s<<bs)&this.DM, i;\n for(i = this.t-1; i >= 0; --i) {\n r.data[i+ds+1] = (this.data[i]>>cbs)|c;\n c = (this.data[i]&bm)<<bs;\n }\n for(i = ds-1; i >= 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)-1;\n r.data[0] = this.data[ds]>>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r.data[i-ds-1] |= (this.data[i]&bm)<<cbs;\n r.data[i-ds] = this.data[i]>>bs;\n }\n if(bs > 0) r.data[this.t-ds-1] |= (this.s&bm)<<cbs;\n r.t = this.t-ds;\n r.clamp();\n}\n\n// (protected) r = this - a\nfunction bnpSubTo(a,r) {\n var i = 0, c = 0, m = Math.min(a.t,this.t);\n while(i < m) {\n c += this.data[i]-a.data[i];\n r.data[i++] = c&this.DM;\n c >>= 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<<this.F1)+((ys>1)?y.data[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<<this.F1)/yt, e = 1<<this.F2;\n var i = r.t, j = i-ys, t = (q==null)?nbi():q;\n y.dlShiftTo(j,t);\n if(r.compareTo(t) >= 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<<i)) > 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))<<this.DB)|this.data[0];\n}\n\n//(public) return value as byte\nfunction bnByteValue() { return (this.t==0)?this.s:(this.data[0]<<24)>>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<<t)-1); else x[0] = 0;\n this.fromString(x,256);\n}\n}\n\n//(public) convert to bigendian byte array\nfunction bnToByteArray() {\nvar i = this.t, r = new Array();\nr[0] = this.s;\nvar p = this.DB-(i*this.DB)%8, d, k = 0;\nif(i-- > 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)-1))<<(8-p);\n d |= this.data[--i]>>(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<<n)\nfunction bnpChangeBit(n,op) {\nvar r = BigInteger.ONE.shiftLeft(n);\nthis.bitwiseTo(r,op,r);\nreturn r;\n}\n\n//(public) this | (1<<n)\nfunction bnSetBit(n) { return this.changeBit(n,op_or); }\n\n//(public) this & ~(1<<n)\nfunction bnClearBit(n) { return this.changeBit(n,op_andnot); }\n\n//(public) this ^ (1<<n)\nfunction bnFlipBit(n) { return this.changeBit(n,op_xor); }\n\n//(protected) r = this + a\nfunction bnpAddTo(a,r) {\nvar i = 0, c = 0, m = Math.min(a.t,this.t);\nwhile(i < m) {\n c += this.data[i]+a.data[i];\n r.data[i++] = c&this.DM;\n c >>= 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<<k)-1;\ng[1] = z.convert(this);\nif(k > 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<<i)) == 0) {\n z.sqrTo(r,r2); t = r; r = r2; r2 = t;\n if(--i < 0) { i = this.DB-1; --j; }\n }\n}\nreturn z.revert(r);\n}\n\n//(public) gcd(this,a) (HAC 14.54)\nfunction bnGCD(a) {\nvar x = (this.s<0)?this.negate():this.clone();\nvar y = (a.s<0)?a.negate():a.clone();\nif(x.compareTo(y) < 0) { var t = x; x = y; y = t; }\nvar i = x.getLowestSetBit(), g = y.getLowestSetBit();\nif(g < 0) return x;\nif(i < g) g = i;\nif(g > 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 <stesie@brokenpipe.de>\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 <stesie@brokenpipe.de>\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('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 <stesie@brokenpipe.de>\n *\n * Copyright (c) 2010-2013 Digital Bazaar, Inc.\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\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#7 v1.5.\n *\n * @author Stefan Siegl\n * @author Dave Longley\n *\n * Copyright (c) 2012 Stefan Siegl <stesie@brokenpipe.de>\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 <stesie@brokenpipe.de>\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 * 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: <the maximum amount of time to block the main\n * thread before allowing I/O other JS to run>,\n * millerRabinTests: <the number of miller-rabin tests to run>,\n * workerScript: <the worker script URL>,\n * workers: <the number of web workers (if supported) to use,\n * -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 * }\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 <stesie@brokenpipe.de>\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 <stesie@brokenpipe.de>\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/**\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 *\n * @return true if the signature was verified, false if not.\n */\n key.verify = function(digest, signature, scheme) {\n if(typeof scheme === 'string') {\n scheme = scheme.toUpperCase();\n } else if(scheme === undefined) {\n scheme = 'RSASSA-PKCS1-V1_5';\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 // compare the given digest to the decrypted one\n return digest === obj.value[1].value;\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 <the-csr-pem-file> -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","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","const events = {}\n\nconst observable = (worker) => {\n worker.addEventListener('message', (event) => {\n observable.dispatchEvent('message', worker, event)\n })\n\n if (worker.port) {\n worker.port.addEventListener('message', (event) => {\n observable.dispatchEvent('message', worker, event)\n })\n }\n}\n\nobservable.addEventListener = (type, fn) => {\n if (!events[type]) {\n events[type] = []\n }\n\n events[type].push(fn)\n}\n\nobservable.removeEventListener = (type, fn) => {\n if (!events[type]) {\n return\n }\n\n events[type] = events[type]\n .filter(listener => listener === fn)\n}\n\nobservable.dispatchEvent = function () {\n const args = Array.prototype.slice.call(arguments)\n const type = args.shift()\n\n if (!events[type]) {\n return\n }\n\n events[type].forEach(fn => fn.apply(null, args))\n}\n\nmodule.exports = observable\n","'use strict';\nconst pSome = require('p-some');\nconst PCancelable = require('p-cancelable');\n\nmodule.exports = (iterable, options) => {\n\tconst anyCancelable = pSome(iterable, {...options, count: 1});\n\n\treturn PCancelable.fn(async onCancel => {\n\t\tonCancel(() => {\n\t\t\tanyCancelable.cancel();\n\t\t});\n\n\t\tconst [value] = await anyCancelable;\n\t\treturn value;\n\t})();\n};\n\nmodule.exports.AggregateError = pSome.AggregateError;\n","'use strict';\n\nclass CancelError extends Error {\n\tconstructor(reason) {\n\t\tsuper(reason || 'Promise was canceled');\n\t\tthis.name = 'CancelError';\n\t}\n\n\tget isCanceled() {\n\t\treturn true;\n\t}\n}\n\nclass PCancelable {\n\tstatic fn(userFn) {\n\t\treturn (...arguments_) => {\n\t\t\treturn new PCancelable((resolve, reject, onCancel) => {\n\t\t\t\targuments_.push(onCancel);\n\t\t\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\t\t\tuserFn(...arguments_).then(resolve, reject);\n\t\t\t});\n\t\t};\n\t}\n\n\tconstructor(executor) {\n\t\tthis._cancelHandlers = [];\n\t\tthis._isPending = true;\n\t\tthis._isCanceled = false;\n\t\tthis._rejectOnCancel = true;\n\n\t\tthis._promise = new Promise((resolve, reject) => {\n\t\t\tthis._reject = reject;\n\n\t\t\tconst onResolve = value => {\n\t\t\t\tif (!this._isCanceled || !onCancel.shouldReject) {\n\t\t\t\t\tthis._isPending = false;\n\t\t\t\t\tresolve(value);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onReject = error => {\n\t\t\t\tthis._isPending = false;\n\t\t\t\treject(error);\n\t\t\t};\n\n\t\t\tconst onCancel = handler => {\n\t\t\t\tif (!this._isPending) {\n\t\t\t\t\tthrow new Error('The `onCancel` handler was attached after the promise settled.');\n\t\t\t\t}\n\n\t\t\t\tthis._cancelHandlers.push(handler);\n\t\t\t};\n\n\t\t\tObject.defineProperties(onCancel, {\n\t\t\t\tshouldReject: {\n\t\t\t\t\tget: () => this._rejectOnCancel,\n\t\t\t\t\tset: boolean => {\n\t\t\t\t\t\tthis._rejectOnCancel = boolean;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn executor(onResolve, onReject, onCancel);\n\t\t});\n\t}\n\n\tthen(onFulfilled, onRejected) {\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\treturn this._promise.then(onFulfilled, onRejected);\n\t}\n\n\tcatch(onRejected) {\n\t\treturn this._promise.catch(onRejected);\n\t}\n\n\tfinally(onFinally) {\n\t\treturn this._promise.finally(onFinally);\n\t}\n\n\tcancel(reason) {\n\t\tif (!this._isPending || this._isCanceled) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isCanceled = true;\n\n\t\tif (this._cancelHandlers.length > 0) {\n\t\t\ttry {\n\t\t\t\tfor (const handler of this._cancelHandlers) {\n\t\t\t\t\thandler();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis._reject(error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tif (this._rejectOnCancel) {\n\t\t\tthis._reject(new CancelError(reason));\n\t\t}\n\t}\n\n\tget isCanceled() {\n\t\treturn this._isCanceled;\n\t}\n}\n\nObject.setPrototypeOf(PCancelable.prototype, Promise.prototype);\n\nmodule.exports = PCancelable;\nmodule.exports.CancelError = CancelError;\n","'use strict';\n\nconst pDefer = () => {\n\tconst deferred = {};\n\n\tdeferred.promise = new Promise((resolve, reject) => {\n\t\tdeferred.resolve = resolve;\n\t\tdeferred.reject = reject;\n\t});\n\n\treturn deferred;\n};\n\nmodule.exports = pDefer;\n","const Fifo = require('fast-fifo')\nconst defer = require('p-defer')\n\nmodule.exports = class PFifo {\n constructor () {\n this._buffer = new Fifo()\n this._waitingConsumers = new Fifo()\n }\n\n push (chunk) {\n const { promise, resolve } = defer()\n this._buffer.push({ chunk, resolve })\n this._consume()\n return promise\n }\n\n _consume () {\n while (!this._waitingConsumers.isEmpty() && !this._buffer.isEmpty()) {\n const nextConsumer = this._waitingConsumers.shift()\n const nextChunk = this._buffer.shift()\n nextConsumer.resolve(nextChunk.chunk)\n nextChunk.resolve()\n }\n }\n\n shift () {\n const { promise, resolve } = defer()\n this._waitingConsumers.push({ resolve })\n this._consume()\n return promise\n }\n\n isEmpty () {\n return this._buffer.isEmpty()\n }\n}\n","'use strict';\nmodule.exports = (promise, onFinally) => {\n\tonFinally = onFinally || (() => {});\n\n\treturn promise.then(\n\t\tval => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => val),\n\t\terr => new Promise(resolve => {\n\t\t\tresolve(onFinally());\n\t\t}).then(() => {\n\t\t\tthrow err;\n\t\t})\n\t);\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst EventEmitter = require(\"eventemitter3\");\nconst p_timeout_1 = require(\"p-timeout\");\nconst priority_queue_1 = require(\"./priority-queue\");\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst empty = () => { };\nconst timeoutError = new p_timeout_1.TimeoutError();\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n constructor(options) {\n var _a, _b, _c, _d;\n super();\n this._intervalCount = 0;\n this._intervalEnd = 0;\n this._pendingCount = 0;\n this._resolveEmpty = empty;\n this._resolveIdle = empty;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = Object.assign({ carryoverConcurrencyCount: false, intervalCap: Infinity, interval: 0, concurrency: Infinity, autoStart: true, queueClass: priority_queue_1.default }, options);\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n }\n this._carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this._isIntervalIgnored = options.intervalCap === Infinity || options.interval === 0;\n this._intervalCap = options.intervalCap;\n this._interval = options.interval;\n this._queue = new options.queueClass();\n this._queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this._timeout = options.timeout;\n this._throwOnTimeout = options.throwOnTimeout === true;\n this._isPaused = options.autoStart === false;\n }\n get _doesIntervalAllowAnother() {\n return this._isIntervalIgnored || this._intervalCount < this._intervalCap;\n }\n get _doesConcurrentAllowAnother() {\n return this._pendingCount < this._concurrency;\n }\n _next() {\n this._pendingCount--;\n this._tryToStartAnother();\n this.emit('next');\n }\n _resolvePromises() {\n this._resolveEmpty();\n this._resolveEmpty = empty;\n if (this._pendingCount === 0) {\n this._resolveIdle();\n this._resolveIdle = empty;\n this.emit('idle');\n }\n }\n _onResumeInterval() {\n this._onInterval();\n this._initializeIntervalIfNeeded();\n this._timeoutId = undefined;\n }\n _isIntervalPaused() {\n const now = Date.now();\n if (this._intervalId === undefined) {\n const delay = this._intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this._intervalCount = (this._carryoverConcurrencyCount) ? this._pendingCount : 0;\n }\n else {\n // Act as the interval is pending\n if (this._timeoutId === undefined) {\n this._timeoutId = setTimeout(() => {\n this._onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n _tryToStartAnother() {\n if (this._queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this._intervalId) {\n clearInterval(this._intervalId);\n }\n this._intervalId = undefined;\n this._resolvePromises();\n return false;\n }\n if (!this._isPaused) {\n const canInitializeInterval = !this._isIntervalPaused();\n if (this._doesIntervalAllowAnother && this._doesConcurrentAllowAnother) {\n const job = this._queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this._initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n _initializeIntervalIfNeeded() {\n if (this._isIntervalIgnored || this._intervalId !== undefined) {\n return;\n }\n this._intervalId = setInterval(() => {\n this._onInterval();\n }, this._interval);\n this._intervalEnd = Date.now() + this._interval;\n }\n _onInterval() {\n if (this._intervalCount === 0 && this._pendingCount === 0 && this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = undefined;\n }\n this._intervalCount = this._carryoverConcurrencyCount ? this._pendingCount : 0;\n this._processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n _processQueue() {\n // eslint-disable-next-line no-empty\n while (this._tryToStartAnother()) { }\n }\n get concurrency() {\n return this._concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this._concurrency = newConcurrency;\n this._processQueue();\n }\n /**\n Adds a sync or async task to the queue. Always returns a promise.\n */\n async add(fn, options = {}) {\n return new Promise((resolve, reject) => {\n const run = async () => {\n this._pendingCount++;\n this._intervalCount++;\n try {\n const operation = (this._timeout === undefined && options.timeout === undefined) ? fn() : p_timeout_1.default(Promise.resolve(fn()), (options.timeout === undefined ? this._timeout : options.timeout), () => {\n if (options.throwOnTimeout === undefined ? this._throwOnTimeout : options.throwOnTimeout) {\n reject(timeoutError);\n }\n return undefined;\n });\n resolve(await operation);\n }\n catch (error) {\n reject(error);\n }\n this._next();\n };\n this._queue.enqueue(run, options);\n this._tryToStartAnother();\n this.emit('add');\n });\n }\n /**\n Same as `.add()`, but accepts an array of sync or async functions.\n\n @returns A promise that resolves when all functions are resolved.\n */\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this._isPaused) {\n return this;\n }\n this._isPaused = false;\n this._processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this._isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this._queue = new this._queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this._queue.size === 0) {\n return;\n }\n return new Promise(resolve => {\n const existingResolve = this._resolveEmpty;\n this._resolveEmpty = () => {\n existingResolve();\n resolve();\n };\n });\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this._pendingCount === 0 && this._queue.size === 0) {\n return;\n }\n return new Promise(resolve => {\n const existingResolve = this._resolveIdle;\n this._resolveIdle = () => {\n existingResolve();\n resolve();\n };\n });\n }\n /**\n Size of the queue.\n */\n get size() {\n return this._queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n return this._queue.filter(options).length;\n }\n /**\n Number of pending promises.\n */\n get pending() {\n return this._pendingCount;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this._isPaused;\n }\n get timeout() {\n return this._timeout;\n }\n /**\n Set the timeout for future operations.\n */\n set timeout(milliseconds) {\n this._timeout = milliseconds;\n }\n}\nexports.default = PQueue;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nfunction lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = (count / 2) | 0;\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\nexports.default = lowerBound;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst lower_bound_1 = require(\"./lower-bound\");\nclass PriorityQueue {\n constructor() {\n this._queue = [];\n }\n enqueue(run, options) {\n options = Object.assign({ priority: 0 }, options);\n const element = {\n priority: options.priority,\n run\n };\n if (this.size && this._queue[this.size - 1].priority >= options.priority) {\n this._queue.push(element);\n return;\n }\n const index = lower_bound_1.default(this._queue, element, (a, b) => b.priority - a.priority);\n this._queue.splice(index, 0, element);\n }\n dequeue() {\n const item = this._queue.shift();\n return item === null || item === void 0 ? void 0 : item.run;\n }\n filter(options) {\n return this._queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return this._queue.length;\n }\n}\nexports.default = PriorityQueue;\n","'use strict';\n\nconst pFinally = require('p-finally');\n\nclass TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\nconst pTimeout = (promise, milliseconds, fallback) => new Promise((resolve, reject) => {\n\tif (typeof milliseconds !== 'number' || milliseconds < 0) {\n\t\tthrow new TypeError('Expected `milliseconds` to be a positive number');\n\t}\n\n\tif (milliseconds === Infinity) {\n\t\tresolve(promise);\n\t\treturn;\n\t}\n\n\tconst timer = setTimeout(() => {\n\t\tif (typeof fallback === 'function') {\n\t\t\ttry {\n\t\t\t\tresolve(fallback());\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\tif (typeof promise.cancel === 'function') {\n\t\t\tpromise.cancel();\n\t\t}\n\n\t\treject(timeoutError);\n\t}, milliseconds);\n\n\t// TODO: Use native `finally` keyword when targeting Node.js 10\n\tpFinally(\n\t\t// eslint-disable-next-line promise/prefer-await-to-then\n\t\tpromise.then(resolve, reject),\n\t\t() => {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t);\n});\n\nmodule.exports = pTimeout;\n// TODO: Remove this for the next major release\nmodule.exports.default = pTimeout;\n\nmodule.exports.TimeoutError = TimeoutError;\n","'use strict';\n\nconst pReflect = async promise => {\n\ttry {\n\t\tconst value = await promise;\n\t\treturn {\n\t\t\tisFulfilled: true,\n\t\t\tisRejected: false,\n\t\t\tvalue\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tisFulfilled: false,\n\t\t\tisRejected: true,\n\t\t\treason: error\n\t\t};\n\t}\n};\n\nmodule.exports = pReflect;\n// TODO: Remove this for the next major release\nmodule.exports.default = pReflect;\n","'use strict';\nconst retry = require('retry');\n\nconst networkErrorMsgs = [\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari\n\t'Network request failed' // `cross-fetch`\n];\n\nclass AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nconst isNetworkError = errorMessage => networkErrorMsgs.includes(errorMessage);\n\nconst pRetry = (input, options) => new Promise((resolve, reject) => {\n\toptions = {\n\t\tonFailedAttempt: () => {},\n\t\tretries: 10,\n\t\t...options\n\t};\n\n\tconst operation = retry.operation(options);\n\n\toperation.attempt(async attemptNumber => {\n\t\ttry {\n\t\t\tresolve(await input(attemptNumber));\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof Error)) {\n\t\t\t\treject(new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (error instanceof AbortError) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error.originalError);\n\t\t\t} else if (error instanceof TypeError && !isNetworkError(error.message)) {\n\t\t\t\toperation.stop();\n\t\t\t\treject(error);\n\t\t\t} else {\n\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\ttry {\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\treject(operation.mainError());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n});\n\nmodule.exports = pRetry;\n// TODO: remove this in the next major version\nmodule.exports.default = pRetry;\n\nmodule.exports.AbortError = AbortError;\n","'use strict';\nconst pReflect = require('p-reflect');\nconst pLimit = require('p-limit');\n\nmodule.exports = async (array, options = {}) => {\n\tconst {concurrency = Infinity} = options;\n\tconst limit = pLimit(concurrency);\n\n\treturn Promise.all(array.map(element => {\n\t\tif (element && typeof element.then === 'function') { // eslint-disable-line promise/prefer-await-to-then\n\t\t\treturn pReflect(element);\n\t\t}\n\n\t\tif (typeof element === 'function') {\n\t\t\treturn pReflect(limit(() => element()));\n\t\t}\n\n\t\treturn pReflect(Promise.resolve(element));\n\t}));\n};\n","'use strict';\nconst pTry = require('p-try');\n\nconst pLimit = concurrency => {\n\tif (!((Number.isInteger(concurrency) || concurrency === Infinity) && concurrency > 0)) {\n\t\treturn Promise.reject(new TypeError('Expected `concurrency` to be a number from 1 and up'));\n\t}\n\n\tconst queue = [];\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.length > 0) {\n\t\t\tqueue.shift()();\n\t\t}\n\t};\n\n\tconst run = (fn, resolve, ...args) => {\n\t\tactiveCount++;\n\n\t\tconst result = pTry(fn, ...args);\n\n\t\tresolve(result);\n\n\t\tresult.then(next, next);\n\t};\n\n\tconst enqueue = (fn, resolve, ...args) => {\n\t\tif (activeCount < concurrency) {\n\t\t\trun(fn, resolve, ...args);\n\t\t} else {\n\t\t\tqueue.push(run.bind(null, fn, resolve, ...args));\n\t\t}\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args));\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.length\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.length = 0;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn generator;\n};\n\nmodule.exports = pLimit;\nmodule.exports.default = pLimit;\n","'use strict';\nconst AggregateError = require('aggregate-error');\nconst PCancelable = require('p-cancelable');\n\nclass FilterError extends Error { }\n\nconst pSome = (iterable, options) => new PCancelable((resolve, reject, onCancel) => {\n\tconst {\n\t\tcount,\n\t\tfilter = () => true\n\t} = options;\n\n\tif (!Number.isFinite(count)) {\n\t\treject(new TypeError(`Expected a finite number, got ${typeof options.count}`));\n\t\treturn;\n\t}\n\n\tconst values = [];\n\tconst errors = [];\n\tlet elementCount = 0;\n\tlet isSettled = false;\n\n\tconst completed = new Set();\n\tconst maybeSettle = () => {\n\t\tif (values.length === count) {\n\t\t\tresolve(values);\n\t\t\tisSettled = true;\n\t\t}\n\n\t\tif (elementCount - errors.length < count) {\n\t\t\treject(new AggregateError(errors));\n\t\t\tisSettled = true;\n\t\t}\n\n\t\treturn isSettled;\n\t};\n\n\tconst cancelPending = () => {\n\t\tfor (const promise of iterable) {\n\t\t\tif (!completed.has(promise) && typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\t\t}\n\t};\n\n\tonCancel(cancelPending);\n\n\tfor (const element of iterable) {\n\t\telementCount++;\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tconst value = await element;\n\n\t\t\t\tif (isSettled) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!filter(value)) {\n\t\t\t\t\tthrow new FilterError('Value does not satisfy filter');\n\t\t\t\t}\n\n\t\t\t\tvalues.push(value);\n\t\t\t} catch (error) {\n\t\t\t\terrors.push(error);\n\t\t\t} finally {\n\t\t\t\tcompleted.add(element);\n\n\t\t\t\tif (!isSettled && maybeSettle()) {\n\t\t\t\t\tcancelPending();\n\t\t\t\t}\n\t\t\t}\n\t\t})();\n\t}\n\n\tif (count > elementCount) {\n\t\treject(new RangeError(`Expected input to contain at least ${options.count} items, but contains ${elementCount} items`));\n\t\tcancelPending();\n\t}\n});\n\nmodule.exports = pSome;\nmodule.exports.AggregateError = AggregateError;\nmodule.exports.FilterError = FilterError;\n","'use strict';\n\nclass TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\nconst pTimeout = (promise, milliseconds, fallback, options) => {\n\tlet timer;\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || milliseconds < 0) {\n\t\t\tthrow new TypeError('Expected `milliseconds` to be a positive number');\n\t\t}\n\n\t\tif (milliseconds === Infinity) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n};\n\nmodule.exports = pTimeout;\n// TODO: Remove this for the next major release\nmodule.exports.default = pTimeout;\n\nmodule.exports.TimeoutError = TimeoutError;\n","'use strict';\n\nconst pTry = (fn, ...arguments_) => new Promise(resolve => {\n\tresolve(fn(...arguments_));\n});\n\nmodule.exports = pTry;\n// TODO: remove this in the next major version\nmodule.exports.default = pTry;\n","/*\n * Id is an object representation of a peer Id. a peer Id is a multihash\n */\n\n'use strict'\n\nconst { CID } = require('multiformats/cid')\nconst b32 = require('multiformats/bases/base32')\nconst b36 = require('multiformats/bases/base36')\nconst b58 = require('multiformats/bases/base58')\nconst b64 = require('multiformats/bases/base64')\nconst { base58btc } = require('multiformats/bases/base58')\nconst { base32 } = require('multiformats/bases/base32')\nconst { base16 } = require('multiformats/bases/base16')\nconst Digest = require('multiformats/hashes/digest')\nconst cryptoKeys = require('libp2p-crypto/src/keys')\nconst withIs = require('class-is')\nconst { PeerIdProto } = require('./proto')\nconst { equals: uint8ArrayEquals } = require('uint8arrays/equals')\nconst { fromString: uint8ArrayFromString } = require('uint8arrays/from-string')\nconst { toString: uint8ArrayToString } = require('uint8arrays/to-string')\nconst { identity } = require('multiformats/hashes/identity')\n\nconst bases = {\n ...b32,\n ...b36,\n ...b58,\n ...b64\n}\nconst baseDecoder = Object.keys(bases).reduce(\n (acc, curr) => acc.or(bases[curr]),\n base32.decoder\n)\n\n// these values are from https://github.com/multiformats/multicodec/blob/master/table.csv\nconst DAG_PB_CODE = 0x70\nconst LIBP2P_KEY_CODE = 0x72\n\nclass PeerId {\n constructor (id, privKey, pubKey) {\n if (!(id instanceof Uint8Array)) {\n throw new Error('invalid id provided')\n }\n\n if (privKey && pubKey && !uint8ArrayEquals(privKey.public.bytes, pubKey.bytes)) {\n throw new Error('inconsistent arguments')\n }\n\n this._id = id\n this._idB58String = base58btc.encode(this.id).substring(1)\n this._privKey = privKey\n this._pubKey = pubKey\n }\n\n get id () {\n return this._id\n }\n\n set id (val) {\n throw new Error('Id is immutable')\n }\n\n get privKey () {\n return this._privKey\n }\n\n set privKey (privKey) {\n this._privKey = privKey\n }\n\n get pubKey () {\n if (this._pubKey) {\n return this._pubKey\n }\n\n if (this._privKey) {\n return this._privKey.public\n }\n\n try {\n const decoded = Digest.decode(this.id)\n\n if (decoded.code === identity.code) {\n this._pubKey = cryptoKeys.unmarshalPublicKey(decoded.digest)\n }\n } catch (_) {\n // Ignore, there is no valid public key\n }\n\n return this._pubKey\n }\n\n set pubKey (pubKey) {\n this._pubKey = pubKey\n }\n\n // Return the protobuf version of the public key, matching go ipfs formatting\n marshalPubKey () {\n if (this.pubKey) {\n return cryptoKeys.marshalPublicKey(this.pubKey)\n }\n }\n\n // Return the protobuf version of the private key, matching go ipfs formatting\n marshalPrivKey () {\n if (this.privKey) {\n return cryptoKeys.marshalPrivateKey(this.privKey)\n }\n }\n\n // Return the protobuf version of the peer-id\n marshal (excludePriv) {\n return PeerIdProto.encode({\n id: this.toBytes(),\n pubKey: this.marshalPubKey(),\n privKey: excludePriv ? null : this.marshalPrivKey()\n }).finish()\n }\n\n toPrint () {\n let pid = this.toB58String()\n // All sha256 nodes start with Qm\n // We can skip the Qm to make the peer.ID more useful\n if (pid.startsWith('Qm')) {\n pid = pid.slice(2)\n }\n let maxRunes = 6\n if (pid.length < maxRunes) {\n maxRunes = pid.length\n }\n\n return '<peer.ID ' + pid.substr(0, maxRunes) + '>'\n }\n\n // return the jsonified version of the key, matching the formatting\n // of go-ipfs for its config file\n toJSON () {\n return {\n id: this.toB58String(),\n privKey: toB64Opt(this.marshalPrivKey()),\n pubKey: toB64Opt(this.marshalPubKey())\n }\n }\n\n // encode/decode functions\n toHexString () {\n return base16.encode(this.id).substring(1)\n }\n\n toBytes () {\n return this.id\n }\n\n toB58String () {\n return this._idB58String\n }\n\n // return self-describing String representation\n // in default format from RFC 0001: https://github.com/libp2p/specs/pull/209\n toString () {\n if (!this._idCIDString) {\n const cid = CID.createV1(LIBP2P_KEY_CODE, Digest.decode(this.id))\n\n Object.defineProperty(this, '_idCIDString', {\n value: cid.toString(),\n enumerable: false\n })\n }\n return this._idCIDString\n }\n\n /**\n * Checks the equality of `this` peer against a given PeerId.\n *\n * @param {Uint8Array|PeerId} id\n * @returns {boolean}\n */\n equals (id) {\n if (id instanceof Uint8Array) {\n return uint8ArrayEquals(this.id, id)\n } else if (id.id) {\n return uint8ArrayEquals(this.id, id.id)\n } else {\n throw new Error('not valid Id')\n }\n }\n\n /**\n * Checks the equality of `this` peer against a given PeerId.\n *\n * @deprecated Use `.equals`\n * @param {Uint8Array|PeerId} id\n * @returns {boolean}\n */\n isEqual (id) {\n return this.equals(id)\n }\n\n /*\n * Check if this PeerId instance is valid (privKey -> pubKey -> Id)\n */\n isValid () {\n // TODO: needs better checking\n return Boolean(this.privKey &&\n this.privKey.public &&\n this.privKey.public.bytes &&\n this.pubKey.bytes instanceof Uint8Array &&\n uint8ArrayEquals(this.privKey.public.bytes, this.pubKey.bytes))\n }\n\n /**\n * Check if the PeerId has an inline public key.\n *\n * @returns {boolean}\n */\n hasInlinePublicKey () {\n try {\n const decoded = Digest.decode(this.id)\n\n if (decoded.code === identity.code) {\n return true\n }\n } catch (_) {\n // Ignore, there is no valid public key\n }\n\n return false\n }\n}\n\nconst PeerIdWithIs = withIs(PeerId, {\n className: 'PeerId',\n symbolName: '@libp2p/js-peer-id/PeerId'\n})\n\nexports = module.exports = PeerIdWithIs\n\nconst computeDigest = (pubKey) => {\n if (pubKey.bytes.length <= 42) {\n return Digest.create(identity.code, pubKey.bytes).bytes\n } else {\n return pubKey.hash()\n }\n}\n\nconst computePeerId = async (privKey, pubKey) => {\n const digest = await computeDigest(pubKey)\n return new PeerIdWithIs(digest, privKey, pubKey)\n}\n\n// generation\nexports.create = async (opts) => {\n opts = opts || {}\n opts.bits = opts.bits || 2048\n opts.keyType = opts.keyType || 'RSA'\n\n const key = await cryptoKeys.generateKeyPair(opts.keyType, opts.bits)\n return computePeerId(key, key.public)\n}\n\nexports.createFromHexString = (str) => {\n return new PeerIdWithIs(base16.decode('f' + str))\n}\n\nexports.createFromBytes = (buf) => {\n try {\n const cid = CID.decode(buf)\n\n if (!validMulticodec(cid)) {\n throw new Error('Supplied PeerID CID is invalid')\n }\n\n return exports.createFromCID(cid)\n } catch {\n const digest = Digest.decode(buf)\n\n if (digest.code !== identity.code) {\n throw new Error('Supplied PeerID CID is invalid')\n }\n\n return new PeerIdWithIs(buf)\n }\n}\n\nexports.createFromB58String = (str) => {\n return exports.createFromBytes(base58btc.decode('z' + str))\n}\n\nconst validMulticodec = (cid) => {\n // supported: 'libp2p-key' (CIDv1) and 'dag-pb' (CIDv0 converted to CIDv1)\n return cid.code === LIBP2P_KEY_CODE || cid.code === DAG_PB_CODE\n}\n\nexports.createFromCID = (cid) => {\n cid = CID.asCID(cid)\n\n if (!cid || !validMulticodec(cid)) {\n throw new Error('Supplied PeerID CID is invalid')\n }\n\n return new PeerIdWithIs(cid.multihash.bytes)\n}\n\n// Public Key input will be a Uint8Array\nexports.createFromPubKey = async (key) => {\n let buf = key\n\n if (typeof buf === 'string') {\n buf = uint8ArrayFromString(key, 'base64pad')\n }\n\n if (!(buf instanceof Uint8Array)) {\n throw new Error('Supplied key is neither a base64 string nor a Uint8Array')\n }\n\n const pubKey = await cryptoKeys.unmarshalPublicKey(buf)\n return computePeerId(undefined, pubKey)\n}\n\n// Private key input will be a string\nexports.createFromPrivKey = async (key) => {\n if (typeof key === 'string') {\n key = uint8ArrayFromString(key, 'base64pad')\n }\n\n if (!(key instanceof Uint8Array)) {\n throw new Error('Supplied key is neither a base64 string nor a Uint8Array')\n }\n\n const privKey = await cryptoKeys.unmarshalPrivateKey(key)\n return computePeerId(privKey, privKey.public)\n}\n\nexports.createFromJSON = async (obj) => {\n const id = base58btc.decode('z' + obj.id)\n const rawPrivKey = obj.privKey && uint8ArrayFromString(obj.privKey, 'base64pad')\n const rawPubKey = obj.pubKey && uint8ArrayFromString(obj.pubKey, 'base64pad')\n const pub = rawPubKey && await cryptoKeys.unmarshalPublicKey(rawPubKey)\n\n if (!rawPrivKey) {\n return new PeerIdWithIs(id, undefined, pub)\n }\n\n const privKey = await cryptoKeys.unmarshalPrivateKey(rawPrivKey)\n const privDigest = await computeDigest(privKey.public)\n\n let pubDigest\n\n if (pub) {\n pubDigest = await computeDigest(pub)\n }\n\n if (pub && !uint8ArrayEquals(privDigest, pubDigest)) {\n throw new Error('Public and private key do not match')\n }\n\n if (id && !uint8ArrayEquals(privDigest, id)) {\n throw new Error('Id and private key do not match')\n }\n\n return new PeerIdWithIs(id, privKey, pub)\n}\n\nexports.createFromProtobuf = async (buf) => {\n if (typeof buf === 'string') {\n buf = uint8ArrayFromString(buf, 'base16')\n }\n\n let { id, privKey, pubKey } = PeerIdProto.decode(buf)\n\n privKey = privKey ? await cryptoKeys.unmarshalPrivateKey(privKey) : false\n pubKey = pubKey ? await cryptoKeys.unmarshalPublicKey(pubKey) : false\n\n let pubDigest\n let privDigest\n\n if (privKey) {\n privDigest = await computeDigest(privKey.public)\n }\n\n if (pubKey) {\n pubDigest = await computeDigest(pubKey)\n }\n\n if (privKey) {\n if (pubKey) {\n if (!uint8ArrayEquals(privDigest, pubDigest)) {\n throw new Error('Public and private key do not match')\n }\n }\n return new PeerIdWithIs(privDigest, privKey, privKey.public)\n }\n\n // TODO: val id and pubDigest\n\n if (pubKey) {\n return new PeerIdWithIs(pubDigest, undefined, pubKey)\n }\n\n if (id) {\n return new PeerIdWithIs(id)\n }\n\n throw new Error('Protobuf did not contain any usable key material')\n}\n\nexports.parse = (str) => {\n if (str.charAt(0) === '1' || str.charAt(0) === 'Q') {\n // identity hash ed25519 key or sha2-256 hash of rsa public key\n // base58btc encoded either way\n str = `z${str}`\n }\n\n return exports.createFromBytes(baseDecoder.decode(str))\n}\n\nexports.isPeerId = (peerId) => {\n return Boolean(typeof peerId === 'object' &&\n peerId._id &&\n peerId._idB58String)\n}\n\nfunction toB64Opt (val) {\n if (val) {\n return uint8ArrayToString(val, 'base64pad')\n }\n}\n","/*eslint-disable*/\n\"use strict\";\n\nvar $protobuf = require(\"protobufjs/minimal\");\n\n// Common aliases\nvar $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util;\n\n// Exported root namespace\nvar $root = $protobuf.roots[\"libp2p-peer-id\"] || ($protobuf.roots[\"libp2p-peer-id\"] = {});\n\n$root.PeerIdProto = (function() {\n\n /**\n * Properties of a PeerIdProto.\n * @exports IPeerIdProto\n * @interface IPeerIdProto\n * @property {Uint8Array} id PeerIdProto id\n * @property {Uint8Array|null} [pubKey] PeerIdProto pubKey\n * @property {Uint8Array|null} [privKey] PeerIdProto privKey\n */\n\n /**\n * Constructs a new PeerIdProto.\n * @exports PeerIdProto\n * @classdesc Represents a PeerIdProto.\n * @implements IPeerIdProto\n * @constructor\n * @param {IPeerIdProto=} [p] Properties to set\n */\n function PeerIdProto(p) {\n if (p)\n for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)\n if (p[ks[i]] != null)\n this[ks[i]] = p[ks[i]];\n }\n\n /**\n * PeerIdProto id.\n * @member {Uint8Array} id\n * @memberof PeerIdProto\n * @instance\n */\n PeerIdProto.prototype.id = $util.newBuffer([]);\n\n /**\n * PeerIdProto pubKey.\n * @member {Uint8Array} pubKey\n * @memberof PeerIdProto\n * @instance\n */\n PeerIdProto.prototype.pubKey = $util.newBuffer([]);\n\n /**\n * PeerIdProto privKey.\n * @member {Uint8Array} privKey\n * @memberof PeerIdProto\n * @instance\n */\n PeerIdProto.prototype.privKey = $util.newBuffer([]);\n\n /**\n * Encodes the specified PeerIdProto message. Does not implicitly {@link PeerIdProto.verify|verify} messages.\n * @function encode\n * @memberof PeerIdProto\n * @static\n * @param {IPeerIdProto} m PeerIdProto message or plain object to encode\n * @param {$protobuf.Writer} [w] Writer to encode to\n * @returns {$protobuf.Writer} Writer\n */\n PeerIdProto.encode = function encode(m, w) {\n if (!w)\n w = $Writer.create();\n w.uint32(10).bytes(m.id);\n if (m.pubKey != null && Object.hasOwnProperty.call(m, \"pubKey\"))\n w.uint32(18).bytes(m.pubKey);\n if (m.privKey != null && Object.hasOwnProperty.call(m, \"privKey\"))\n w.uint32(26).bytes(m.privKey);\n return w;\n };\n\n /**\n * Decodes a PeerIdProto message from the specified reader or buffer.\n * @function decode\n * @memberof PeerIdProto\n * @static\n * @param {$protobuf.Reader|Uint8Array} r Reader or buffer to decode from\n * @param {number} [l] Message length if known beforehand\n * @returns {PeerIdProto} PeerIdProto\n * @throws {Error} If the payload is not a reader or valid buffer\n * @throws {$protobuf.util.ProtocolError} If required fields are missing\n */\n PeerIdProto.decode = function decode(r, l) {\n if (!(r instanceof $Reader))\n r = $Reader.create(r);\n var c = l === undefined ? r.len : r.pos + l, m = new $root.PeerIdProto();\n while (r.pos < c) {\n var t = r.uint32();\n switch (t >>> 3) {\n case 1:\n m.id = r.bytes();\n break;\n case 2:\n m.pubKey = r.bytes();\n break;\n case 3:\n m.privKey = r.bytes();\n break;\n default:\n r.skipType(t & 7);\n break;\n }\n }\n if (!m.hasOwnProperty(\"id\"))\n throw $util.ProtocolError(\"missing required 'id'\", { instance: m });\n return m;\n };\n\n /**\n * Creates a PeerIdProto message from a plain object. Also converts values to their respective internal types.\n * @function fromObject\n * @memberof PeerIdProto\n * @static\n * @param {Object.<string,*>} d Plain object\n * @returns {PeerIdProto} PeerIdProto\n */\n PeerIdProto.fromObject = function fromObject(d) {\n if (d instanceof $root.PeerIdProto)\n return d;\n var m = new $root.PeerIdProto();\n if (d.id != null) {\n if (typeof d.id === \"string\")\n $util.base64.decode(d.id, m.id = $util.newBuffer($util.base64.length(d.id)), 0);\n else if (d.id.length)\n m.id = d.id;\n }\n if (d.pubKey != null) {\n if (typeof d.pubKey === \"string\")\n $util.base64.decode(d.pubKey, m.pubKey = $util.newBuffer($util.base64.length(d.pubKey)), 0);\n else if (d.pubKey.length)\n m.pubKey = d.pubKey;\n }\n if (d.privKey != null) {\n if (typeof d.privKey === \"string\")\n $util.base64.decode(d.privKey, m.privKey = $util.newBuffer($util.base64.length(d.privKey)), 0);\n else if (d.privKey.length)\n m.privKey = d.privKey;\n }\n return m;\n };\n\n /**\n * Creates a plain object from a PeerIdProto message. Also converts values to other types if specified.\n * @function toObject\n * @memberof PeerIdProto\n * @static\n * @param {PeerIdProto} m PeerIdProto\n * @param {$protobuf.IConversionOptions} [o] Conversion options\n * @returns {Object.<string,*>} Plain object\n */\n PeerIdProto.toObject = function toObject(m, o) {\n if (!o)\n o = {};\n var d = {};\n if (o.defaults) {\n if (o.bytes === String)\n d.id = \"\";\n else {\n d.id = [];\n if (o.bytes !== Array)\n d.id = $util.newBuffer(d.id);\n }\n if (o.bytes === String)\n d.pubKey = \"\";\n else {\n d.pubKey = [];\n if (o.bytes !== Array)\n d.pubKey = $util.newBuffer(d.pubKey);\n }\n if (o.bytes === String)\n d.privKey = \"\";\n else {\n d.privKey = [];\n if (o.bytes !== Array)\n d.privKey = $util.newBuffer(d.privKey);\n }\n }\n if (m.id != null && m.hasOwnProperty(\"id\")) {\n d.id = o.bytes === String ? $util.base64.encode(m.id, 0, m.id.length) : o.bytes === Array ? Array.prototype.slice.call(m.id) : m.id;\n }\n if (m.pubKey != null && m.hasOwnProperty(\"pubKey\")) {\n d.pubKey = o.bytes === String ? $util.base64.encode(m.pubKey, 0, m.pubKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.pubKey) : m.pubKey;\n }\n if (m.privKey != null && m.hasOwnProperty(\"privKey\")) {\n d.privKey = o.bytes === String ? $util.base64.encode(m.privKey, 0, m.privKey.length) : o.bytes === Array ? Array.prototype.slice.call(m.privKey) : m.privKey;\n }\n return d;\n };\n\n /**\n * Converts this PeerIdProto to JSON.\n * @function toJSON\n * @memberof PeerIdProto\n * @instance\n * @returns {Object.<string,*>} JSON object\n */\n PeerIdProto.prototype.toJSON = function toJSON() {\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\n };\n\n return PeerIdProto;\n})();\n\nmodule.exports = $root;\n","'use strict'\n\nmodule.exports = require('./lib')\n","const Netmask = require('netmask').Netmask;\nconst ip_regex = require('ip-regex');\n\nconst PRIVATE_IP_RANGES = ['0.0.0.0/8', '10.0.0.0/8', '100.64.0.0/10', '127.0.0.0/8', '169.254.0.0/16', '172.16.0.0/12', '192.0.0.0/24', '192.0.0.0/29', '192.0.0.8/32', '192.0.0.9/32', '192.0.0.10/32', '192.0.0.170/32', '192.0.0.171/32', '192.0.2.0/24', '192.31.196.0/24', '192.52.193.0/24', '192.88.99.0/24', '192.168.0.0/16', '192.175.48.0/24', '198.18.0.0/15', '198.51.100.0/24', '203.0.113.0/24', '240.0.0.0/4', '255.255.255.255/32'];\n\nconst NETMASK_RANGES = PRIVATE_IP_RANGES.map(ip_range => new Netmask(ip_range));\n\nfunction ipv4_check(ip_addr) {\n for (let r of NETMASK_RANGES) {\n if (r.contains(ip_addr)) return true;\n }\n\n return false;\n}\n\nfunction ipv6_check(ip_addr) {\n return (/^::$/.test(ip_addr) || /^::1$/.test(ip_addr) || /^::f{4}:([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/.test(ip_addr) || /^::f{4}:0.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/.test(ip_addr) || /^64:ff9b::([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})\\.([0-9]{1,3})$/.test(ip_addr) || /^100::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(ip_addr) || /^2001::([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(ip_addr) || /^2001:2[0-9a-fA-F]:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(ip_addr) || /^2001:db8:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(ip_addr) || /^2002:([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4}):?([0-9a-fA-F]{0,4})$/.test(ip_addr) || /^f[c-d]([0-9a-fA-F]{2,2}):/i.test(ip_addr) || /^fe[8-9a-bA-B][0-9a-fA-F]:/i.test(ip_addr) || /^ff([0-9a-fA-F]{2,2}):/i.test(ip_addr)\n );\n}\n\nmodule.exports = ip_addr => {\n if (ip_regex.v6().test(ip_addr)) return ipv6_check(ip_addr);else if (ip_regex().test(ip_addr) || ip_addr.startsWith('0')) return ipv4_check(ip_addr);\n\n return false;\n};","// 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","// Copyright (c) 2015-2017 David M. Lee, II\n'use strict';\n\n/**\n * Local reference to TimeoutError\n * @private\n */\nvar TimeoutError;\n\n/**\n * Rejects a promise with a {@link TimeoutError} if it does not settle within\n * the specified timeout.\n *\n * @param {Promise} promise The promise.\n * @param {number} timeoutMillis Number of milliseconds to wait on settling.\n * @returns {Promise} Either resolves/rejects with `promise`, or rejects with\n * `TimeoutError`, whichever settles first.\n */\nvar timeout = module.exports.timeout = function(promise, timeoutMillis) {\n var error = new TimeoutError(),\n timeout;\n\n return Promise.race([\n promise,\n new Promise(function(resolve, reject) {\n timeout = setTimeout(function() {\n reject(error);\n }, timeoutMillis);\n }),\n ]).then(function(v) {\n clearTimeout(timeout);\n return v;\n }, function(err) {\n clearTimeout(timeout);\n throw err;\n });\n};\n\n/**\n * Exception indicating that the timeout expired.\n */\nTimeoutError = module.exports.TimeoutError = function() {\n Error.call(this)\n this.stack = Error().stack\n this.message = 'Timeout';\n};\n\nTimeoutError.prototype = Object.create(Error.prototype);\nTimeoutError.prototype.name = \"TimeoutError\";\n","// minimal library entry point.\n\n\"use strict\";\nmodule.exports = require(\"./src/index-minimal\");\n","\"use strict\";\nvar protobuf = exports;\n\n/**\n * Build type, one of `\"full\"`, `\"light\"` or `\"minimal\"`.\n * @name build\n * @type {string}\n * @const\n */\nprotobuf.build = \"minimal\";\n\n// Serialization\nprotobuf.Writer = require(\"./writer\");\nprotobuf.BufferWriter = require(\"./writer_buffer\");\nprotobuf.Reader = require(\"./reader\");\nprotobuf.BufferReader = require(\"./reader_buffer\");\n\n// Utility\nprotobuf.util = require(\"./util/minimal\");\nprotobuf.rpc = require(\"./rpc\");\nprotobuf.roots = require(\"./roots\");\nprotobuf.configure = configure;\n\n/* istanbul ignore next */\n/**\n * Reconfigures the library according to the environment.\n * @returns {undefined}\n */\nfunction configure() {\n protobuf.util._configure();\n protobuf.Writer._configure(protobuf.BufferWriter);\n protobuf.Reader._configure(protobuf.BufferReader);\n}\n\n// Set up buffer utility according to the environment\nconfigure();\n","\"use strict\";\nmodule.exports = Reader;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferReader; // cyclic\n\nvar LongBits = util.LongBits,\n utf8 = util.utf8;\n\n/* istanbul ignore next */\nfunction indexOutOfRange(reader, writeLength) {\n return RangeError(\"index out of range: \" + reader.pos + \" + \" + (writeLength || 1) + \" > \" + reader.len);\n}\n\n/**\n * Constructs a new reader instance using the specified buffer.\n * @classdesc Wire format reader using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n * @param {Uint8Array} buffer Buffer to read from\n */\nfunction Reader(buffer) {\n\n /**\n * Read buffer.\n * @type {Uint8Array}\n */\n this.buf = buffer;\n\n /**\n * Read buffer position.\n * @type {number}\n */\n this.pos = 0;\n\n /**\n * Read buffer length.\n * @type {number}\n */\n this.len = buffer.length;\n}\n\nvar create_array = typeof Uint8Array !== \"undefined\"\n ? function create_typed_array(buffer) {\n if (buffer instanceof Uint8Array || Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n }\n /* istanbul ignore next */\n : function create_array(buffer) {\n if (Array.isArray(buffer))\n return new Reader(buffer);\n throw Error(\"illegal buffer\");\n };\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup(buffer) {\n return (Reader.create = function create_buffer(buffer) {\n return util.Buffer.isBuffer(buffer)\n ? new BufferReader(buffer)\n /* istanbul ignore next */\n : create_array(buffer);\n })(buffer);\n }\n /* istanbul ignore next */\n : create_array;\n};\n\n/**\n * Creates a new reader using the specified buffer.\n * @function\n * @param {Uint8Array|Buffer} buffer Buffer to read from\n * @returns {Reader|BufferReader} A {@link BufferReader} if `buffer` is a Buffer, otherwise a {@link Reader}\n * @throws {Error} If `buffer` is not a valid buffer\n */\nReader.create = create();\n\nReader.prototype._slice = util.Array.prototype.subarray || /* istanbul ignore next */ util.Array.prototype.slice;\n\n/**\n * Reads a varint as an unsigned 32 bit value.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.uint32 = (function read_uint32_setup() {\n var value = 4294967295; // optimizer type-hint, tends to deopt otherwise (?!)\n return function read_uint32() {\n value = ( this.buf[this.pos] & 127 ) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 7) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 14) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 127) << 21) >>> 0; if (this.buf[this.pos++] < 128) return value;\n value = (value | (this.buf[this.pos] & 15) << 28) >>> 0; if (this.buf[this.pos++] < 128) return value;\n\n /* istanbul ignore if */\n if ((this.pos += 5) > this.len) {\n this.pos = this.len;\n throw indexOutOfRange(this, 10);\n }\n return value;\n };\n})();\n\n/**\n * Reads a varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.int32 = function read_int32() {\n return this.uint32() | 0;\n};\n\n/**\n * Reads a zig-zag encoded varint as a signed 32 bit value.\n * @returns {number} Value read\n */\nReader.prototype.sint32 = function read_sint32() {\n var value = this.uint32();\n return value >>> 1 ^ -(value & 1) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readLongVarint() {\n // tends to deopt with local vars for octet etc.\n var bits = new LongBits(0, 0);\n var i = 0;\n if (this.len - this.pos > 4) { // fast route (lo)\n for (; i < 4; ++i) {\n // 1st..4th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 5th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << 28) >>> 0;\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) >> 4) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n i = 0;\n } else {\n for (; i < 3; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 1st..3th\n bits.lo = (bits.lo | (this.buf[this.pos] & 127) << i * 7) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n // 4th\n bits.lo = (bits.lo | (this.buf[this.pos++] & 127) << i * 7) >>> 0;\n return bits;\n }\n if (this.len - this.pos > 4) { // fast route (hi)\n for (; i < 5; ++i) {\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n } else {\n for (; i < 5; ++i) {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n // 6th..10th\n bits.hi = (bits.hi | (this.buf[this.pos] & 127) << i * 7 + 3) >>> 0;\n if (this.buf[this.pos++] < 128)\n return bits;\n }\n }\n /* istanbul ignore next */\n throw Error(\"invalid varint encoding\");\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads a varint as a signed 64 bit value.\n * @name Reader#int64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as an unsigned 64 bit value.\n * @name Reader#uint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a zig-zag encoded varint as a signed 64 bit value.\n * @name Reader#sint64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a varint as a boolean.\n * @returns {boolean} Value read\n */\nReader.prototype.bool = function read_bool() {\n return this.uint32() !== 0;\n};\n\nfunction readFixed32_end(buf, end) { // note that this uses `end`, not `pos`\n return (buf[end - 4]\n | buf[end - 3] << 8\n | buf[end - 2] << 16\n | buf[end - 1] << 24) >>> 0;\n}\n\n/**\n * Reads fixed 32 bits as an unsigned 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.fixed32 = function read_fixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4);\n};\n\n/**\n * Reads fixed 32 bits as a signed 32 bit integer.\n * @returns {number} Value read\n */\nReader.prototype.sfixed32 = function read_sfixed32() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n return readFixed32_end(this.buf, this.pos += 4) | 0;\n};\n\n/* eslint-disable no-invalid-this */\n\nfunction readFixed64(/* this: Reader */) {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 8);\n\n return new LongBits(readFixed32_end(this.buf, this.pos += 4), readFixed32_end(this.buf, this.pos += 4));\n}\n\n/* eslint-enable no-invalid-this */\n\n/**\n * Reads fixed 64 bits.\n * @name Reader#fixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads zig-zag encoded fixed 64 bits.\n * @name Reader#sfixed64\n * @function\n * @returns {Long} Value read\n */\n\n/**\n * Reads a float (32 bit) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.float = function read_float() {\n\n /* istanbul ignore if */\n if (this.pos + 4 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readFloatLE(this.buf, this.pos);\n this.pos += 4;\n return value;\n};\n\n/**\n * Reads a double (64 bit float) as a number.\n * @function\n * @returns {number} Value read\n */\nReader.prototype.double = function read_double() {\n\n /* istanbul ignore if */\n if (this.pos + 8 > this.len)\n throw indexOutOfRange(this, 4);\n\n var value = util.float.readDoubleLE(this.buf, this.pos);\n this.pos += 8;\n return value;\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @returns {Uint8Array} Value read\n */\nReader.prototype.bytes = function read_bytes() {\n var length = this.uint32(),\n start = this.pos,\n end = this.pos + length;\n\n /* istanbul ignore if */\n if (end > this.len)\n throw indexOutOfRange(this, length);\n\n this.pos += length;\n if (Array.isArray(this.buf)) // plain array\n return this.buf.slice(start, end);\n return start === end // fix for IE 10/Win8 and others' subarray returning array of size 1\n ? new this.buf.constructor(0)\n : this._slice.call(this.buf, start, end);\n};\n\n/**\n * Reads a string preceeded by its byte length as a varint.\n * @returns {string} Value read\n */\nReader.prototype.string = function read_string() {\n var bytes = this.bytes();\n return utf8.read(bytes, 0, bytes.length);\n};\n\n/**\n * Skips the specified number of bytes if specified, otherwise skips a varint.\n * @param {number} [length] Length if known, otherwise a varint is assumed\n * @returns {Reader} `this`\n */\nReader.prototype.skip = function skip(length) {\n if (typeof length === \"number\") {\n /* istanbul ignore if */\n if (this.pos + length > this.len)\n throw indexOutOfRange(this, length);\n this.pos += length;\n } else {\n do {\n /* istanbul ignore if */\n if (this.pos >= this.len)\n throw indexOutOfRange(this);\n } while (this.buf[this.pos++] & 128);\n }\n return this;\n};\n\n/**\n * Skips the next element of the specified wire type.\n * @param {number} wireType Wire type received\n * @returns {Reader} `this`\n */\nReader.prototype.skipType = function(wireType) {\n switch (wireType) {\n case 0:\n this.skip();\n break;\n case 1:\n this.skip(8);\n break;\n case 2:\n this.skip(this.uint32());\n break;\n case 3:\n while ((wireType = this.uint32() & 7) !== 4) {\n this.skipType(wireType);\n }\n break;\n case 5:\n this.skip(4);\n break;\n\n /* istanbul ignore next */\n default:\n throw Error(\"invalid wire type \" + wireType + \" at offset \" + this.pos);\n }\n return this;\n};\n\nReader._configure = function(BufferReader_) {\n BufferReader = BufferReader_;\n Reader.create = create();\n BufferReader._configure();\n\n var fn = util.Long ? \"toLong\" : /* istanbul ignore next */ \"toNumber\";\n util.merge(Reader.prototype, {\n\n int64: function read_int64() {\n return readLongVarint.call(this)[fn](false);\n },\n\n uint64: function read_uint64() {\n return readLongVarint.call(this)[fn](true);\n },\n\n sint64: function read_sint64() {\n return readLongVarint.call(this).zzDecode()[fn](false);\n },\n\n fixed64: function read_fixed64() {\n return readFixed64.call(this)[fn](true);\n },\n\n sfixed64: function read_sfixed64() {\n return readFixed64.call(this)[fn](false);\n }\n\n });\n};\n","\"use strict\";\nmodule.exports = BufferReader;\n\n// extends Reader\nvar Reader = require(\"./reader\");\n(BufferReader.prototype = Object.create(Reader.prototype)).constructor = BufferReader;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer reader instance.\n * @classdesc Wire format reader using node buffers.\n * @extends Reader\n * @constructor\n * @param {Buffer} buffer Buffer to read from\n */\nfunction BufferReader(buffer) {\n Reader.call(this, buffer);\n\n /**\n * Read buffer.\n * @name BufferReader#buf\n * @type {Buffer}\n */\n}\n\nBufferReader._configure = function () {\n /* istanbul ignore else */\n if (util.Buffer)\n BufferReader.prototype._slice = util.Buffer.prototype.slice;\n};\n\n\n/**\n * @override\n */\nBufferReader.prototype.string = function read_string_buffer() {\n var len = this.uint32(); // modifies pos\n return this.buf.utf8Slice\n ? this.buf.utf8Slice(this.pos, this.pos = Math.min(this.pos + len, this.len))\n : this.buf.toString(\"utf-8\", this.pos, this.pos = Math.min(this.pos + len, this.len));\n};\n\n/**\n * Reads a sequence of bytes preceeded by its length as a varint.\n * @name BufferReader#bytes\n * @function\n * @returns {Buffer} Value read\n */\n\nBufferReader._configure();\n","\"use strict\";\nmodule.exports = {};\n\n/**\n * Named roots.\n * This is where pbjs stores generated structures (the option `-r, --root` specifies a name).\n * Can also be used manually to make roots available accross modules.\n * @name roots\n * @type {Object.<string,Root>}\n * @example\n * // pbjs -r myroot -o compiled.js ...\n *\n * // in another module:\n * require(\"./compiled.js\");\n *\n * // in any subsequent module:\n * var root = protobuf.roots[\"myroot\"];\n */\n","\"use strict\";\n\n/**\n * Streaming RPC helpers.\n * @namespace\n */\nvar rpc = exports;\n\n/**\n * RPC implementation passed to {@link Service#create} performing a service request on network level, i.e. by utilizing http requests or websockets.\n * @typedef RPCImpl\n * @type {function}\n * @param {Method|rpc.ServiceMethod<Message<{}>,Message<{}>>} method Reflected or static method being called\n * @param {Uint8Array} requestData Request data\n * @param {RPCImplCallback} callback Callback function\n * @returns {undefined}\n * @example\n * function rpcImpl(method, requestData, callback) {\n * if (protobuf.util.lcFirst(method.name) !== \"myMethod\") // compatible with static code\n * throw Error(\"no such method\");\n * asynchronouslyObtainAResponse(requestData, function(err, responseData) {\n * callback(err, responseData);\n * });\n * }\n */\n\n/**\n * Node-style callback as used by {@link RPCImpl}.\n * @typedef RPCImplCallback\n * @type {function}\n * @param {Error|null} error Error, if any, otherwise `null`\n * @param {Uint8Array|null} [response] Response data or `null` to signal end of stream, if there hasn't been an error\n * @returns {undefined}\n */\n\nrpc.Service = require(\"./rpc/service\");\n","\"use strict\";\nmodule.exports = Service;\n\nvar util = require(\"../util/minimal\");\n\n// Extends EventEmitter\n(Service.prototype = Object.create(util.EventEmitter.prototype)).constructor = Service;\n\n/**\n * A service method callback as used by {@link rpc.ServiceMethod|ServiceMethod}.\n *\n * Differs from {@link RPCImplCallback} in that it is an actual callback of a service method which may not return `response = null`.\n * @typedef rpc.ServiceMethodCallback\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {Error|null} error Error, if any\n * @param {TRes} [response] Response message\n * @returns {undefined}\n */\n\n/**\n * A service method part of a {@link rpc.Service} as created by {@link Service.create}.\n * @typedef rpc.ServiceMethod\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n * @type {function}\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} [callback] Node-style callback called with the error, if any, and the response message\n * @returns {Promise<Message<TRes>>} Promise if `callback` has been omitted, otherwise `undefined`\n */\n\n/**\n * Constructs a new RPC service instance.\n * @classdesc An RPC service as returned by {@link Service#create}.\n * @exports rpc.Service\n * @extends util.EventEmitter\n * @constructor\n * @param {RPCImpl} rpcImpl RPC implementation\n * @param {boolean} [requestDelimited=false] Whether requests are length-delimited\n * @param {boolean} [responseDelimited=false] Whether responses are length-delimited\n */\nfunction Service(rpcImpl, requestDelimited, responseDelimited) {\n\n if (typeof rpcImpl !== \"function\")\n throw TypeError(\"rpcImpl must be a function\");\n\n util.EventEmitter.call(this);\n\n /**\n * RPC implementation. Becomes `null` once the service is ended.\n * @type {RPCImpl|null}\n */\n this.rpcImpl = rpcImpl;\n\n /**\n * Whether requests are length-delimited.\n * @type {boolean}\n */\n this.requestDelimited = Boolean(requestDelimited);\n\n /**\n * Whether responses are length-delimited.\n * @type {boolean}\n */\n this.responseDelimited = Boolean(responseDelimited);\n}\n\n/**\n * Calls a service method through {@link rpc.Service#rpcImpl|rpcImpl}.\n * @param {Method|rpc.ServiceMethod<TReq,TRes>} method Reflected or static method\n * @param {Constructor<TReq>} requestCtor Request constructor\n * @param {Constructor<TRes>} responseCtor Response constructor\n * @param {TReq|Properties<TReq>} request Request message or plain object\n * @param {rpc.ServiceMethodCallback<TRes>} callback Service callback\n * @returns {undefined}\n * @template TReq extends Message<TReq>\n * @template TRes extends Message<TRes>\n */\nService.prototype.rpcCall = function rpcCall(method, requestCtor, responseCtor, request, callback) {\n\n if (!request)\n throw TypeError(\"request must be specified\");\n\n var self = this;\n if (!callback)\n return util.asPromise(rpcCall, self, method, requestCtor, responseCtor, request);\n\n if (!self.rpcImpl) {\n setTimeout(function() { callback(Error(\"already ended\")); }, 0);\n return undefined;\n }\n\n try {\n return self.rpcImpl(\n method,\n requestCtor[self.requestDelimited ? \"encodeDelimited\" : \"encode\"](request).finish(),\n function rpcCallback(err, response) {\n\n if (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n\n if (response === null) {\n self.end(/* endedByRPC */ true);\n return undefined;\n }\n\n if (!(response instanceof responseCtor)) {\n try {\n response = responseCtor[self.responseDelimited ? \"decodeDelimited\" : \"decode\"](response);\n } catch (err) {\n self.emit(\"error\", err, method);\n return callback(err);\n }\n }\n\n self.emit(\"data\", response, method);\n return callback(null, response);\n }\n );\n } catch (err) {\n self.emit(\"error\", err, method);\n setTimeout(function() { callback(err); }, 0);\n return undefined;\n }\n};\n\n/**\n * Ends this service and emits the `end` event.\n * @param {boolean} [endedByRPC=false] Whether the service has been ended by the RPC implementation.\n * @returns {rpc.Service} `this`\n */\nService.prototype.end = function end(endedByRPC) {\n if (this.rpcImpl) {\n if (!endedByRPC) // signal end to rpcImpl\n this.rpcImpl(null, null, null);\n this.rpcImpl = null;\n this.emit(\"end\").off();\n }\n return this;\n};\n","\"use strict\";\nmodule.exports = LongBits;\n\nvar util = require(\"../util/minimal\");\n\n/**\n * Constructs new long bits.\n * @classdesc Helper class for working with the low and high bits of a 64 bit value.\n * @memberof util\n * @constructor\n * @param {number} lo Low 32 bits, unsigned\n * @param {number} hi High 32 bits, unsigned\n */\nfunction LongBits(lo, hi) {\n\n // note that the casts below are theoretically unnecessary as of today, but older statically\n // generated converter code might still call the ctor with signed 32bits. kept for compat.\n\n /**\n * Low bits.\n * @type {number}\n */\n this.lo = lo >>> 0;\n\n /**\n * High bits.\n * @type {number}\n */\n this.hi = hi >>> 0;\n}\n\n/**\n * Zero bits.\n * @memberof util.LongBits\n * @type {util.LongBits}\n */\nvar zero = LongBits.zero = new LongBits(0, 0);\n\nzero.toNumber = function() { return 0; };\nzero.zzEncode = zero.zzDecode = function() { return this; };\nzero.length = function() { return 1; };\n\n/**\n * Zero hash.\n * @memberof util.LongBits\n * @type {string}\n */\nvar zeroHash = LongBits.zeroHash = \"\\0\\0\\0\\0\\0\\0\\0\\0\";\n\n/**\n * Constructs new long bits from the specified number.\n * @param {number} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.fromNumber = function fromNumber(value) {\n if (value === 0)\n return zero;\n var sign = value < 0;\n if (sign)\n value = -value;\n var lo = value >>> 0,\n hi = (value - lo) / 4294967296 >>> 0;\n if (sign) {\n hi = ~hi >>> 0;\n lo = ~lo >>> 0;\n if (++lo > 4294967295) {\n lo = 0;\n if (++hi > 4294967295)\n hi = 0;\n }\n }\n return new LongBits(lo, hi);\n};\n\n/**\n * Constructs new long bits from a number, long or string.\n * @param {Long|number|string} value Value\n * @returns {util.LongBits} Instance\n */\nLongBits.from = function from(value) {\n if (typeof value === \"number\")\n return LongBits.fromNumber(value);\n if (util.isString(value)) {\n /* istanbul ignore else */\n if (util.Long)\n value = util.Long.fromString(value);\n else\n return LongBits.fromNumber(parseInt(value, 10));\n }\n return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;\n};\n\n/**\n * Converts this long bits to a possibly unsafe JavaScript number.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {number} Possibly unsafe number\n */\nLongBits.prototype.toNumber = function toNumber(unsigned) {\n if (!unsigned && this.hi >>> 31) {\n var lo = ~this.lo + 1 >>> 0,\n hi = ~this.hi >>> 0;\n if (!lo)\n hi = hi + 1 >>> 0;\n return -(lo + hi * 4294967296);\n }\n return this.lo + this.hi * 4294967296;\n};\n\n/**\n * Converts this long bits to a long.\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long} Long\n */\nLongBits.prototype.toLong = function toLong(unsigned) {\n return util.Long\n ? new util.Long(this.lo | 0, this.hi | 0, Boolean(unsigned))\n /* istanbul ignore next */\n : { low: this.lo | 0, high: this.hi | 0, unsigned: Boolean(unsigned) };\n};\n\nvar charCodeAt = String.prototype.charCodeAt;\n\n/**\n * Constructs new long bits from the specified 8 characters long hash.\n * @param {string} hash Hash\n * @returns {util.LongBits} Bits\n */\nLongBits.fromHash = function fromHash(hash) {\n if (hash === zeroHash)\n return zero;\n return new LongBits(\n ( charCodeAt.call(hash, 0)\n | charCodeAt.call(hash, 1) << 8\n | charCodeAt.call(hash, 2) << 16\n | charCodeAt.call(hash, 3) << 24) >>> 0\n ,\n ( charCodeAt.call(hash, 4)\n | charCodeAt.call(hash, 5) << 8\n | charCodeAt.call(hash, 6) << 16\n | charCodeAt.call(hash, 7) << 24) >>> 0\n );\n};\n\n/**\n * Converts this long bits to a 8 characters long hash.\n * @returns {string} Hash\n */\nLongBits.prototype.toHash = function toHash() {\n return String.fromCharCode(\n this.lo & 255,\n this.lo >>> 8 & 255,\n this.lo >>> 16 & 255,\n this.lo >>> 24 ,\n this.hi & 255,\n this.hi >>> 8 & 255,\n this.hi >>> 16 & 255,\n this.hi >>> 24\n );\n};\n\n/**\n * Zig-zag encodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzEncode = function zzEncode() {\n var mask = this.hi >> 31;\n this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;\n this.lo = ( this.lo << 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Zig-zag decodes this long bits.\n * @returns {util.LongBits} `this`\n */\nLongBits.prototype.zzDecode = function zzDecode() {\n var mask = -(this.lo & 1);\n this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;\n this.hi = ( this.hi >>> 1 ^ mask) >>> 0;\n return this;\n};\n\n/**\n * Calculates the length of this longbits when encoded as a varint.\n * @returns {number} Length\n */\nLongBits.prototype.length = function length() {\n var part0 = this.lo,\n part1 = (this.lo >>> 28 | this.hi << 4) >>> 0,\n part2 = this.hi >>> 24;\n return part2 === 0\n ? part1 === 0\n ? part0 < 16384\n ? part0 < 128 ? 1 : 2\n : part0 < 2097152 ? 3 : 4\n : part1 < 16384\n ? part1 < 128 ? 5 : 6\n : part1 < 2097152 ? 7 : 8\n : part2 < 128 ? 9 : 10;\n};\n","\"use strict\";\nvar util = exports;\n\n// used to return a Promise where callback is omitted\nutil.asPromise = require(\"@protobufjs/aspromise\");\n\n// converts to / from base64 encoded strings\nutil.base64 = require(\"@protobufjs/base64\");\n\n// base class of rpc.Service\nutil.EventEmitter = require(\"@protobufjs/eventemitter\");\n\n// float handling accross browsers\nutil.float = require(\"@protobufjs/float\");\n\n// requires modules optionally and hides the call from bundlers\nutil.inquire = require(\"@protobufjs/inquire\");\n\n// converts to / from utf8 encoded strings\nutil.utf8 = require(\"@protobufjs/utf8\");\n\n// provides a node-like buffer pool in the browser\nutil.pool = require(\"@protobufjs/pool\");\n\n// utility to work with the low and high bits of a 64 bit value\nutil.LongBits = require(\"./longbits\");\n\n/**\n * Whether running within node or not.\n * @memberof util\n * @type {boolean}\n */\nutil.isNode = Boolean(typeof global !== \"undefined\"\n && global\n && global.process\n && global.process.versions\n && global.process.versions.node);\n\n/**\n * Global object reference.\n * @memberof util\n * @type {Object}\n */\nutil.global = util.isNode && global\n || typeof window !== \"undefined\" && window\n || typeof self !== \"undefined\" && self\n || this; // eslint-disable-line no-invalid-this\n\n/**\n * An immuable empty array.\n * @memberof util\n * @type {Array.<*>}\n * @const\n */\nutil.emptyArray = Object.freeze ? Object.freeze([]) : /* istanbul ignore next */ []; // used on prototypes\n\n/**\n * An immutable empty object.\n * @type {Object}\n * @const\n */\nutil.emptyObject = Object.freeze ? Object.freeze({}) : /* istanbul ignore next */ {}; // used on prototypes\n\n/**\n * Tests if the specified value is an integer.\n * @function\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is an integer\n */\nutil.isInteger = Number.isInteger || /* istanbul ignore next */ function isInteger(value) {\n return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value;\n};\n\n/**\n * Tests if the specified value is a string.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a string\n */\nutil.isString = function isString(value) {\n return typeof value === \"string\" || value instanceof String;\n};\n\n/**\n * Tests if the specified value is a non-null object.\n * @param {*} value Value to test\n * @returns {boolean} `true` if the value is a non-null object\n */\nutil.isObject = function isObject(value) {\n return value && typeof value === \"object\";\n};\n\n/**\n * Checks if a property on a message is considered to be present.\n * This is an alias of {@link util.isSet}.\n * @function\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isset =\n\n/**\n * Checks if a property on a message is considered to be present.\n * @param {Object} obj Plain object or message instance\n * @param {string} prop Property name\n * @returns {boolean} `true` if considered to be present, otherwise `false`\n */\nutil.isSet = function isSet(obj, prop) {\n var value = obj[prop];\n if (value != null && obj.hasOwnProperty(prop)) // eslint-disable-line eqeqeq, no-prototype-builtins\n return typeof value !== \"object\" || (Array.isArray(value) ? value.length : Object.keys(value).length) > 0;\n return false;\n};\n\n/**\n * Any compatible Buffer instance.\n * This is a minimal stand-alone definition of a Buffer instance. The actual type is that exported by node's typings.\n * @interface Buffer\n * @extends Uint8Array\n */\n\n/**\n * Node's Buffer class if available.\n * @type {Constructor<Buffer>}\n */\nutil.Buffer = (function() {\n try {\n var Buffer = util.inquire(\"buffer\").Buffer;\n // refuse to use non-node buffers if not explicitly assigned (perf reasons):\n return Buffer.prototype.utf8Write ? Buffer : /* istanbul ignore next */ null;\n } catch (e) {\n /* istanbul ignore next */\n return null;\n }\n})();\n\n// Internal alias of or polyfull for Buffer.from.\nutil._Buffer_from = null;\n\n// Internal alias of or polyfill for Buffer.allocUnsafe.\nutil._Buffer_allocUnsafe = null;\n\n/**\n * Creates a new buffer of whatever type supported by the environment.\n * @param {number|number[]} [sizeOrArray=0] Buffer size or number array\n * @returns {Uint8Array|Buffer} Buffer\n */\nutil.newBuffer = function newBuffer(sizeOrArray) {\n /* istanbul ignore next */\n return typeof sizeOrArray === \"number\"\n ? util.Buffer\n ? util._Buffer_allocUnsafe(sizeOrArray)\n : new util.Array(sizeOrArray)\n : util.Buffer\n ? util._Buffer_from(sizeOrArray)\n : typeof Uint8Array === \"undefined\"\n ? sizeOrArray\n : new Uint8Array(sizeOrArray);\n};\n\n/**\n * Array implementation used in the browser. `Uint8Array` if supported, otherwise `Array`.\n * @type {Constructor<Uint8Array>}\n */\nutil.Array = typeof Uint8Array !== \"undefined\" ? Uint8Array /* istanbul ignore next */ : Array;\n\n/**\n * Any compatible Long instance.\n * This is a minimal stand-alone definition of a Long instance. The actual type is that exported by long.js.\n * @interface Long\n * @property {number} low Low bits\n * @property {number} high High bits\n * @property {boolean} unsigned Whether unsigned or not\n */\n\n/**\n * Long.js's Long class if available.\n * @type {Constructor<Long>}\n */\nutil.Long = /* istanbul ignore next */ util.global.dcodeIO && /* istanbul ignore next */ util.global.dcodeIO.Long\n || /* istanbul ignore next */ util.global.Long\n || util.inquire(\"long\");\n\n/**\n * Regular expression used to verify 2 bit (`bool`) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key2Re = /^true|false|0|1$/;\n\n/**\n * Regular expression used to verify 32 bit (`int32` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key32Re = /^-?(?:0|[1-9][0-9]*)$/;\n\n/**\n * Regular expression used to verify 64 bit (`int64` etc.) map keys.\n * @type {RegExp}\n * @const\n */\nutil.key64Re = /^(?:[\\\\x00-\\\\xff]{8}|-?(?:0|[1-9][0-9]*))$/;\n\n/**\n * Converts a number or long to an 8 characters long hash string.\n * @param {Long|number} value Value to convert\n * @returns {string} Hash\n */\nutil.longToHash = function longToHash(value) {\n return value\n ? util.LongBits.from(value).toHash()\n : util.LongBits.zeroHash;\n};\n\n/**\n * Converts an 8 characters long hash string to a long or number.\n * @param {string} hash Hash\n * @param {boolean} [unsigned=false] Whether unsigned or not\n * @returns {Long|number} Original value\n */\nutil.longFromHash = function longFromHash(hash, unsigned) {\n var bits = util.LongBits.fromHash(hash);\n if (util.Long)\n return util.Long.fromBits(bits.lo, bits.hi, unsigned);\n return bits.toNumber(Boolean(unsigned));\n};\n\n/**\n * Merges the properties of the source object into the destination object.\n * @memberof util\n * @param {Object.<string,*>} dst Destination object\n * @param {Object.<string,*>} src Source object\n * @param {boolean} [ifNotSet=false] Merges only if the key is not already set\n * @returns {Object.<string,*>} Destination object\n */\nfunction merge(dst, src, ifNotSet) { // used by converters\n for (var keys = Object.keys(src), i = 0; i < keys.length; ++i)\n if (dst[keys[i]] === undefined || !ifNotSet)\n dst[keys[i]] = src[keys[i]];\n return dst;\n}\n\nutil.merge = merge;\n\n/**\n * Converts the first character of a string to lower case.\n * @param {string} str String to convert\n * @returns {string} Converted string\n */\nutil.lcFirst = function lcFirst(str) {\n return str.charAt(0).toLowerCase() + str.substring(1);\n};\n\n/**\n * Creates a custom error constructor.\n * @memberof util\n * @param {string} name Error name\n * @returns {Constructor<Error>} Custom error constructor\n */\nfunction newError(name) {\n\n function CustomError(message, properties) {\n\n if (!(this instanceof CustomError))\n return new CustomError(message, properties);\n\n // Error.call(this, message);\n // ^ just returns a new error instance because the ctor can be called as a function\n\n Object.defineProperty(this, \"message\", { get: function() { return message; } });\n\n /* istanbul ignore next */\n if (Error.captureStackTrace) // node\n Error.captureStackTrace(this, CustomError);\n else\n Object.defineProperty(this, \"stack\", { value: new Error().stack || \"\" });\n\n if (properties)\n merge(this, properties);\n }\n\n (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError;\n\n Object.defineProperty(CustomError.prototype, \"name\", { get: function() { return name; } });\n\n CustomError.prototype.toString = function toString() {\n return this.name + \": \" + this.message;\n };\n\n return CustomError;\n}\n\nutil.newError = newError;\n\n/**\n * Constructs a new protocol error.\n * @classdesc Error subclass indicating a protocol specifc error.\n * @memberof util\n * @extends Error\n * @template T extends Message<T>\n * @constructor\n * @param {string} message Error message\n * @param {Object.<string,*>} [properties] Additional properties\n * @example\n * try {\n * MyMessage.decode(someBuffer); // throws if required fields are missing\n * } catch (e) {\n * if (e instanceof ProtocolError && e.instance)\n * console.log(\"decoded so far: \" + JSON.stringify(e.instance));\n * }\n */\nutil.ProtocolError = newError(\"ProtocolError\");\n\n/**\n * So far decoded message instance.\n * @name util.ProtocolError#instance\n * @type {Message<T>}\n */\n\n/**\n * A OneOf getter as returned by {@link util.oneOfGetter}.\n * @typedef OneOfGetter\n * @type {function}\n * @returns {string|undefined} Set field name, if any\n */\n\n/**\n * Builds a getter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfGetter} Unbound getter\n */\nutil.oneOfGetter = function getOneOf(fieldNames) {\n var fieldMap = {};\n for (var i = 0; i < fieldNames.length; ++i)\n fieldMap[fieldNames[i]] = 1;\n\n /**\n * @returns {string|undefined} Set field name, if any\n * @this Object\n * @ignore\n */\n return function() { // eslint-disable-line consistent-return\n for (var keys = Object.keys(this), i = keys.length - 1; i > -1; --i)\n if (fieldMap[keys[i]] === 1 && this[keys[i]] !== undefined && this[keys[i]] !== null)\n return keys[i];\n };\n};\n\n/**\n * A OneOf setter as returned by {@link util.oneOfSetter}.\n * @typedef OneOfSetter\n * @type {function}\n * @param {string|undefined} value Field name\n * @returns {undefined}\n */\n\n/**\n * Builds a setter for a oneof's present field name.\n * @param {string[]} fieldNames Field names\n * @returns {OneOfSetter} Unbound setter\n */\nutil.oneOfSetter = function setOneOf(fieldNames) {\n\n /**\n * @param {string} name Field name\n * @returns {undefined}\n * @this Object\n * @ignore\n */\n return function(name) {\n for (var i = 0; i < fieldNames.length; ++i)\n if (fieldNames[i] !== name)\n delete this[fieldNames[i]];\n };\n};\n\n/**\n * Default conversion options used for {@link Message#toJSON} implementations.\n *\n * These options are close to proto3's JSON mapping with the exception that internal types like Any are handled just like messages. More precisely:\n *\n * - Longs become strings\n * - Enums become string keys\n * - Bytes become base64 encoded strings\n * - (Sub-)Messages become plain objects\n * - Maps become plain objects with all string keys\n * - Repeated fields become arrays\n * - NaN and Infinity for float and double fields become strings\n *\n * @type {IConversionOptions}\n * @see https://developers.google.com/protocol-buffers/docs/proto3?hl=en#json\n */\nutil.toJSONOptions = {\n longs: String,\n enums: String,\n bytes: String,\n json: true\n};\n\n// Sets up buffer utility according to the environment (called in index-minimal)\nutil._configure = function() {\n var Buffer = util.Buffer;\n /* istanbul ignore if */\n if (!Buffer) {\n util._Buffer_from = util._Buffer_allocUnsafe = null;\n return;\n }\n // because node 4.x buffers are incompatible & immutable\n // see: https://github.com/dcodeIO/protobuf.js/pull/665\n util._Buffer_from = Buffer.from !== Uint8Array.from && Buffer.from ||\n /* istanbul ignore next */\n function Buffer_from(value, encoding) {\n return new Buffer(value, encoding);\n };\n util._Buffer_allocUnsafe = Buffer.allocUnsafe ||\n /* istanbul ignore next */\n function Buffer_allocUnsafe(size) {\n return new Buffer(size);\n };\n};\n","\"use strict\";\nmodule.exports = Writer;\n\nvar util = require(\"./util/minimal\");\n\nvar BufferWriter; // cyclic\n\nvar LongBits = util.LongBits,\n base64 = util.base64,\n utf8 = util.utf8;\n\n/**\n * Constructs a new writer operation instance.\n * @classdesc Scheduled writer operation.\n * @constructor\n * @param {function(*, Uint8Array, number)} fn Function to call\n * @param {number} len Value byte length\n * @param {*} val Value to write\n * @ignore\n */\nfunction Op(fn, len, val) {\n\n /**\n * Function to call.\n * @type {function(Uint8Array, number, *)}\n */\n this.fn = fn;\n\n /**\n * Value byte length.\n * @type {number}\n */\n this.len = len;\n\n /**\n * Next operation.\n * @type {Writer.Op|undefined}\n */\n this.next = undefined;\n\n /**\n * Value to write.\n * @type {*}\n */\n this.val = val; // type varies\n}\n\n/* istanbul ignore next */\nfunction noop() {} // eslint-disable-line no-empty-function\n\n/**\n * Constructs a new writer state instance.\n * @classdesc Copied writer state.\n * @memberof Writer\n * @constructor\n * @param {Writer} writer Writer to copy state from\n * @ignore\n */\nfunction State(writer) {\n\n /**\n * Current head.\n * @type {Writer.Op}\n */\n this.head = writer.head;\n\n /**\n * Current tail.\n * @type {Writer.Op}\n */\n this.tail = writer.tail;\n\n /**\n * Current buffer length.\n * @type {number}\n */\n this.len = writer.len;\n\n /**\n * Next state.\n * @type {State|null}\n */\n this.next = writer.states;\n}\n\n/**\n * Constructs a new writer instance.\n * @classdesc Wire format writer using `Uint8Array` if available, otherwise `Array`.\n * @constructor\n */\nfunction Writer() {\n\n /**\n * Current length.\n * @type {number}\n */\n this.len = 0;\n\n /**\n * Operations head.\n * @type {Object}\n */\n this.head = new Op(noop, 0, 0);\n\n /**\n * Operations tail\n * @type {Object}\n */\n this.tail = this.head;\n\n /**\n * Linked forked states.\n * @type {Object|null}\n */\n this.states = null;\n\n // When a value is written, the writer calculates its byte length and puts it into a linked\n // list of operations to perform when finish() is called. This both allows us to allocate\n // buffers of the exact required size and reduces the amount of work we have to do compared\n // to first calculating over objects and then encoding over objects. In our case, the encoding\n // part is just a linked list walk calling operations with already prepared values.\n}\n\nvar create = function create() {\n return util.Buffer\n ? function create_buffer_setup() {\n return (Writer.create = function create_buffer() {\n return new BufferWriter();\n })();\n }\n /* istanbul ignore next */\n : function create_array() {\n return new Writer();\n };\n};\n\n/**\n * Creates a new writer.\n * @function\n * @returns {BufferWriter|Writer} A {@link BufferWriter} when Buffers are supported, otherwise a {@link Writer}\n */\nWriter.create = create();\n\n/**\n * Allocates a buffer of the specified size.\n * @param {number} size Buffer size\n * @returns {Uint8Array} Buffer\n */\nWriter.alloc = function alloc(size) {\n return new util.Array(size);\n};\n\n// Use Uint8Array buffer pool in the browser, just like node does with buffers\n/* istanbul ignore else */\nif (util.Array !== Array)\n Writer.alloc = util.pool(Writer.alloc, util.Array.prototype.subarray);\n\n/**\n * Pushes a new operation to the queue.\n * @param {function(Uint8Array, number, *)} fn Function to call\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @returns {Writer} `this`\n * @private\n */\nWriter.prototype._push = function push(fn, len, val) {\n this.tail = this.tail.next = new Op(fn, len, val);\n this.len += len;\n return this;\n};\n\nfunction writeByte(val, buf, pos) {\n buf[pos] = val & 255;\n}\n\nfunction writeVarint32(val, buf, pos) {\n while (val > 127) {\n buf[pos++] = val & 127 | 128;\n val >>>= 7;\n }\n buf[pos] = val;\n}\n\n/**\n * Constructs a new varint writer operation instance.\n * @classdesc Scheduled varint writer operation.\n * @extends Op\n * @constructor\n * @param {number} len Value byte length\n * @param {number} val Value to write\n * @ignore\n */\nfunction VarintOp(len, val) {\n this.len = len;\n this.next = undefined;\n this.val = val;\n}\n\nVarintOp.prototype = Object.create(Op.prototype);\nVarintOp.prototype.fn = writeVarint32;\n\n/**\n * Writes an unsigned 32 bit value as a varint.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.uint32 = function write_uint32(value) {\n // here, the call to this.push has been inlined and a varint specific Op subclass is used.\n // uint32 is by far the most frequently used operation and benefits significantly from this.\n this.len += (this.tail = this.tail.next = new VarintOp(\n (value = value >>> 0)\n < 128 ? 1\n : value < 16384 ? 2\n : value < 2097152 ? 3\n : value < 268435456 ? 4\n : 5,\n value)).len;\n return this;\n};\n\n/**\n * Writes a signed 32 bit value as a varint.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.int32 = function write_int32(value) {\n return value < 0\n ? this._push(writeVarint64, 10, LongBits.fromNumber(value)) // 10 bytes per spec\n : this.uint32(value);\n};\n\n/**\n * Writes a 32 bit value as a varint, zig-zag encoded.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sint32 = function write_sint32(value) {\n return this.uint32((value << 1 ^ value >> 31) >>> 0);\n};\n\nfunction writeVarint64(val, buf, pos) {\n while (val.hi) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = (val.lo >>> 7 | val.hi << 25) >>> 0;\n val.hi >>>= 7;\n }\n while (val.lo > 127) {\n buf[pos++] = val.lo & 127 | 128;\n val.lo = val.lo >>> 7;\n }\n buf[pos++] = val.lo;\n}\n\n/**\n * Writes an unsigned 64 bit value as a varint.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.uint64 = function write_uint64(value) {\n var bits = LongBits.from(value);\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a signed 64 bit value as a varint.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.int64 = Writer.prototype.uint64;\n\n/**\n * Writes a signed 64 bit value as a varint, zig-zag encoded.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sint64 = function write_sint64(value) {\n var bits = LongBits.from(value).zzEncode();\n return this._push(writeVarint64, bits.length(), bits);\n};\n\n/**\n * Writes a boolish value as a varint.\n * @param {boolean} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bool = function write_bool(value) {\n return this._push(writeByte, 1, value ? 1 : 0);\n};\n\nfunction writeFixed32(val, buf, pos) {\n buf[pos ] = val & 255;\n buf[pos + 1] = val >>> 8 & 255;\n buf[pos + 2] = val >>> 16 & 255;\n buf[pos + 3] = val >>> 24;\n}\n\n/**\n * Writes an unsigned 32 bit value as fixed 32 bits.\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.fixed32 = function write_fixed32(value) {\n return this._push(writeFixed32, 4, value >>> 0);\n};\n\n/**\n * Writes a signed 32 bit value as fixed 32 bits.\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.sfixed32 = Writer.prototype.fixed32;\n\n/**\n * Writes an unsigned 64 bit value as fixed 64 bits.\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.fixed64 = function write_fixed64(value) {\n var bits = LongBits.from(value);\n return this._push(writeFixed32, 4, bits.lo)._push(writeFixed32, 4, bits.hi);\n};\n\n/**\n * Writes a signed 64 bit value as fixed 64 bits.\n * @function\n * @param {Long|number|string} value Value to write\n * @returns {Writer} `this`\n * @throws {TypeError} If `value` is a string and no long library is present.\n */\nWriter.prototype.sfixed64 = Writer.prototype.fixed64;\n\n/**\n * Writes a float (32 bit).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.float = function write_float(value) {\n return this._push(util.float.writeFloatLE, 4, value);\n};\n\n/**\n * Writes a double (64 bit float).\n * @function\n * @param {number} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.double = function write_double(value) {\n return this._push(util.float.writeDoubleLE, 8, value);\n};\n\nvar writeBytes = util.Array.prototype.set\n ? function writeBytes_set(val, buf, pos) {\n buf.set(val, pos); // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytes_for(val, buf, pos) {\n for (var i = 0; i < val.length; ++i)\n buf[pos + i] = val[i];\n };\n\n/**\n * Writes a sequence of bytes.\n * @param {Uint8Array|string} value Buffer or base64 encoded string to write\n * @returns {Writer} `this`\n */\nWriter.prototype.bytes = function write_bytes(value) {\n var len = value.length >>> 0;\n if (!len)\n return this._push(writeByte, 1, 0);\n if (util.isString(value)) {\n var buf = Writer.alloc(len = base64.length(value));\n base64.decode(value, buf, 0);\n value = buf;\n }\n return this.uint32(len)._push(writeBytes, len, value);\n};\n\n/**\n * Writes a string.\n * @param {string} value Value to write\n * @returns {Writer} `this`\n */\nWriter.prototype.string = function write_string(value) {\n var len = utf8.length(value);\n return len\n ? this.uint32(len)._push(utf8.write, len, value)\n : this._push(writeByte, 1, 0);\n};\n\n/**\n * Forks this writer's state by pushing it to a stack.\n * Calling {@link Writer#reset|reset} or {@link Writer#ldelim|ldelim} resets the writer to the previous state.\n * @returns {Writer} `this`\n */\nWriter.prototype.fork = function fork() {\n this.states = new State(this);\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n return this;\n};\n\n/**\n * Resets this instance to the last state.\n * @returns {Writer} `this`\n */\nWriter.prototype.reset = function reset() {\n if (this.states) {\n this.head = this.states.head;\n this.tail = this.states.tail;\n this.len = this.states.len;\n this.states = this.states.next;\n } else {\n this.head = this.tail = new Op(noop, 0, 0);\n this.len = 0;\n }\n return this;\n};\n\n/**\n * Resets to the last state and appends the fork state's current write length as a varint followed by its operations.\n * @returns {Writer} `this`\n */\nWriter.prototype.ldelim = function ldelim() {\n var head = this.head,\n tail = this.tail,\n len = this.len;\n this.reset().uint32(len);\n if (len) {\n this.tail.next = head.next; // skip noop\n this.tail = tail;\n this.len += len;\n }\n return this;\n};\n\n/**\n * Finishes the write operation.\n * @returns {Uint8Array} Finished buffer\n */\nWriter.prototype.finish = function finish() {\n var head = this.head.next, // skip noop\n buf = this.constructor.alloc(this.len),\n pos = 0;\n while (head) {\n head.fn(head.val, buf, pos);\n pos += head.len;\n head = head.next;\n }\n // this.head = this.tail = null;\n return buf;\n};\n\nWriter._configure = function(BufferWriter_) {\n BufferWriter = BufferWriter_;\n Writer.create = create();\n BufferWriter._configure();\n};\n","\"use strict\";\nmodule.exports = BufferWriter;\n\n// extends Writer\nvar Writer = require(\"./writer\");\n(BufferWriter.prototype = Object.create(Writer.prototype)).constructor = BufferWriter;\n\nvar util = require(\"./util/minimal\");\n\n/**\n * Constructs a new buffer writer instance.\n * @classdesc Wire format writer using node buffers.\n * @extends Writer\n * @constructor\n */\nfunction BufferWriter() {\n Writer.call(this);\n}\n\nBufferWriter._configure = function () {\n /**\n * Allocates a buffer of the specified size.\n * @function\n * @param {number} size Buffer size\n * @returns {Buffer} Buffer\n */\n BufferWriter.alloc = util._Buffer_allocUnsafe;\n\n BufferWriter.writeBytesBuffer = util.Buffer && util.Buffer.prototype instanceof Uint8Array && util.Buffer.prototype.set.name === \"set\"\n ? function writeBytesBuffer_set(val, buf, pos) {\n buf.set(val, pos); // faster than copy (requires node >= 4 where Buffers extend Uint8Array and set is properly inherited)\n // also works for plain array values\n }\n /* istanbul ignore next */\n : function writeBytesBuffer_copy(val, buf, pos) {\n if (val.copy) // Buffer values\n val.copy(buf, pos, 0, val.length);\n else for (var i = 0; i < val.length;) // plain array values\n buf[pos++] = val[i++];\n };\n};\n\n\n/**\n * @override\n */\nBufferWriter.prototype.bytes = function write_bytes_buffer(value) {\n if (util.isString(value))\n value = util._Buffer_from(value, \"base64\");\n var len = value.length >>> 0;\n this.uint32(len);\n if (len)\n this._push(BufferWriter.writeBytesBuffer, len, value);\n return this;\n};\n\nfunction writeStringBuffer(val, buf, pos) {\n if (val.length < 40) // plain js is faster for short strings (probably due to redundant assertions)\n util.utf8.write(val, buf, pos);\n else if (buf.utf8Write)\n buf.utf8Write(val, pos);\n else\n buf.write(val, pos);\n}\n\n/**\n * @override\n */\nBufferWriter.prototype.string = function write_string_buffer(value) {\n var len = util.Buffer.byteLength(value);\n this.uint32(len);\n if (len)\n this._push(writeStringBuffer, len, value);\n return this;\n};\n\n\n/**\n * Finishes the write operation.\n * @name BufferWriter#finish\n * @function\n * @returns {Buffer} Finished buffer\n */\n\nBufferWriter._configure();\n","'use strict'\n\nmodule.exports = Receptacle\nvar toMS = require('ms')\nvar cache = Receptacle.prototype\nvar counter = new Date() % 1e9\n\nfunction getUID () { return (Math.random() * 1e9 >>> 0) + (counter++) }\n\n/**\n * Creates a cache with a maximum key size.\n *\n * @constructor\n * @param {Object} options\n * @param {Number} [options.max=Infinity] the maximum number of keys allowed in the cache (lru).\n * @param {Array} [options.items=[]] the default items in the cache.\n */\nfunction Receptacle (options) {\n options = options || {}\n this.id = options.id || getUID()\n this.max = options.max || Infinity\n this.items = options.items || []\n this._lookup = {}\n this.size = this.items.length\n this.lastModified = new Date(options.lastModified || new Date())\n\n // Setup initial timers and indexes for the cache.\n for (var item, ttl, i = this.items.length; i--;) {\n item = this.items[i]\n ttl = new Date(item.expires) - new Date()\n this._lookup[item.key] = item\n if (ttl > 0) this.expire(item.key, ttl)\n else if (ttl <= 0) this.delete(item.key)\n }\n}\n\n/**\n * Tests if a key is currently in the cache.\n * Does not check if slot is empty.\n *\n * @param {String} key - the key to retrieve from the cache.\n * @return {Boolean}\n */\ncache.has = function (key) {\n return key in this._lookup\n}\n\n/**\n * Retrieves a key from the cache and marks it as recently used.\n *\n * @param {String} key - the key to retrieve from the cache.\n * @return {*}\n */\ncache.get = function (key) {\n if (!this.has(key)) return null\n var record = this._lookup[key]\n // Update expiry for \"refresh\" keys\n if (record.refresh) this.expire(key, record.refresh)\n // Move to front of the line.\n this.items.splice(this.items.indexOf(record), 1)\n this.items.push(record)\n return record.value\n}\n\n/**\n * Retrieves user meta data for a cached item.\n *\n * @param {String} key - the key to retrieve meta data from the cache.\n * @return {*}\n */\ncache.meta = function (key) {\n if (!this.has(key)) return null\n var record = this._lookup[key]\n if (!('meta' in record)) return null\n return record.meta\n}\n\n/**\n * Puts a key into the cache with an optional expiry time.\n *\n * @param {String} key - the key for the value in the cache.\n * @param {*} value - the value to place at the key.\n * @param {Number} [options.ttl] - a time after which the key will be removed.\n * @return {Receptacle}\n */\ncache.set = function (key, value, options) {\n var oldRecord = this._lookup[key]\n var record = this._lookup[key] = { key: key, value: value }\n // Mark cache as modified.\n this.lastModified = new Date()\n\n if (oldRecord) {\n // Replace an old key.\n clearTimeout(oldRecord.timeout)\n this.items.splice(this.items.indexOf(oldRecord), 1, record)\n } else {\n // Remove least used item if needed.\n if (this.size >= this.max) this.delete(this.items[0].key)\n // Add a new key.\n this.items.push(record)\n this.size++\n }\n\n if (options) {\n // Setup key expiry.\n if ('ttl' in options) this.expire(key, options.ttl)\n // Store user options in the record.\n if ('meta' in options) record.meta = options.meta\n // Mark a auto refresh key.\n if (options.refresh) record.refresh = options.ttl\n }\n\n return this\n}\n\n/**\n * Deletes an item from the cache.\n *\n * @param {String} key - the key to remove.\n * @return {Receptacle}\n */\ncache.delete = function (key) {\n var record = this._lookup[key]\n if (!record) return false\n this.lastModified = new Date()\n this.items.splice(this.items.indexOf(record), 1)\n clearTimeout(record.timeout)\n delete this._lookup[key]\n this.size--\n return this\n}\n\n/**\n * Utility to register a key that will be removed after some time.\n *\n * @param {String} key - the key to remove.\n * @param {Number} [ms] - the timeout before removal.\n * @return {Receptacle}\n */\ncache.expire = function (key, ttl) {\n var ms = ttl || 0\n var record = this._lookup[key]\n if (!record) return this\n if (typeof ms === 'string') ms = toMS(ttl)\n if (typeof ms !== 'number') throw new TypeError('Expiration time must be a string or number.')\n clearTimeout(record.timeout)\n record.timeout = setTimeout(this.delete.bind(this, record.key), ms)\n record.expires = Number(new Date()) + ms\n return this\n}\n\n/**\n * Deletes all items from the cache.\n * @return {Receptacle}\n */\ncache.clear = function () {\n for (var i = this.items.length; i--;) this.delete(this.items[i].key)\n return this\n}\n\n/**\n * Fixes serialization issues in polyfilled environments.\n * Ensures non-cyclical serialized object.\n */\ncache.toJSON = function () {\n var items = new Array(this.items.length)\n var item\n for (var i = items.length; i--;) {\n item = this.items[i]\n items[i] = {\n key: item.key,\n meta: item.meta,\n value: item.value,\n expires: item.expires,\n refresh: item.refresh\n }\n }\n\n return {\n id: this.id,\n max: isFinite(this.max) ? this.max : undefined,\n lastModified: this.lastModified,\n items: items\n }\n}\n","'use strict'\n\nconst getTime = require('./time')\n\nclass Retimer {\n constructor (callback, timeout, args) {\n const that = this\n\n this._started = getTime()\n this._rescheduled = 0\n this._scheduled = timeout\n this._args = args\n this._triggered = false\n\n this._timerWrapper = () => {\n if (that._rescheduled > 0) {\n that._scheduled = that._rescheduled - (getTime() - that._started)\n that._schedule(that._scheduled)\n } else {\n that._triggered = true\n callback.apply(null, that._args)\n }\n }\n\n this._timer = setTimeout(this._timerWrapper, timeout)\n }\n\n reschedule (timeout) {\n if (!timeout) {\n timeout = this._scheduled\n }\n const now = getTime()\n if ((now + timeout) - (this._started + this._scheduled) < 0) {\n clearTimeout(this._timer)\n this._schedule(timeout)\n } else if (!this._triggered) {\n this._started = now\n this._rescheduled = timeout\n } else {\n this._schedule(timeout)\n }\n }\n\n _schedule (timeout) {\n this._triggered = false\n this._started = getTime()\n this._rescheduled = 0\n this._scheduled = timeout\n this._timer = setTimeout(this._timerWrapper, timeout)\n }\n\n clear () {\n clearTimeout(this._timer)\n }\n}\n\nfunction retimer () {\n if (typeof arguments[0] !== 'function') {\n throw new Error('callback needed')\n }\n\n if (typeof arguments[1] !== 'number') {\n throw new Error('timeout needed')\n }\n\n let args\n\n if (arguments.length > 0) {\n args = new Array(arguments.length - 2)\n\n /* eslint-disable no-var */\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 2]\n }\n }\n\n return new Retimer(arguments[0], arguments[1], args)\n}\n\nmodule.exports = retimer\n","'use strict'\n\nmodule.exports = function getTime () {\n return Date.now()\n}\n","module.exports = require('./lib/retry');","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","/*jshint node:true*/\n'use strict';\n\n/**\n * Replaces characters in strings that are illegal/unsafe for filenames.\n * Unsafe characters are either removed or replaced by a substitute set\n * in the optional `options` object.\n *\n * Illegal Characters on Various Operating Systems\n * / ? < > \\ : * | \"\n * https://kb.acronis.com/content/39790\n *\n * Unicode Control codes\n * C0 0x00-0x1f & C1 (0x80-0x9f)\n * http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n *\n * Reserved filenames on Unix-based systems (\".\", \"..\")\n * Reserved filenames in Windows (\"CON\", \"PRN\", \"AUX\", \"NUL\", \"COM1\",\n * \"COM2\", \"COM3\", \"COM4\", \"COM5\", \"COM6\", \"COM7\", \"COM8\", \"COM9\",\n * \"LPT1\", \"LPT2\", \"LPT3\", \"LPT4\", \"LPT5\", \"LPT6\", \"LPT7\", \"LPT8\", and\n * \"LPT9\") case-insesitively and with or without filename extensions.\n *\n * Capped at 255 characters in length.\n * http://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs\n *\n * @param {String} input Original filename\n * @param {Object} options {replacement: String | Function }\n * @return {String} Sanitized filename\n */\n\nvar truncate = require(\"truncate-utf8-bytes\");\n\nvar illegalRe = /[\\/\\?<>\\\\:\\*\\|\"]/g;\nvar controlRe = /[\\x00-\\x1f\\x80-\\x9f]/g;\nvar reservedRe = /^\\.+$/;\nvar windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\\..*)?$/i;\nvar windowsTrailingRe = /[\\. ]+$/;\n\nfunction sanitize(input, replacement) {\n if (typeof input !== 'string') {\n throw new Error('Input must be string');\n }\n var sanitized = input\n .replace(illegalRe, replacement)\n .replace(controlRe, replacement)\n .replace(reservedRe, replacement)\n .replace(windowsReservedRe, replacement)\n .replace(windowsTrailingRe, replacement);\n return truncate(sanitized, 255);\n}\n\nmodule.exports = function (input, options) {\n var replacement = (options && options.replacement) || '';\n var output = sanitize(input, replacement);\n if (replacement === '') {\n return output;\n }\n return sanitize(output, '');\n};\n","module.exports = require('./lib')(require('./lib/elliptic'))\n","const EC = require('elliptic').ec\n\nconst ec = new EC('secp256k1')\nconst ecparams = ec.curve\n\n// Hack, we can not use bn.js@5, while elliptic uses bn.js@4\n// See https://github.com/indutny/elliptic/issues/191#issuecomment-569888758\nconst BN = ecparams.n.constructor\n\nfunction loadCompressedPublicKey (first, xbuf) {\n let x = new BN(xbuf)\n\n // overflow\n if (x.cmp(ecparams.p) >= 0) return null\n x = x.toRed(ecparams.red)\n\n // compute corresponding Y\n let y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()\n if ((first === 0x03) !== y.isOdd()) y = y.redNeg()\n\n return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadUncompressedPublicKey (first, xbuf, ybuf) {\n let x = new BN(xbuf)\n let y = new BN(ybuf)\n\n // overflow\n if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null\n\n x = x.toRed(ecparams.red)\n y = y.toRed(ecparams.red)\n\n // is odd flag\n if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null\n\n // x*x*x + b = y*y\n const x3 = x.redSqr().redIMul(x)\n if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null\n\n return ec.keyPair({ pub: { x: x, y: y } })\n}\n\nfunction loadPublicKey (pubkey) {\n // length should be validated in interface\n const first = pubkey[0]\n switch (first) {\n case 0x02:\n case 0x03:\n if (pubkey.length !== 33) return null\n return loadCompressedPublicKey(first, pubkey.subarray(1, 33))\n case 0x04:\n case 0x06:\n case 0x07:\n if (pubkey.length !== 65) return null\n return loadUncompressedPublicKey(first, pubkey.subarray(1, 33), pubkey.subarray(33, 65))\n default:\n return null\n }\n}\n\nfunction savePublicKey (output, point) {\n const pubkey = point.encode(null, output.length === 33)\n // Loop should be faster because we do not need create extra Uint8Array\n // output.set(new Uint8Array(pubkey))\n for (let i = 0; i < output.length; ++i) output[i] = pubkey[i]\n}\n\nmodule.exports = {\n contextRandomize () {\n return 0\n },\n\n privateKeyVerify (seckey) {\n const bn = new BN(seckey)\n return bn.cmp(ecparams.n) < 0 && !bn.isZero() ? 0 : 1\n },\n\n privateKeyNegate (seckey) {\n const bn = new BN(seckey)\n const negate = ecparams.n.sub(bn).umod(ecparams.n).toArrayLike(Uint8Array, 'be', 32)\n seckey.set(negate)\n return 0\n },\n\n privateKeyTweakAdd (seckey, tweak) {\n const bn = new BN(tweak)\n if (bn.cmp(ecparams.n) >= 0) return 1\n\n bn.iadd(new BN(seckey))\n if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)\n if (bn.isZero()) return 1\n\n const tweaked = bn.toArrayLike(Uint8Array, 'be', 32)\n seckey.set(tweaked)\n\n return 0\n },\n\n privateKeyTweakMul (seckey, tweak) {\n let bn = new BN(tweak)\n if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) return 1\n\n bn.imul(new BN(seckey))\n if (bn.cmp(ecparams.n) >= 0) bn = bn.umod(ecparams.n)\n\n const tweaked = bn.toArrayLike(Uint8Array, 'be', 32)\n seckey.set(tweaked)\n\n return 0\n },\n\n publicKeyVerify (pubkey) {\n const pair = loadPublicKey(pubkey)\n return pair === null ? 1 : 0\n },\n\n publicKeyCreate (output, seckey) {\n const bn = new BN(seckey)\n if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) return 1\n\n const point = ec.keyFromPrivate(seckey).getPublic()\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyConvert (output, pubkey) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n const point = pair.getPublic()\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyNegate (output, pubkey) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n const point = pair.getPublic()\n point.y = point.y.redNeg()\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyCombine (output, pubkeys) {\n const pairs = new Array(pubkeys.length)\n for (let i = 0; i < pubkeys.length; ++i) {\n pairs[i] = loadPublicKey(pubkeys[i])\n if (pairs[i] === null) return 1\n }\n\n let point = pairs[0].getPublic()\n for (let i = 1; i < pairs.length; ++i) point = point.add(pairs[i].pub)\n if (point.isInfinity()) return 2\n\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyTweakAdd (output, pubkey, tweak) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n tweak = new BN(tweak)\n if (tweak.cmp(ecparams.n) >= 0) return 2\n\n const point = pair.getPublic().add(ecparams.g.mul(tweak))\n if (point.isInfinity()) return 2\n\n savePublicKey(output, point)\n\n return 0\n },\n\n publicKeyTweakMul (output, pubkey, tweak) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n tweak = new BN(tweak)\n if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) return 2\n\n const point = pair.getPublic().mul(tweak)\n savePublicKey(output, point)\n\n return 0\n },\n\n signatureNormalize (sig) {\n const r = new BN(sig.subarray(0, 32))\n const s = new BN(sig.subarray(32, 64))\n if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) return 1\n\n if (s.cmp(ec.nh) === 1) {\n sig.set(ecparams.n.sub(s).toArrayLike(Uint8Array, 'be', 32), 32)\n }\n\n return 0\n },\n\n // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js\n // Adapted for Uint8Array instead Buffer\n signatureExport (obj, sig) {\n const sigR = sig.subarray(0, 32)\n const sigS = sig.subarray(32, 64)\n if (new BN(sigR).cmp(ecparams.n) >= 0) return 1\n if (new BN(sigS).cmp(ecparams.n) >= 0) return 1\n\n const { output } = obj\n\n // Prepare R\n let r = output.subarray(4, 4 + 33)\n r[0] = 0x00\n r.set(sigR, 1)\n\n let lenR = 33\n let posR = 0\n for (; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);\n\n r = r.subarray(posR)\n if (r[0] & 0x80) return 1\n if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) return 1\n\n // Prepare S\n let s = output.subarray(6 + 33, 6 + 33 + 33)\n s[0] = 0x00\n s.set(sigS, 1)\n\n let lenS = 33\n let posS = 0\n for (; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);\n\n s = s.subarray(posS)\n if (s[0] & 0x80) return 1\n if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) return 1\n\n // Set output length for return\n obj.outputlen = 6 + lenR + lenS\n\n // Output in specified format\n // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]\n output[0] = 0x30\n output[1] = obj.outputlen - 2\n output[2] = 0x02\n output[3] = r.length\n output.set(r, 4)\n output[4 + lenR] = 0x02\n output[5 + lenR] = s.length\n output.set(s, 6 + lenR)\n\n return 0\n },\n\n // Copied 1-to-1 from https://github.com/bitcoinjs/bip66/blob/master/index.js\n // Adapted for Uint8Array instead Buffer\n signatureImport (output, sig) {\n if (sig.length < 8) return 1\n if (sig.length > 72) return 1\n if (sig[0] !== 0x30) return 1\n if (sig[1] !== sig.length - 2) return 1\n if (sig[2] !== 0x02) return 1\n\n const lenR = sig[3]\n if (lenR === 0) return 1\n if (5 + lenR >= sig.length) return 1\n if (sig[4 + lenR] !== 0x02) return 1\n\n const lenS = sig[5 + lenR]\n if (lenS === 0) return 1\n if ((6 + lenR + lenS) !== sig.length) return 1\n\n if (sig[4] & 0x80) return 1\n if (lenR > 1 && (sig[4] === 0x00) && !(sig[5] & 0x80)) return 1\n\n if (sig[lenR + 6] & 0x80) return 1\n if (lenS > 1 && (sig[lenR + 6] === 0x00) && !(sig[lenR + 7] & 0x80)) return 1\n\n let sigR = sig.subarray(4, 4 + lenR)\n if (sigR.length === 33 && sigR[0] === 0x00) sigR = sigR.subarray(1)\n if (sigR.length > 32) return 1\n\n let sigS = sig.subarray(6 + lenR)\n if (sigS.length === 33 && sigS[0] === 0x00) sigS = sigS.slice(1)\n if (sigS.length > 32) throw new Error('S length is too long')\n\n let r = new BN(sigR)\n if (r.cmp(ecparams.n) >= 0) r = new BN(0)\n\n let s = new BN(sig.subarray(6 + lenR))\n if (s.cmp(ecparams.n) >= 0) s = new BN(0)\n\n output.set(r.toArrayLike(Uint8Array, 'be', 32), 0)\n output.set(s.toArrayLike(Uint8Array, 'be', 32), 32)\n\n return 0\n },\n\n ecdsaSign (obj, message, seckey, data, noncefn) {\n if (noncefn) {\n const _noncefn = noncefn\n noncefn = (counter) => {\n const nonce = _noncefn(message, seckey, null, data, counter)\n\n const isValid = nonce instanceof Uint8Array && nonce.length === 32\n if (!isValid) throw new Error('This is the way')\n\n return new BN(nonce)\n }\n }\n\n const d = new BN(seckey)\n if (d.cmp(ecparams.n) >= 0 || d.isZero()) return 1\n\n let sig\n try {\n sig = ec.sign(message, seckey, { canonical: true, k: noncefn, pers: data })\n } catch (err) {\n return 1\n }\n\n obj.signature.set(sig.r.toArrayLike(Uint8Array, 'be', 32), 0)\n obj.signature.set(sig.s.toArrayLike(Uint8Array, 'be', 32), 32)\n obj.recid = sig.recoveryParam\n\n return 0\n },\n\n ecdsaVerify (sig, msg32, pubkey) {\n const sigObj = { r: sig.subarray(0, 32), s: sig.subarray(32, 64) }\n\n const sigr = new BN(sigObj.r)\n const sigs = new BN(sigObj.s)\n if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1\n if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return 3\n\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 2\n\n const point = pair.getPublic()\n const isValid = ec.verify(msg32, sigObj, point)\n return isValid ? 0 : 3\n },\n\n ecdsaRecover (output, sig, recid, msg32) {\n const sigObj = { r: sig.slice(0, 32), s: sig.slice(32, 64) }\n\n const sigr = new BN(sigObj.r)\n const sigs = new BN(sigObj.s)\n if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) return 1\n\n if (sigr.isZero() || sigs.isZero()) return 2\n\n // Can throw `throw new Error('Unable to find sencond key candinate');`\n let point\n try {\n point = ec.recoverPubKey(msg32, sigObj, recid)\n } catch (err) {\n return 2\n }\n\n savePublicKey(output, point)\n\n return 0\n },\n\n ecdh (output, pubkey, seckey, data, hashfn, xbuf, ybuf) {\n const pair = loadPublicKey(pubkey)\n if (pair === null) return 1\n\n const scalar = new BN(seckey)\n if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) return 2\n\n const point = pair.getPublic().mul(scalar)\n\n if (hashfn === undefined) {\n const data = point.encode(null, true)\n const sha256 = ec.hash().update(data).digest()\n for (let i = 0; i < 32; ++i) output[i] = sha256[i]\n } else {\n if (!xbuf) xbuf = new Uint8Array(32)\n const x = point.getX().toArray('be', 32)\n for (let i = 0; i < 32; ++i) xbuf[i] = x[i]\n\n if (!ybuf) ybuf = new Uint8Array(32)\n const y = point.getY().toArray('be', 32)\n for (let i = 0; i < 32; ++i) ybuf[i] = y[i]\n\n const hash = hashfn(xbuf, ybuf, data)\n\n const isValid = hash instanceof Uint8Array && hash.length === output.length\n if (!isValid) return 2\n\n output.set(hash)\n }\n\n return 0\n }\n}\n","const errors = {\n IMPOSSIBLE_CASE: 'Impossible case. Please create issue.',\n TWEAK_ADD:\n 'The tweak was out of range or the resulted private key is invalid',\n TWEAK_MUL: 'The tweak was out of range or equal to zero',\n CONTEXT_RANDOMIZE_UNKNOW: 'Unknow error on context randomization',\n SECKEY_INVALID: 'Private Key is invalid',\n PUBKEY_PARSE: 'Public Key could not be parsed',\n PUBKEY_SERIALIZE: 'Public Key serialization error',\n PUBKEY_COMBINE: 'The sum of the public keys is not valid',\n SIG_PARSE: 'Signature could not be parsed',\n SIGN: 'The nonce generation function failed, or the private key was invalid',\n RECOVER: 'Public key could not be recover',\n ECDH: 'Scalar was invalid (zero or overflow)'\n}\n\nfunction assert (cond, msg) {\n if (!cond) throw new Error(msg)\n}\n\nfunction isUint8Array (name, value, length) {\n assert(value instanceof Uint8Array, `Expected ${name} to be an Uint8Array`)\n\n if (length !== undefined) {\n if (Array.isArray(length)) {\n const numbers = length.join(', ')\n const msg = `Expected ${name} to be an Uint8Array with length [${numbers}]`\n assert(length.includes(value.length), msg)\n } else {\n const msg = `Expected ${name} to be an Uint8Array with length ${length}`\n assert(value.length === length, msg)\n }\n }\n}\n\nfunction isCompressed (value) {\n assert(toTypeString(value) === 'Boolean', 'Expected compressed to be a Boolean')\n}\n\nfunction getAssertedOutput (output = (len) => new Uint8Array(len), length) {\n if (typeof output === 'function') output = output(length)\n isUint8Array('output', output, length)\n return output\n}\n\nfunction toTypeString (value) {\n return Object.prototype.toString.call(value).slice(8, -1)\n}\n\nmodule.exports = (secp256k1) => {\n return {\n contextRandomize (seed) {\n assert(\n seed === null || seed instanceof Uint8Array,\n 'Expected seed to be an Uint8Array or null'\n )\n if (seed !== null) isUint8Array('seed', seed, 32)\n\n switch (secp256k1.contextRandomize(seed)) {\n case 1:\n throw new Error(errors.CONTEXT_RANDOMIZE_UNKNOW)\n }\n },\n\n privateKeyVerify (seckey) {\n isUint8Array('private key', seckey, 32)\n\n return secp256k1.privateKeyVerify(seckey) === 0\n },\n\n privateKeyNegate (seckey) {\n isUint8Array('private key', seckey, 32)\n\n switch (secp256k1.privateKeyNegate(seckey)) {\n case 0:\n return seckey\n case 1:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n privateKeyTweakAdd (seckey, tweak) {\n isUint8Array('private key', seckey, 32)\n isUint8Array('tweak', tweak, 32)\n\n switch (secp256k1.privateKeyTweakAdd(seckey, tweak)) {\n case 0:\n return seckey\n case 1:\n throw new Error(errors.TWEAK_ADD)\n }\n },\n\n privateKeyTweakMul (seckey, tweak) {\n isUint8Array('private key', seckey, 32)\n isUint8Array('tweak', tweak, 32)\n\n switch (secp256k1.privateKeyTweakMul(seckey, tweak)) {\n case 0:\n return seckey\n case 1:\n throw new Error(errors.TWEAK_MUL)\n }\n },\n\n publicKeyVerify (pubkey) {\n isUint8Array('public key', pubkey, [33, 65])\n\n return secp256k1.publicKeyVerify(pubkey) === 0\n },\n\n publicKeyCreate (seckey, compressed = true, output) {\n isUint8Array('private key', seckey, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyCreate(output, seckey)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.SECKEY_INVALID)\n case 2:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyConvert (pubkey, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyConvert(output, pubkey)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyNegate (pubkey, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyNegate(output, pubkey)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n case 3:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyCombine (pubkeys, compressed = true, output) {\n assert(Array.isArray(pubkeys), 'Expected public keys to be an Array')\n assert(pubkeys.length > 0, 'Expected public keys array will have more than zero items')\n for (const pubkey of pubkeys) {\n isUint8Array('public key', pubkey, [33, 65])\n }\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyCombine(output, pubkeys)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.PUBKEY_COMBINE)\n case 3:\n throw new Error(errors.PUBKEY_SERIALIZE)\n }\n },\n\n publicKeyTweakAdd (pubkey, tweak, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isUint8Array('tweak', tweak, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyTweakAdd(output, pubkey, tweak)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.TWEAK_ADD)\n }\n },\n\n publicKeyTweakMul (pubkey, tweak, compressed = true, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isUint8Array('tweak', tweak, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.publicKeyTweakMul(output, pubkey, tweak)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.TWEAK_MUL)\n }\n },\n\n signatureNormalize (sig) {\n isUint8Array('signature', sig, 64)\n\n switch (secp256k1.signatureNormalize(sig)) {\n case 0:\n return sig\n case 1:\n throw new Error(errors.SIG_PARSE)\n }\n },\n\n signatureExport (sig, output) {\n isUint8Array('signature', sig, 64)\n output = getAssertedOutput(output, 72)\n\n const obj = { output, outputlen: 72 }\n switch (secp256k1.signatureExport(obj, sig)) {\n case 0:\n return output.slice(0, obj.outputlen)\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n signatureImport (sig, output) {\n isUint8Array('signature', sig)\n output = getAssertedOutput(output, 64)\n\n switch (secp256k1.signatureImport(output, sig)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n ecdsaSign (msg32, seckey, options = {}, output) {\n isUint8Array('message', msg32, 32)\n isUint8Array('private key', seckey, 32)\n assert(toTypeString(options) === 'Object', 'Expected options to be an Object')\n if (options.data !== undefined) isUint8Array('options.data', options.data)\n if (options.noncefn !== undefined) assert(toTypeString(options.noncefn) === 'Function', 'Expected options.noncefn to be a Function')\n output = getAssertedOutput(output, 64)\n\n const obj = { signature: output, recid: null }\n switch (secp256k1.ecdsaSign(obj, msg32, seckey, options.data, options.noncefn)) {\n case 0:\n return obj\n case 1:\n throw new Error(errors.SIGN)\n case 2:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n ecdsaVerify (sig, msg32, pubkey) {\n isUint8Array('signature', sig, 64)\n isUint8Array('message', msg32, 32)\n isUint8Array('public key', pubkey, [33, 65])\n\n switch (secp256k1.ecdsaVerify(sig, msg32, pubkey)) {\n case 0:\n return true\n case 3:\n return false\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.PUBKEY_PARSE)\n }\n },\n\n ecdsaRecover (sig, recid, msg32, compressed = true, output) {\n isUint8Array('signature', sig, 64)\n assert(\n toTypeString(recid) === 'Number' &&\n recid >= 0 &&\n recid <= 3,\n 'Expected recovery id to be a Number within interval [0, 3]'\n )\n isUint8Array('message', msg32, 32)\n isCompressed(compressed)\n output = getAssertedOutput(output, compressed ? 33 : 65)\n\n switch (secp256k1.ecdsaRecover(output, sig, recid, msg32)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.SIG_PARSE)\n case 2:\n throw new Error(errors.RECOVER)\n case 3:\n throw new Error(errors.IMPOSSIBLE_CASE)\n }\n },\n\n ecdh (pubkey, seckey, options = {}, output) {\n isUint8Array('public key', pubkey, [33, 65])\n isUint8Array('private key', seckey, 32)\n assert(toTypeString(options) === 'Object', 'Expected options to be an Object')\n if (options.data !== undefined) isUint8Array('options.data', options.data)\n if (options.hashfn !== undefined) {\n assert(toTypeString(options.hashfn) === 'Function', 'Expected options.hashfn to be a Function')\n if (options.xbuf !== undefined) isUint8Array('options.xbuf', options.xbuf, 32)\n if (options.ybuf !== undefined) isUint8Array('options.ybuf', options.ybuf, 32)\n isUint8Array('output', output)\n } else {\n output = getAssertedOutput(output, 32)\n }\n\n switch (secp256k1.ecdh(output, pubkey, seckey, options.data, options.hashfn, options.xbuf, options.ybuf)) {\n case 0:\n return output\n case 1:\n throw new Error(errors.PUBKEY_PARSE)\n case 2:\n throw new Error(errors.ECDH)\n }\n }\n }\n}\n","'use strict'\n\nconst intervals = new Map()\n\nconst _generateId = () => `${Date.now()}:${Math.floor(Math.random() * 1000000)}`\n\n/**\n * Run a given task each {interval} ms\n *\n * @param {() => Promise} task\n * @param {number} interval\n * @param {string} id\n */\nasync function _runPeriodically (task, interval, id) {\n while (intervals.get(id)) {\n try {\n await task()\n } catch (err) {\n // Throw global context error if handler throws\n setTimeout(() => { throw err }, 1)\n break\n }\n\n if (!intervals.get(id)) {\n break\n }\n\n await new Promise(resolve => {\n const _timeout = setTimeout(resolve, interval)\n\n intervals.set(id, _timeout)\n })\n }\n}\n\n/**\n * Asynchronous setInterval that is properly delayed using promises and can be delayed on boot.\n *\n * @param {() => Promise} task\n * @param {number} interval\n * @param {number} [delay = interval]\n * @returns {string}\n */\nfunction setDelayedInterval (task, interval, delay) {\n delay = delay || interval\n\n const id = _generateId()\n const _timeout = setTimeout(() => {\n _runPeriodically(task, interval, id)\n }, delay)\n\n intervals.set(id, _timeout)\n\n return id\n}\n\n/**\n * Clear delayed interval.\n *\n * @param {string} id\n */\nfunction clearDelayedInterval (id) {\n const _timeout = intervals.get(id)\n\n if (_timeout) {\n clearTimeout(_timeout)\n intervals.delete(id)\n }\n}\n\nmodule.exports = {\n setDelayedInterval,\n clearDelayedInterval\n}\n","'use strict'\n\nconst { AbortController } = globalThis\n\n// @ts-expect-error no types\nconst retimer = require('retimer')\n\nclass TimeoutController extends AbortController {\n /**\n * @constructor\n * @param {number} ms milliseconds\n */\n constructor (ms) {\n super()\n this._ms = ms\n this._timer = retimer(() => this.abort(), ms)\n // Patch for safari not supported extending built in classes\n Object.setPrototypeOf(this, TimeoutController.prototype)\n }\n\n /**\n * Aborts the controller and clears the timer\n */\n abort () {\n this._timer.clear()\n return super.abort()\n }\n\n /**\n * Clears the timer\n */\n clear () {\n this._timer.clear()\n }\n\n /**\n * Resets the timer\n */\n reset () {\n this._timer.clear()\n this._timer = retimer(() => this.abort(), this._ms)\n }\n}\n\nmodule.exports = {\n TimeoutController\n}\n","'use strict';\n\nvar truncate = require(\"./lib/truncate\");\nvar getLength = require(\"utf8-byte-length/browser\");\nmodule.exports = truncate.bind(null, getLength);\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function truncate(getLength, string, byteLength) {\n if (typeof string !== \"string\") {\n throw new Error(\"Input must be string\");\n }\n\n var charLength = string.length;\n var curByteLength = 0;\n var codePoint;\n var segment;\n\n for (var i = 0; i < charLength; i += 1) {\n codePoint = string.charCodeAt(i);\n segment = string[i];\n\n if (isHighSurrogate(codePoint) && isLowSurrogate(string.charCodeAt(i + 1))) {\n i += 1;\n segment += string[i];\n }\n\n curByteLength += getLength(segment);\n\n if (curByteLength === byteLength) {\n return string.slice(0, i + 1);\n }\n else if (curByteLength > byteLength) {\n return string.slice(0, i - segment.length + 1);\n }\n }\n\n return string;\n};\n\n","'use strict';\n\nfunction isHighSurrogate(codePoint) {\n return codePoint >= 0xd800 && codePoint <= 0xdbff;\n}\n\nfunction isLowSurrogate(codePoint) {\n return codePoint >= 0xdc00 && codePoint <= 0xdfff;\n}\n\n// Truncate string by size in bytes\nmodule.exports = function getByteLength(string) {\n if (typeof string !== \"string\") {\n throw new Error(\"Input must be string\");\n }\n\n var charLength = string.length;\n var byteLength = 0;\n var codePoint = null;\n var prevCodePoint = null;\n for (var i = 0; i < charLength; i++) {\n codePoint = string.charCodeAt(i);\n // handle 4-byte non-BMP chars\n // low surrogate\n if (isLowSurrogate(codePoint)) {\n // when parsing previous hi-surrogate, 3 is added to byteLength\n if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {\n byteLength += 1;\n }\n else {\n byteLength += 3;\n }\n }\n else if (codePoint <= 0x7f ) {\n byteLength += 1;\n }\n else if (codePoint >= 0x80 && codePoint <= 0x7ff) {\n byteLength += 2;\n }\n else if (codePoint >= 0x800 && codePoint <= 0xffff) {\n byteLength += 3;\n }\n prevCodePoint = codePoint;\n }\n\n return byteLength;\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').substr(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.substr(1, name.length - 2);\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","// 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()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function 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. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\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}","export 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;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 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 var uuid = (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]]).toLowerCase(); // 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 (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js'; // **`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;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/uuidjs/uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || new Array(16);\n options = options || {};\n var node = options.node || _nodeId;\n var 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 var seedBytes = options.random || (options.rng || rng)();\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 var 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 var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var 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 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; // `time_mid`\n\n var 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 (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf || stringify(b);\n}\n\nexport default v1;","import validate from './validate.js';\n\nfunction parse(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n var v;\n var 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\nexport default parse;","import stringify from './stringify.js';\nimport parse from './parse.js';\n\nfunction stringToBytes(str) {\n str = unescape(encodeURIComponent(str)); // UTF8 escape\n\n var bytes = [];\n\n for (var i = 0; i < str.length; ++i) {\n bytes.push(str.charCodeAt(i));\n }\n\n return bytes;\n}\n\nexport var DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport var URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function (name, version, hashfunc) {\n function generateUUID(value, namespace, buf, offset) {\n if (typeof value === 'string') {\n value = stringToBytes(value);\n }\n\n if (typeof namespace === 'string') {\n namespace = parse(namespace);\n }\n\n if (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 var 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 (var i = 0; i < 16; ++i) {\n buf[offset + i] = bytes[i];\n }\n\n return buf;\n }\n\n return stringify(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}","/*\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 var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = new Uint8Array(msg.length);\n\n for (var 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 var output = [];\n var length32 = input.length * 32;\n var hexTab = '0123456789abcdef';\n\n for (var i = 0; i < length32; i += 8) {\n var x = input[i >> 5] >>> i % 32 & 0xff;\n var 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 var a = 1732584193;\n var b = -271733879;\n var c = -1732584194;\n var d = 271733878;\n\n for (var i = 0; i < x.length; i += 16) {\n var olda = a;\n var oldb = b;\n var oldc = c;\n var 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 var length8 = input.length * 8;\n var output = new Uint32Array(getOutputLength(length8));\n\n for (var 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 var lsw = (x & 0xffff) + (y & 0xffff);\n var 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\nexport default md5;","import v35 from './v35.js';\nimport md5 from './md5.js';\nvar v3 = v35('v3', 0x30, md5);\nexport default v3;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var 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 (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","// 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 var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n\n if (typeof bytes === 'string') {\n var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape\n\n bytes = [];\n\n for (var 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 var l = bytes.length / 4 + 2;\n var N = Math.ceil(l / 16);\n var M = new Array(N);\n\n for (var _i = 0; _i < N; ++_i) {\n var arr = new Uint32Array(16);\n\n for (var 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 (var _i2 = 0; _i2 < N; ++_i2) {\n var W = new Uint32Array(80);\n\n for (var t = 0; t < 16; ++t) {\n W[t] = M[_i2][t];\n }\n\n for (var _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 var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n\n for (var _t2 = 0; _t2 < 80; ++_t2) {\n var s = Math.floor(_t2 / 20);\n var T = ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[_t2] >>> 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\nexport default sha1;","import v35 from './v35.js';\nimport sha1 from './sha1.js';\nvar v5 = v35('v5', 0x50, sha1);\nexport default v5;","export default '00000000-0000-0000-0000-000000000000';","import validate from './validate.js';\n\nfunction version(uuid) {\n if (!validate(uuid)) {\n throw TypeError('Invalid UUID');\n }\n\n return parseInt(uuid.substr(14, 1), 16);\n}\n\nexport default version;","module.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l || shift > 49) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n","module.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {\n encode.bytes = 0\n throw new RangeError('Could not encode varint')\n }\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n","module.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n","\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n","'use strict'\n\n/** @type {() => boolean} */\n// @ts-ignore\nconst isElectron = require('is-electron')\n\nconst IS_ENV_WITH_DOM = typeof window === 'object' && typeof document === 'object' && document.nodeType === 9\n\nconst IS_ELECTRON = isElectron()\nconst IS_BROWSER = IS_ENV_WITH_DOM && !IS_ELECTRON\nconst IS_ELECTRON_MAIN = IS_ELECTRON && !IS_ENV_WITH_DOM\nconst IS_ELECTRON_RENDERER = IS_ELECTRON && IS_ENV_WITH_DOM\nconst IS_NODE = typeof require === 'function' && typeof process !== 'undefined' && typeof process.release !== 'undefined' && process.release.name === 'node' && !IS_ELECTRON\n// @ts-ignore\n// eslint-disable-next-line no-undef\nconst IS_WEBWORKER = typeof importScripts === 'function' && typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope\nconst IS_TEST = typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.NODE_ENV === 'test'\n\nmodule.exports = {\n isTest: IS_TEST,\n isElectron: IS_ELECTRON,\n isElectronMain: IS_ELECTRON_MAIN,\n isElectronRenderer: IS_ELECTRON_RENDERER,\n isNode: IS_NODE,\n /**\n * Detects browser main thread **NOT** web worker or service worker\n */\n isBrowser: IS_BROWSER,\n isWebWorker: IS_WEBWORKER,\n isEnvWithDom: IS_ENV_WITH_DOM\n}\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof global[typedArray] === 'function') {\n\t\t\tvar arr = new global[typedArray]();\n\t\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t\t}\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\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\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\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof global[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\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","import all from 'it-all';\nexport const sortAll = (iterable, sorter) => {\n return async function* () {\n const values = await all(iterable);\n yield* values.sort(sorter);\n }();\n};\nexport const replaceStartWith = (s, r) => {\n const matcher = new RegExp('^' + r);\n return s.replace(matcher, '');\n};","import { BaseDatastore } from './base.js';\nimport { Key } from 'interface-datastore/key';\nimport * as Errors from './errors.js';\nexport class MemoryDatastore extends BaseDatastore {\n constructor() {\n super();\n this.data = {};\n }\n open() {\n return Promise.resolve();\n }\n close() {\n return Promise.resolve();\n }\n async put(key, val) {\n this.data[key.toString()] = val;\n }\n async get(key) {\n const exists = await this.has(key);\n if (!exists)\n throw Errors.notFoundError();\n return this.data[key.toString()];\n }\n async has(key) {\n return this.data[key.toString()] !== undefined;\n }\n async delete(key) {\n delete this.data[key.toString()];\n }\n async *_all() {\n yield* Object.entries(this.data).map(([key, value]) => ({\n key: new Key(key),\n value\n }));\n }\n async *_allKeys() {\n yield* Object.entries(this.data).map(([key]) => new Key(key));\n }\n}","import { sortAll } from './utils.js';\nimport drain from 'it-drain';\nimport filter from 'it-filter';\nimport take from 'it-take';\nexport class BaseDatastore {\n open() {\n return Promise.reject(new Error('.open is not implemented'));\n }\n close() {\n return Promise.reject(new Error('.close is not implemented'));\n }\n put(key, val, options) {\n return Promise.reject(new Error('.put is not implemented'));\n }\n get(key, options) {\n return Promise.reject(new Error('.get is not implemented'));\n }\n has(key, options) {\n return Promise.reject(new Error('.has is not implemented'));\n }\n delete(key, options) {\n return Promise.reject(new Error('.delete is not implemented'));\n }\n async *putMany(source, options = {}) {\n for await (const {key, value} of source) {\n await this.put(key, value, options);\n yield {\n key,\n value\n };\n }\n }\n async *getMany(source, options = {}) {\n for await (const key of source) {\n yield this.get(key, options);\n }\n }\n async *deleteMany(source, options = {}) {\n for await (const key of source) {\n await this.delete(key, options);\n yield key;\n }\n }\n batch() {\n let puts = [];\n let dels = [];\n return {\n put(key, value) {\n puts.push({\n key,\n value\n });\n },\n delete(key) {\n dels.push(key);\n },\n commit: async options => {\n await drain(this.putMany(puts, options));\n puts = [];\n await drain(this.deleteMany(dels, options));\n dels = [];\n }\n };\n }\n async *_all(q, options) {\n throw new Error('._all is not implemented');\n }\n async *_allKeys(q, options) {\n throw new Error('._allKeys is not implemented');\n }\n query(q, options) {\n let it = this._all(q, options);\n if (q.prefix != null) {\n it = filter(it, e => e.key.toString().startsWith(q.prefix));\n }\n if (Array.isArray(q.filters)) {\n it = q.filters.reduce((it, f) => filter(it, f), it);\n }\n if (Array.isArray(q.orders)) {\n it = q.orders.reduce((it, f) => sortAll(it, f), it);\n }\n if (q.offset != null) {\n let i = 0;\n it = filter(it, () => i++ >= q.offset);\n }\n if (q.limit != null) {\n it = take(it, q.limit);\n }\n return it;\n }\n queryKeys(q, options) {\n let it = this._allKeys(q, options);\n if (q.prefix != null) {\n it = filter(it, key => key.toString().startsWith(q.prefix));\n }\n if (Array.isArray(q.filters)) {\n it = q.filters.reduce((it, f) => filter(it, f), it);\n }\n if (Array.isArray(q.orders)) {\n it = q.orders.reduce((it, f) => sortAll(it, f), it);\n }\n if (q.offset != null) {\n let i = 0;\n it = filter(it, () => i++ >= q.offset);\n }\n if (q.limit != null) {\n it = take(it, q.limit);\n }\n return it;\n }\n}","import errCode from 'err-code';\nexport function dbOpenFailedError(err) {\n err = err || new Error('Cannot open database');\n return errCode(err, 'ERR_DB_OPEN_FAILED');\n}\nexport function dbDeleteFailedError(err) {\n err = err || new Error('Delete failed');\n return errCode(err, 'ERR_DB_DELETE_FAILED');\n}\nexport function dbWriteFailedError(err) {\n err = err || new Error('Write failed');\n return errCode(err, 'ERR_DB_WRITE_FAILED');\n}\nexport function notFoundError(err) {\n err = err || new Error('Not Found');\n return errCode(err, 'ERR_NOT_FOUND');\n}\nexport function abortedError(err) {\n err = err || new Error('Aborted');\n return errCode(err, 'ERR_ABORTED');\n}","import { nanoid } from 'nanoid';\nimport { toString as uint8ArrayToString } from 'uint8arrays/to-string';\nimport { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';\nconst pathSepS = '/';\nconst pathSepB = new TextEncoder().encode(pathSepS);\nconst pathSep = pathSepB[0];\nexport class Key {\n constructor(s, clean) {\n if (typeof s === 'string') {\n this._buf = uint8ArrayFromString(s);\n } else if (s instanceof Uint8Array) {\n this._buf = s;\n } else {\n throw new Error('Invalid key, should be String of Uint8Array');\n }\n if (clean == null) {\n clean = true;\n }\n if (clean) {\n this.clean();\n }\n if (this._buf.byteLength === 0 || this._buf[0] !== pathSep) {\n throw new Error('Invalid key');\n }\n }\n toString(encoding = 'utf8') {\n return uint8ArrayToString(this._buf, encoding);\n }\n uint8Array() {\n return this._buf;\n }\n get [Symbol.toStringTag]() {\n return `Key(${ this.toString() })`;\n }\n static withNamespaces(list) {\n return new Key(list.join(pathSepS));\n }\n static random() {\n return new Key(nanoid().replace(/-/g, ''));\n }\n static asKey(other) {\n if (other instanceof Uint8Array || typeof other === 'string') {\n return new Key(other);\n }\n if (other.uint8Array) {\n return new Key(other.uint8Array());\n }\n return null;\n }\n clean() {\n if (!this._buf || this._buf.byteLength === 0) {\n this._buf = pathSepB;\n }\n if (this._buf[0] !== pathSep) {\n const bytes = new Uint8Array(this._buf.byteLength + 1);\n bytes.fill(pathSep, 0, 1);\n bytes.set(this._buf, 1);\n this._buf = bytes;\n }\n while (this._buf.byteLength > 1 && this._buf[this._buf.byteLength - 1] === pathSep) {\n this._buf = this._buf.subarray(0, -1);\n }\n }\n less(key) {\n const list1 = this.list();\n const list2 = key.list();\n for (let i = 0; i < list1.length; i++) {\n if (list2.length < i + 1) {\n return false;\n }\n const c1 = list1[i];\n const c2 = list2[i];\n if (c1 < c2) {\n return true;\n } else if (c1 > c2) {\n return false;\n }\n }\n return list1.length < list2.length;\n }\n reverse() {\n return Key.withNamespaces(this.list().slice().reverse());\n }\n namespaces() {\n return this.list();\n }\n baseNamespace() {\n const ns = this.namespaces();\n return ns[ns.length - 1];\n }\n list() {\n return this.toString().split(pathSepS).slice(1);\n }\n type() {\n return namespaceType(this.baseNamespace());\n }\n name() {\n return namespaceValue(this.baseNamespace());\n }\n instance(s) {\n return new Key(this.toString() + ':' + s);\n }\n path() {\n let p = this.parent().toString();\n if (!p.endsWith(pathSepS)) {\n p += pathSepS;\n }\n p += this.type();\n return new Key(p);\n }\n parent() {\n const list = this.list();\n if (list.length === 1) {\n return new Key(pathSepS);\n }\n return new Key(list.slice(0, -1).join(pathSepS));\n }\n child(key) {\n if (this.toString() === pathSepS) {\n return key;\n } else if (key.toString() === pathSepS) {\n return this;\n }\n return new Key(this.toString() + key.toString(), false);\n }\n isAncestorOf(other) {\n if (other.toString() === this.toString()) {\n return false;\n }\n return other.toString().startsWith(this.toString());\n }\n isDecendantOf(other) {\n if (other.toString() === this.toString()) {\n return false;\n }\n return this.toString().startsWith(other.toString());\n }\n isTopLevel() {\n return this.list().length === 1;\n }\n concat(...keys) {\n return Key.withNamespaces([\n ...this.namespaces(),\n ...flatten(keys.map(key => key.namespaces()))\n ]);\n }\n}\nfunction namespaceType(ns) {\n const parts = ns.split(':');\n if (parts.length < 2) {\n return '';\n }\n return parts.slice(0, -1).join(':');\n}\nfunction namespaceValue(ns) {\n const parts = ns.split(':');\n return parts[parts.length - 1];\n}\nfunction flatten(arr) {\n return [].concat(...arr);\n}","function base(ALPHABET, name) {\n if (ALPHABET.length >= 255) {\n throw new TypeError('Alphabet too long');\n }\n var BASE_MAP = new Uint8Array(256);\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255;\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i);\n var xc = x.charCodeAt(0);\n if (BASE_MAP[xc] !== 255) {\n throw new TypeError(x + ' is ambiguous');\n }\n BASE_MAP[xc] = i;\n }\n var BASE = ALPHABET.length;\n var LEADER = ALPHABET.charAt(0);\n var FACTOR = Math.log(BASE) / Math.log(256);\n var iFACTOR = Math.log(256) / Math.log(BASE);\n function encode(source) {\n if (source instanceof Uint8Array);\n else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength);\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source);\n }\n if (!(source instanceof Uint8Array)) {\n throw new TypeError('Expected Uint8Array');\n }\n if (source.length === 0) {\n return '';\n }\n var zeroes = 0;\n var length = 0;\n var pbegin = 0;\n var pend = source.length;\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++;\n zeroes++;\n }\n var size = (pend - pbegin) * iFACTOR + 1 >>> 0;\n var b58 = new Uint8Array(size);\n while (pbegin !== pend) {\n var carry = source[pbegin];\n var i = 0;\n for (var it1 = size - 1; (carry !== 0 || i < length) && it1 !== -1; it1--, i++) {\n carry += 256 * b58[it1] >>> 0;\n b58[it1] = carry % BASE >>> 0;\n carry = carry / BASE >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n pbegin++;\n }\n var it2 = size - length;\n while (it2 !== size && b58[it2] === 0) {\n it2++;\n }\n var str = LEADER.repeat(zeroes);\n for (; it2 < size; ++it2) {\n str += ALPHABET.charAt(b58[it2]);\n }\n return str;\n }\n function decodeUnsafe(source) {\n if (typeof source !== 'string') {\n throw new TypeError('Expected String');\n }\n if (source.length === 0) {\n return new Uint8Array();\n }\n var psz = 0;\n if (source[psz] === ' ') {\n return;\n }\n var zeroes = 0;\n var length = 0;\n while (source[psz] === LEADER) {\n zeroes++;\n psz++;\n }\n var size = (source.length - psz) * FACTOR + 1 >>> 0;\n var b256 = new Uint8Array(size);\n while (source[psz]) {\n var carry = BASE_MAP[source.charCodeAt(psz)];\n if (carry === 255) {\n return;\n }\n var i = 0;\n for (var it3 = size - 1; (carry !== 0 || i < length) && it3 !== -1; it3--, i++) {\n carry += BASE * b256[it3] >>> 0;\n b256[it3] = carry % 256 >>> 0;\n carry = carry / 256 >>> 0;\n }\n if (carry !== 0) {\n throw new Error('Non-zero carry');\n }\n length = i;\n psz++;\n }\n if (source[psz] === ' ') {\n return;\n }\n var it4 = size - length;\n while (it4 !== size && b256[it4] === 0) {\n it4++;\n }\n var vch = new Uint8Array(zeroes + (size - it4));\n var j = zeroes;\n while (it4 !== size) {\n vch[j++] = b256[it4++];\n }\n return vch;\n }\n function decode(string) {\n var buffer = decodeUnsafe(string);\n if (buffer) {\n return buffer;\n }\n throw new Error(`Non-${ name } character`);\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n };\n}\nvar src = base;\nvar _brrp__multiformats_scope_baseX = src;\nexport default _brrp__multiformats_scope_baseX;","import basex from '../../vendor/base-x.js';\nimport { coerce } from '../bytes.js';\nclass Encoder {\n constructor(name, prefix, baseEncode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n }\n encode(bytes) {\n if (bytes instanceof Uint8Array) {\n return `${ this.prefix }${ this.baseEncode(bytes) }`;\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}\nclass Decoder {\n constructor(name, prefix, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseDecode = baseDecode;\n }\n decode(text) {\n if (typeof text === 'string') {\n switch (text[0]) {\n case this.prefix: {\n return this.baseDecode(text.slice(1));\n }\n default: {\n throw Error(`Unable to decode multibase string ${ JSON.stringify(text) }, ${ this.name } decoder only supports inputs prefixed with ${ this.prefix }`);\n }\n }\n } else {\n throw Error('Can only multibase decode strings');\n }\n }\n or(decoder) {\n const decoders = {\n [this.prefix]: this,\n ...decoder.decoders || { [decoder.prefix]: decoder }\n };\n return new ComposedDecoder(decoders);\n }\n}\nclass ComposedDecoder {\n constructor(decoders) {\n this.decoders = decoders;\n }\n or(decoder) {\n const other = decoder.decoders || { [decoder.prefix]: decoder };\n return new ComposedDecoder({\n ...this.decoders,\n ...other\n });\n }\n decode(input) {\n const prefix = input[0];\n const decoder = this.decoders[prefix];\n if (decoder) {\n return decoder.decode(input);\n } else {\n throw RangeError(`Unable to decode multibase string ${ JSON.stringify(input) }, only inputs prefixed with ${ Object.keys(this.decoders) } are supported`);\n }\n }\n}\nexport class Codec {\n constructor(name, prefix, baseEncode, baseDecode) {\n this.name = name;\n this.prefix = prefix;\n this.baseEncode = baseEncode;\n this.baseDecode = baseDecode;\n this.encoder = new Encoder(name, prefix, baseEncode);\n this.decoder = new Decoder(name, prefix, baseDecode);\n }\n encode(input) {\n return this.encoder.encode(input);\n }\n decode(input) {\n return this.decoder.decode(input);\n }\n}\nexport const from = ({name, prefix, encode, decode}) => new Codec(name, prefix, encode, decode);\nexport const baseX = ({prefix, name, alphabet}) => {\n const {encode, decode} = basex(alphabet, name);\n return from({\n prefix,\n name,\n encode,\n decode: text => coerce(decode(text))\n });\n};\nconst decode = (string, alphabet, bitsPerChar, name) => {\n const codes = {};\n for (let i = 0; i < alphabet.length; ++i) {\n codes[alphabet[i]] = i;\n }\n let end = string.length;\n while (string[end - 1] === '=') {\n --end;\n }\n const out = new Uint8Array(end * bitsPerChar / 8 | 0);\n let bits = 0;\n let buffer = 0;\n let written = 0;\n for (let i = 0; i < end; ++i) {\n const value = codes[string[i]];\n if (value === undefined) {\n throw new SyntaxError(`Non-${ name } character`);\n }\n buffer = buffer << bitsPerChar | value;\n bits += bitsPerChar;\n if (bits >= 8) {\n bits -= 8;\n out[written++] = 255 & buffer >> bits;\n }\n }\n if (bits >= bitsPerChar || 255 & buffer << 8 - bits) {\n throw new SyntaxError('Unexpected end of data');\n }\n return out;\n};\nconst encode = (data, alphabet, bitsPerChar) => {\n const pad = alphabet[alphabet.length - 1] === '=';\n const mask = (1 << bitsPerChar) - 1;\n let out = '';\n let bits = 0;\n let buffer = 0;\n for (let i = 0; i < data.length; ++i) {\n buffer = buffer << 8 | data[i];\n bits += 8;\n while (bits > bitsPerChar) {\n bits -= bitsPerChar;\n out += alphabet[mask & buffer >> bits];\n }\n }\n if (bits) {\n out += alphabet[mask & buffer << bitsPerChar - bits];\n }\n if (pad) {\n while (out.length * bitsPerChar & 7) {\n out += '=';\n }\n }\n return out;\n};\nexport const rfc4648 = ({name, prefix, bitsPerChar, alphabet}) => {\n return from({\n prefix,\n name,\n encode(input) {\n return encode(input, alphabet, bitsPerChar);\n },\n decode(input) {\n return decode(input, alphabet, bitsPerChar, name);\n }\n });\n};","import { rfc4648 } from './base.js';\nexport const base16 = rfc4648({\n prefix: 'f',\n name: 'base16',\n alphabet: '0123456789abcdef',\n bitsPerChar: 4\n});\nexport const base16upper = rfc4648({\n prefix: 'F',\n name: 'base16upper',\n alphabet: '0123456789ABCDEF',\n bitsPerChar: 4\n});","import { rfc4648 } from './base.js';\nexport const base32 = rfc4648({\n prefix: 'b',\n name: 'base32',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567',\n bitsPerChar: 5\n});\nexport const base32upper = rfc4648({\n prefix: 'B',\n name: 'base32upper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567',\n bitsPerChar: 5\n});\nexport const base32pad = rfc4648({\n prefix: 'c',\n name: 'base32pad',\n alphabet: 'abcdefghijklmnopqrstuvwxyz234567=',\n bitsPerChar: 5\n});\nexport const base32padupper = rfc4648({\n prefix: 'C',\n name: 'base32padupper',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=',\n bitsPerChar: 5\n});\nexport const base32hex = rfc4648({\n prefix: 'v',\n name: 'base32hex',\n alphabet: '0123456789abcdefghijklmnopqrstuv',\n bitsPerChar: 5\n});\nexport const base32hexupper = rfc4648({\n prefix: 'V',\n name: 'base32hexupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV',\n bitsPerChar: 5\n});\nexport const base32hexpad = rfc4648({\n prefix: 't',\n name: 'base32hexpad',\n alphabet: '0123456789abcdefghijklmnopqrstuv=',\n bitsPerChar: 5\n});\nexport const base32hexpadupper = rfc4648({\n prefix: 'T',\n name: 'base32hexpadupper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUV=',\n bitsPerChar: 5\n});\nexport const base32z = rfc4648({\n prefix: 'h',\n name: 'base32z',\n alphabet: 'ybndrfg8ejkmcpqxot1uwisza345h769',\n bitsPerChar: 5\n});","import { baseX } from './base.js';\nexport const base36 = baseX({\n prefix: 'k',\n name: 'base36',\n alphabet: '0123456789abcdefghijklmnopqrstuvwxyz'\n});\nexport const base36upper = baseX({\n prefix: 'K',\n name: 'base36upper',\n alphabet: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n});","import { baseX } from './base.js';\nexport const base58btc = baseX({\n name: 'base58btc',\n prefix: 'z',\n alphabet: '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n});\nexport const base58flickr = baseX({\n name: 'base58flickr',\n prefix: 'Z',\n alphabet: '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n});","import { rfc4648 } from './base.js';\nexport const base64 = rfc4648({\n prefix: 'm',\n name: 'base64',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n bitsPerChar: 6\n});\nexport const base64pad = rfc4648({\n prefix: 'M',\n name: 'base64pad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n bitsPerChar: 6\n});\nexport const base64url = rfc4648({\n prefix: 'u',\n name: 'base64url',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n bitsPerChar: 6\n});\nexport const base64urlpad = rfc4648({\n prefix: 'U',\n name: 'base64urlpad',\n alphabet: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=',\n bitsPerChar: 6\n});","const empty = new Uint8Array(0);\nconst toHex = d => d.reduce((hex, byte) => hex + byte.toString(16).padStart(2, '0'), '');\nconst fromHex = hex => {\n const hexes = hex.match(/../g);\n return hexes ? new Uint8Array(hexes.map(b => parseInt(b, 16))) : empty;\n};\nconst equals = (aa, bb) => {\n if (aa === bb)\n return true;\n if (aa.byteLength !== bb.byteLength) {\n return false;\n }\n for (let ii = 0; ii < aa.byteLength; ii++) {\n if (aa[ii] !== bb[ii]) {\n return false;\n }\n }\n return true;\n};\nconst coerce = o => {\n if (o instanceof Uint8Array && o.constructor.name === 'Uint8Array')\n return o;\n if (o instanceof ArrayBuffer)\n return new Uint8Array(o);\n if (ArrayBuffer.isView(o)) {\n return new Uint8Array(o.buffer, o.byteOffset, o.byteLength);\n }\n throw new Error('Unknown type, must be binary type');\n};\nconst isBinary = o => o instanceof ArrayBuffer || ArrayBuffer.isView(o);\nconst fromString = str => new TextEncoder().encode(str);\nconst toString = b => new TextDecoder().decode(b);\nexport {\n equals,\n coerce,\n isBinary,\n fromHex,\n toHex,\n fromString,\n toString,\n empty\n};","import * as varint from './varint.js';\nimport * as Digest from './hashes/digest.js';\nimport { base58btc } from './bases/base58.js';\nimport { base32 } from './bases/base32.js';\nimport { coerce } from './bytes.js';\nexport class CID {\n constructor(version, code, multihash, bytes) {\n this.code = code;\n this.version = version;\n this.multihash = multihash;\n this.bytes = bytes;\n this.byteOffset = bytes.byteOffset;\n this.byteLength = bytes.byteLength;\n this.asCID = this;\n this._baseCache = new Map();\n Object.defineProperties(this, {\n byteOffset: hidden,\n byteLength: hidden,\n code: readonly,\n version: readonly,\n multihash: readonly,\n bytes: readonly,\n _baseCache: hidden,\n asCID: hidden\n });\n }\n toV0() {\n switch (this.version) {\n case 0: {\n return this;\n }\n default: {\n const {code, multihash} = this;\n if (code !== DAG_PB_CODE) {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0');\n }\n if (multihash.code !== SHA_256_CODE) {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0');\n }\n return CID.createV0(multihash);\n }\n }\n }\n toV1() {\n switch (this.version) {\n case 0: {\n const {code, digest} = this.multihash;\n const multihash = Digest.create(code, digest);\n return CID.createV1(this.code, multihash);\n }\n case 1: {\n return this;\n }\n default: {\n throw Error(`Can not convert CID version ${ this.version } to version 0. This is a bug please report`);\n }\n }\n }\n equals(other) {\n return other && this.code === other.code && this.version === other.version && Digest.equals(this.multihash, other.multihash);\n }\n toString(base) {\n const {bytes, version, _baseCache} = this;\n switch (version) {\n case 0:\n return toStringV0(bytes, _baseCache, base || base58btc.encoder);\n default:\n return toStringV1(bytes, _baseCache, base || base32.encoder);\n }\n }\n toJSON() {\n return {\n code: this.code,\n version: this.version,\n hash: this.multihash.bytes\n };\n }\n get [Symbol.toStringTag]() {\n return 'CID';\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return 'CID(' + this.toString() + ')';\n }\n static isCID(value) {\n deprecate(/^0\\.0/, IS_CID_DEPRECATION);\n return !!(value && (value[cidSymbol] || value.asCID === value));\n }\n get toBaseEncodedString() {\n throw new Error('Deprecated, use .toString()');\n }\n get codec() {\n throw new Error('\"codec\" property is deprecated, use integer \"code\" property instead');\n }\n get buffer() {\n throw new Error('Deprecated .buffer property, use .bytes to get Uint8Array instead');\n }\n get multibaseName() {\n throw new Error('\"multibaseName\" property is deprecated');\n }\n get prefix() {\n throw new Error('\"prefix\" property is deprecated');\n }\n static asCID(value) {\n if (value instanceof CID) {\n return value;\n } else if (value != null && value.asCID === value) {\n const {version, code, multihash, bytes} = value;\n return new CID(version, code, multihash, bytes || encodeCID(version, code, multihash.bytes));\n } else if (value != null && value[cidSymbol] === true) {\n const {version, multihash, code} = value;\n const digest = Digest.decode(multihash);\n return CID.create(version, code, digest);\n } else {\n return null;\n }\n }\n static create(version, code, digest) {\n if (typeof code !== 'number') {\n throw new Error('String codecs are no longer supported');\n }\n switch (version) {\n case 0: {\n if (code !== DAG_PB_CODE) {\n throw new Error(`Version 0 CID must use dag-pb (code: ${ DAG_PB_CODE }) block encoding`);\n } else {\n return new CID(version, code, digest, digest.bytes);\n }\n }\n case 1: {\n const bytes = encodeCID(version, code, digest.bytes);\n return new CID(version, code, digest, bytes);\n }\n default: {\n throw new Error('Invalid version');\n }\n }\n }\n static createV0(digest) {\n return CID.create(0, DAG_PB_CODE, digest);\n }\n static createV1(code, digest) {\n return CID.create(1, code, digest);\n }\n static decode(bytes) {\n const [cid, remainder] = CID.decodeFirst(bytes);\n if (remainder.length) {\n throw new Error('Incorrect length');\n }\n return cid;\n }\n static decodeFirst(bytes) {\n const specs = CID.inspectBytes(bytes);\n const prefixSize = specs.size - specs.multihashSize;\n const multihashBytes = coerce(bytes.subarray(prefixSize, prefixSize + specs.multihashSize));\n if (multihashBytes.byteLength !== specs.multihashSize) {\n throw new Error('Incorrect length');\n }\n const digestBytes = multihashBytes.subarray(specs.multihashSize - specs.digestSize);\n const digest = new Digest.Digest(specs.multihashCode, specs.digestSize, digestBytes, multihashBytes);\n const cid = specs.version === 0 ? CID.createV0(digest) : CID.createV1(specs.codec, digest);\n return [\n cid,\n bytes.subarray(specs.size)\n ];\n }\n static inspectBytes(initialBytes) {\n let offset = 0;\n const next = () => {\n const [i, length] = varint.decode(initialBytes.subarray(offset));\n offset += length;\n return i;\n };\n let version = next();\n let codec = DAG_PB_CODE;\n if (version === 18) {\n version = 0;\n offset = 0;\n } else if (version === 1) {\n codec = next();\n }\n if (version !== 0 && version !== 1) {\n throw new RangeError(`Invalid CID version ${ version }`);\n }\n const prefixSize = offset;\n const multihashCode = next();\n const digestSize = next();\n const size = offset + digestSize;\n const multihashSize = size - prefixSize;\n return {\n version,\n codec,\n multihashCode,\n digestSize,\n multihashSize,\n size\n };\n }\n static parse(source, base) {\n const [prefix, bytes] = parseCIDtoBytes(source, base);\n const cid = CID.decode(bytes);\n cid._baseCache.set(prefix, source);\n return cid;\n }\n}\nconst parseCIDtoBytes = (source, base) => {\n switch (source[0]) {\n case 'Q': {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(`${ base58btc.prefix }${ source }`)\n ];\n }\n case base58btc.prefix: {\n const decoder = base || base58btc;\n return [\n base58btc.prefix,\n decoder.decode(source)\n ];\n }\n case base32.prefix: {\n const decoder = base || base32;\n return [\n base32.prefix,\n decoder.decode(source)\n ];\n }\n default: {\n if (base == null) {\n throw Error('To parse non base32 or base58btc encoded CID multibase decoder must be provided');\n }\n return [\n source[0],\n base.decode(source)\n ];\n }\n }\n};\nconst toStringV0 = (bytes, cache, base) => {\n const {prefix} = base;\n if (prefix !== base58btc.prefix) {\n throw Error(`Cannot string encode V0 in ${ base.name } encoding`);\n }\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes).slice(1);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst toStringV1 = (bytes, cache, base) => {\n const {prefix} = base;\n const cid = cache.get(prefix);\n if (cid == null) {\n const cid = base.encode(bytes);\n cache.set(prefix, cid);\n return cid;\n } else {\n return cid;\n }\n};\nconst DAG_PB_CODE = 112;\nconst SHA_256_CODE = 18;\nconst encodeCID = (version, code, multihash) => {\n const codeOffset = varint.encodingLength(version);\n const hashOffset = codeOffset + varint.encodingLength(code);\n const bytes = new Uint8Array(hashOffset + multihash.byteLength);\n varint.encodeTo(version, bytes, 0);\n varint.encodeTo(code, bytes, codeOffset);\n bytes.set(multihash, hashOffset);\n return bytes;\n};\nconst cidSymbol = Symbol.for('@ipld/js-cid/CID');\nconst readonly = {\n writable: false,\n configurable: false,\n enumerable: true\n};\nconst hidden = {\n writable: false,\n enumerable: false,\n configurable: false\n};\nconst version = '0.0.0-dev';\nconst deprecate = (range, message) => {\n if (range.test(version)) {\n console.warn(message);\n } else {\n throw new Error(message);\n }\n};\nconst IS_CID_DEPRECATION = `CID.isCID(v) is deprecated and will be removed in the next major release.\nFollowing code pattern:\n\nif (CID.isCID(value)) {\n doSomethingWithCID(value)\n}\n\nIs replaced with:\n\nconst cid = CID.asCID(value)\nif (cid) {\n // Make sure to use cid instead of value\n doSomethingWithCID(cid)\n}\n`;","import {\n coerce,\n equals as equalBytes\n} from '../bytes.js';\nimport * as varint from '../varint.js';\nexport const create = (code, digest) => {\n const size = digest.byteLength;\n const sizeOffset = varint.encodingLength(code);\n const digestOffset = sizeOffset + varint.encodingLength(size);\n const bytes = new Uint8Array(digestOffset + size);\n varint.encodeTo(code, bytes, 0);\n varint.encodeTo(size, bytes, sizeOffset);\n bytes.set(digest, digestOffset);\n return new Digest(code, size, digest, bytes);\n};\nexport const decode = multihash => {\n const bytes = coerce(multihash);\n const [code, sizeOffset] = varint.decode(bytes);\n const [size, digestOffset] = varint.decode(bytes.subarray(sizeOffset));\n const digest = bytes.subarray(sizeOffset + digestOffset);\n if (digest.byteLength !== size) {\n throw new Error('Incorrect length');\n }\n return new Digest(code, size, digest, bytes);\n};\nexport const equals = (a, b) => {\n if (a === b) {\n return true;\n } else {\n return a.code === b.code && a.size === b.size && equalBytes(a.bytes, b.bytes);\n }\n};\nexport class Digest {\n constructor(code, size, digest, bytes) {\n this.code = code;\n this.size = size;\n this.digest = digest;\n this.bytes = bytes;\n }\n}","import * as Digest from './digest.js';\nexport const from = ({name, code, encode}) => new Hasher(name, code, encode);\nexport class Hasher {\n constructor(name, code, encode) {\n this.name = name;\n this.code = code;\n this.encode = encode;\n }\n async digest(input) {\n if (input instanceof Uint8Array) {\n const digest = await this.encode(input);\n return Digest.create(this.code, digest);\n } else {\n throw Error('Unknown type, must be binary type');\n }\n }\n}","import { from } from './hasher.js';\nimport { coerce } from '../bytes.js';\nexport const identity = from({\n name: 'identity',\n code: 0,\n encode: input => coerce(input)\n});","import { from } from './hasher.js';\nconst sha = name => async data => new Uint8Array(await crypto.subtle.digest(name, data));\nexport const sha256 = from({\n name: 'sha2-256',\n code: 18,\n encode: sha('SHA-256')\n});\nexport const sha512 = from({\n name: 'sha2-512',\n code: 19,\n encode: sha('SHA-512')\n});","var encode_1 = encode;\nvar MSB = 128, REST = 127, MSBALL = ~REST, INT = Math.pow(2, 31);\nfunction encode(num, out, offset) {\n out = out || [];\n offset = offset || 0;\n var oldOffset = offset;\n while (num >= INT) {\n out[offset++] = num & 255 | MSB;\n num /= 128;\n }\n while (num & MSBALL) {\n out[offset++] = num & 255 | MSB;\n num >>>= 7;\n }\n out[offset] = num | 0;\n encode.bytes = offset - oldOffset + 1;\n return out;\n}\nvar decode = read;\nvar MSB$1 = 128, REST$1 = 127;\nfunction read(buf, offset) {\n var res = 0, offset = offset || 0, shift = 0, counter = offset, b, l = buf.length;\n do {\n if (counter >= l) {\n read.bytes = 0;\n throw new RangeError('Could not decode varint');\n }\n b = buf[counter++];\n res += shift < 28 ? (b & REST$1) << shift : (b & REST$1) * Math.pow(2, shift);\n shift += 7;\n } while (b >= MSB$1);\n read.bytes = counter - offset;\n return res;\n}\nvar N1 = Math.pow(2, 7);\nvar N2 = Math.pow(2, 14);\nvar N3 = Math.pow(2, 21);\nvar N4 = Math.pow(2, 28);\nvar N5 = Math.pow(2, 35);\nvar N6 = Math.pow(2, 42);\nvar N7 = Math.pow(2, 49);\nvar N8 = Math.pow(2, 56);\nvar N9 = Math.pow(2, 63);\nvar length = function (value) {\n return value < N1 ? 1 : value < N2 ? 2 : value < N3 ? 3 : value < N4 ? 4 : value < N5 ? 5 : value < N6 ? 6 : value < N7 ? 7 : value < N8 ? 8 : value < N9 ? 9 : 10;\n};\nvar varint = {\n encode: encode_1,\n decode: decode,\n encodingLength: length\n};\nvar _brrp_varint = varint;\nexport default _brrp_varint;","import varint from '../vendor/varint.js';\nexport const decode = data => {\n const code = varint.decode(data);\n return [\n code,\n varint.decode.bytes\n ];\n};\nexport const encodeTo = (int, target, offset = 0) => {\n varint.encode(int, target, offset);\n return target;\n};\nexport const encodingLength = int => {\n return varint.encodingLength(int);\n};","let urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport { urlAlphabet }\n","import { urlAlphabet } from './url-alphabet/index.js'\nif (false) {\n if (\n typeof navigator !== 'undefined' &&\n navigator.product === 'ReactNative' &&\n typeof crypto === 'undefined'\n ) {\n throw new Error(\n 'React Native does not have a built-in secure random generator. ' +\n 'If you dont need unpredictable IDs use `nanoid/non-secure`. ' +\n 'For secure IDs, import `react-native-get-random-values` ' +\n 'before Nano ID.'\n )\n }\n if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {\n throw new Error(\n 'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +\n ' before importing Nano ID to fix IE 11 support'\n )\n }\n if (typeof crypto === 'undefined') {\n throw new Error(\n 'Your browser does not have secure random generator. ' +\n 'If you dont need unpredictable IDs, you can use nanoid/non-secure.'\n )\n }\n}\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, size, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * size) / alphabet.length)\n return () => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size) => customRandom(alphabet, size, random)\nlet nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n while (size--) {\n let byte = bytes[size] & 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte < 63) {\n id += '_'\n } else {\n id += '-'\n }\n }\n return id\n}\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","export function concat(arrays, length) {\n if (!length) {\n length = arrays.reduce((acc, curr) => acc + curr.length, 0);\n }\n const output = new Uint8Array(length);\n let offset = 0;\n for (const arr of arrays) {\n output.set(arr, offset);\n offset += arr.length;\n }\n return output;\n}","export function equals(a, b) {\n if (a === b) {\n return true;\n }\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}","import bases from './util/bases.js';\nexport function fromString(string, encoding = 'utf8') {\n const base = bases[encoding];\n if (!base) {\n throw new Error(`Unsupported encoding \"${ encoding }\"`);\n }\n return base.decoder.decode(`${ base.prefix }${ string }`);\n}","export function compare(a, b) {\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] < b[i]) {\n return -1;\n }\n if (a[i] > b[i]) {\n return 1;\n }\n }\n if (a.byteLength > b.byteLength) {\n return 1;\n }\n if (a.byteLength < b.byteLength) {\n return -1;\n }\n return 0;\n}","export function xor(a, b) {\n if (a.length !== b.length) {\n throw new Error('Inputs should have the same length');\n }\n const result = new Uint8Array(a.length);\n for (let i = 0; i < a.length; i++) {\n result[i] = a[i] ^ b[i];\n }\n return result;\n}","import bases from './util/bases.js';\nexport function toString(array, encoding = 'utf8') {\n const base = bases[encoding];\n if (!base) {\n throw new Error(`Unsupported encoding \"${ encoding }\"`);\n }\n return base.encoder.encode(array).substring(1);\n}","import { from } from './base.js';\nimport {\n fromString,\n toString\n} from '../bytes.js';\nexport const identity = from({\n prefix: '\\0',\n name: 'identity',\n encode: buf => toString(buf),\n decode: str => fromString(str)\n});","import { rfc4648 } from './base.js';\nexport const base2 = rfc4648({\n prefix: '0',\n name: 'base2',\n alphabet: '01',\n bitsPerChar: 1\n});","import { rfc4648 } from './base.js';\nexport const base8 = rfc4648({\n prefix: '7',\n name: 'base8',\n alphabet: '01234567',\n bitsPerChar: 3\n});","import { baseX } from './base.js';\nexport const base10 = baseX({\n prefix: '9',\n name: 'base10',\n alphabet: '0123456789'\n});","import { coerce } from '../bytes.js';\nconst raw = bytes => coerce(bytes);\nexport const {name, code, encode, decode} = {\n name: 'raw',\n code: 85,\n decode: raw,\n encode: raw\n};","export const {name, code, encode, decode} = {\n name: 'json',\n code: 512,\n encode: json => new TextEncoder().encode(JSON.stringify(json)),\n decode: bytes => JSON.parse(new TextDecoder().decode(bytes))\n};","import * as identityBase from './bases/identity.js';\nimport * as base2 from './bases/base2.js';\nimport * as base8 from './bases/base8.js';\nimport * as base10 from './bases/base10.js';\nimport * as base16 from './bases/base16.js';\nimport * as base32 from './bases/base32.js';\nimport * as base36 from './bases/base36.js';\nimport * as base58 from './bases/base58.js';\nimport * as base64 from './bases/base64.js';\nimport * as sha2 from './hashes/sha2.js';\nimport * as identity from './hashes/identity.js';\nimport * as raw from './codecs/raw.js';\nimport * as json from './codecs/json.js';\nimport {\n CID,\n hasher,\n digest,\n varint,\n bytes\n} from './index.js';\nconst bases = {\n ...identityBase,\n ...base2,\n ...base8,\n ...base10,\n ...base16,\n ...base32,\n ...base36,\n ...base58,\n ...base64\n};\nconst hashes = {\n ...sha2,\n ...identity\n};\nconst codecs = {\n raw,\n json\n};\nexport {\n CID,\n hasher,\n digest,\n varint,\n bytes,\n hashes,\n bases,\n codecs\n};","import { bases } from 'multiformats/basics';\nfunction createCodec(name, prefix, encode, decode) {\n return {\n name,\n prefix,\n encoder: {\n name,\n prefix,\n encode\n },\n decoder: { decode }\n };\n}\nconst string = createCodec('utf8', 'u', buf => {\n const decoder = new TextDecoder('utf8');\n return 'u' + decoder.decode(buf);\n}, str => {\n const encoder = new TextEncoder();\n return encoder.encode(str.substring(1));\n});\nconst ascii = createCodec('ascii', 'a', buf => {\n let string = 'a';\n for (let i = 0; i < buf.length; i++) {\n string += String.fromCharCode(buf[i]);\n }\n return string;\n}, str => {\n str = str.substring(1);\n const buf = new Uint8Array(str.length);\n for (let i = 0; i < str.length; i++) {\n buf[i] = str.charCodeAt(i);\n }\n return buf;\n});\nconst BASES = {\n utf8: string,\n 'utf-8': string,\n hex: bases.base16,\n latin1: ascii,\n ascii: ascii,\n binary: ascii,\n ...bases\n};\nexport default BASES;","// 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","__webpack_require__.amdO = {};","// 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};","import { multiaddr } from \"multiaddr\";\nimport PeerId from \"peer-id\";\nimport { Waku } from \"js-waku\";\n\nfunction help(): string[] {\n return [\n \"/nick <nickname>: set a new nickname\",\n \"/info: some information about the node\",\n \"/connect <Multiaddr>: connect to the given peer\",\n \"/help: Display this help\",\n ];\n}\n\nfunction nick(\n nick: string | undefined,\n setNick: (nick: string) => void\n): string[] {\n if (!nick) {\n return [\"No nick provided\"];\n }\n setNick(nick);\n return [`New nick: ${nick}`];\n}\n\nfunction info(waku: Waku | undefined): string[] {\n if (!waku) {\n return [\"Waku node is starting\"];\n }\n return [`PeerId: ${waku.libp2p.peerId.toB58String()}`];\n}\n\nfunction connect(peer: string | undefined, waku: Waku | undefined): string[] {\n if (!waku) {\n return [\"Waku node is starting\"];\n }\n if (!peer) {\n return [\"No peer provided\"];\n }\n try {\n const peerMultiaddr = multiaddr(peer);\n const peerId = peerMultiaddr.getPeerId();\n if (!peerId) {\n return [\"Peer Id needed to dial\"];\n }\n waku.addPeerToAddressBook(PeerId.createFromB58String(peerId), [\n peerMultiaddr,\n ]);\n return [\n `${peerId}: ${peerMultiaddr.toString()} added to address book, autodial in progress`,\n ];\n } catch (e) {\n return [\"Invalid multiaddr: \" + e];\n }\n}\n\nasync function peers(waku: Waku | undefined): Promise<string[]> {\n if (!waku) {\n return [\"Waku node is starting\"];\n }\n let response: string[] = [];\n const peers = [];\n\n for await (const peer of waku.libp2p.peerStore.getPeers()) {\n peers.push(peer);\n }\n Array.from(peers).forEach((peer) => {\n response.push(peer.id.toB58String() + \":\");\n let addresses = \" addresses: [\";\n peer.addresses.forEach(({ multiaddr }) => {\n addresses += \" \" + multiaddr.toString() + \",\";\n });\n addresses = addresses.replace(/,$/, \"\");\n addresses += \"]\";\n response.push(addresses);\n let protocols = \" protocols: [\";\n protocols += peer.protocols;\n protocols += \"]\";\n response.push(protocols);\n });\n if (response.length === 0) {\n response.push(\"Not connected to any peer.\");\n }\n return response;\n}\n\nfunction connections(waku: Waku | undefined): string[] {\n if (!waku) {\n return [\"Waku node is starting\"];\n }\n let response: string[] = [];\n waku.libp2p.connections.forEach(\n (\n connections: import(\"libp2p-interfaces/src/connection/connection\")[],\n peerId\n ) => {\n response.push(peerId + \":\");\n let strConnections = \" connections: [\";\n connections.forEach((connection) => {\n strConnections += JSON.stringify(connection.stat);\n strConnections += \"; \" + JSON.stringify(connection.streams);\n });\n strConnections += \"]\";\n response.push(strConnections);\n }\n );\n if (response.length === 0) {\n response.push(\"Not connected to any peer.\");\n }\n return response;\n}\n\nexport default async function handleCommand(\n input: string,\n waku: Waku | undefined,\n setNick: (nick: string) => void\n): Promise<{ command: string; response: string[] }> {\n let response: string[] = [];\n const args = parseInput(input);\n const command = args.shift()!;\n switch (command) {\n case \"/help\":\n help().map((str) => response.push(str));\n break;\n case \"/nick\":\n nick(args.shift(), setNick).map((str) => response.push(str));\n break;\n case \"/info\":\n info(waku).map((str) => response.push(str));\n break;\n case \"/connect\":\n connect(args.shift(), waku).map((str) => response.push(str));\n break;\n case \"/peers\":\n (await peers(waku)).map((str) => response.push(str));\n break;\n case \"/connections\":\n connections(waku).map((str) => response.push(str));\n break;\n default:\n response.push(`Unknown Command '${command}'`);\n }\n return { command, response };\n}\n\nexport function parseInput(input: string): string[] {\n const clean = input.trim().replaceAll(/\\s\\s+/g, \" \");\n return clean.split(\" \");\n}\n","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","function memoize(fn) {\n var cache = Object.create(null);\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default isPropValid;\n","/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n// $FlowFixMe\nfunction sheetForTag(tag) {\n if (tag.sheet) {\n // $FlowFixMe\n return tag.sheet;\n } // this weirdness brought to you by firefox\n\n /* istanbul ignore next */\n\n\n for (var i = 0; i < document.styleSheets.length; i++) {\n if (document.styleSheets[i].ownerNode === tag) {\n // $FlowFixMe\n return document.styleSheets[i];\n }\n }\n}\n\nfunction createStyleElement(options) {\n var tag = document.createElement('style');\n tag.setAttribute('data-emotion', options.key);\n\n if (options.nonce !== undefined) {\n tag.setAttribute('nonce', options.nonce);\n }\n\n tag.appendChild(document.createTextNode(''));\n tag.setAttribute('data-s', '');\n return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n function StyleSheet(options) {\n var _this = this;\n\n this._insertTag = function (tag) {\n var before;\n\n if (_this.tags.length === 0) {\n if (_this.insertionPoint) {\n before = _this.insertionPoint.nextSibling;\n } else if (_this.prepend) {\n before = _this.container.firstChild;\n } else {\n before = _this.before;\n }\n } else {\n before = _this.tags[_this.tags.length - 1].nextSibling;\n }\n\n _this.container.insertBefore(tag, before);\n\n _this.tags.push(tag);\n };\n\n this.isSpeedy = options.speedy === undefined ? process.env.NODE_ENV === 'production' : options.speedy;\n this.tags = [];\n this.ctr = 0;\n this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n this.key = options.key;\n this.container = options.container;\n this.prepend = options.prepend;\n this.insertionPoint = options.insertionPoint;\n this.before = null;\n }\n\n var _proto = StyleSheet.prototype;\n\n _proto.hydrate = function hydrate(nodes) {\n nodes.forEach(this._insertTag);\n };\n\n _proto.insert = function insert(rule) {\n // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n // it's 1 in dev because we insert source maps that map a single rule to a location\n // and you can only have one source map per style tag\n if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n this._insertTag(createStyleElement(this));\n }\n\n var tag = this.tags[this.tags.length - 1];\n\n if (process.env.NODE_ENV !== 'production') {\n var isImportRule = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105;\n\n if (isImportRule && this._alreadyInsertedOrderInsensitiveRule) {\n // this would only cause problem in speedy mode\n // but we don't want enabling speedy to affect the observable behavior\n // so we report this error at all times\n console.error(\"You're attempting to insert the following rule:\\n\" + rule + '\\n\\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules.');\n }\n this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule;\n }\n\n if (this.isSpeedy) {\n var sheet = sheetForTag(tag);\n\n try {\n // this is the ultrafast version, works across browsers\n // the big drawback is that the css won't be editable in devtools\n sheet.insertRule(rule, sheet.cssRules.length);\n } catch (e) {\n if (process.env.NODE_ENV !== 'production' && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear){/.test(rule)) {\n console.error(\"There was a problem inserting the following rule: \\\"\" + rule + \"\\\"\", e);\n }\n }\n } else {\n tag.appendChild(document.createTextNode(rule));\n }\n\n this.ctr++;\n };\n\n _proto.flush = function flush() {\n // $FlowFixMe\n this.tags.forEach(function (tag) {\n return tag.parentNode && tag.parentNode.removeChild(tag);\n });\n this.tags = [];\n this.ctr = 0;\n\n if (process.env.NODE_ENV !== 'production') {\n this._alreadyInsertedOrderInsensitiveRule = false;\n }\n };\n\n return StyleSheet;\n}();\n\nexport { StyleSheet };\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3)\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\n","import {IMPORT, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT} from './Enum.js'\nimport {hash, charat, strlen, indexof, replace} from './Utility.js'\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {string}\n */\nexport function prefix (value, length) {\n\tswitch (hash(value, length)) {\n\t\t// color-adjust\n\t\tcase 5103:\n\t\t\treturn WEBKIT + 'print-' + value + value\n\t\t// animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\t\tcase 5737: case 4201: case 3177: case 3433: case 1641: case 4457: case 2921:\n\t\t// text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\t\tcase 5572: case 6356: case 5844: case 3191: case 6645: case 3005:\n\t\t// mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\t\tcase 6391: case 5879: case 5623: case 6135: case 4599: case 4855:\n\t\t// background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\t\tcase 4215: case 6389: case 5109: case 5365: case 5621: case 3829:\n\t\t\treturn WEBKIT + value + value\n\t\t// appearance, user-select, transform, hyphens, text-size-adjust\n\t\tcase 5349: case 4246: case 4810: case 6968: case 2756:\n\t\t\treturn WEBKIT + value + MOZ + value + MS + value + value\n\t\t// flex, flex-direction\n\t\tcase 6828: case 4268:\n\t\t\treturn WEBKIT + value + MS + value + value\n\t\t// order\n\t\tcase 6165:\n\t\t\treturn WEBKIT + value + MS + 'flex-' + value + value\n\t\t// align-items\n\t\tcase 5187:\n\t\t\treturn WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value\n\t\t// align-self\n\t\tcase 5443:\n\t\t\treturn WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value\n\t\t// align-content\n\t\tcase 4675:\n\t\t\treturn WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value\n\t\t// flex-shrink\n\t\tcase 5548:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value\n\t\t// flex-basis\n\t\tcase 5292:\n\t\t\treturn WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value\n\t\t// flex-grow\n\t\tcase 6060:\n\t\t\treturn WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value\n\t\t// transition\n\t\tcase 4554:\n\t\t\treturn WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value\n\t\t// cursor\n\t\tcase 6187:\n\t\t\treturn replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value\n\t\t// background, background-image\n\t\tcase 5495: case 3959:\n\t\t\treturn replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1')\n\t\t// justify-content\n\t\tcase 4968:\n\t\t\treturn replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value\n\t\t// (margin|padding)-inline-(start|end)\n\t\tcase 4095: case 3583: case 4068: case 2532:\n\t\t\treturn replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value\n\t\t// (min|max)?(width|height|inline-size|block-size)\n\t\tcase 8116: case 7059: case 5753: case 5535:\n\t\tcase 5445: case 5701: case 4933: case 4677:\n\t\tcase 5533: case 5789: case 5021: case 4765:\n\t\t\t// stretch, max-content, min-content, fill-available\n\t\t\tif (strlen(value) - 1 - length > 6)\n\t\t\t\tswitch (charat(value, length + 1)) {\n\t\t\t\t\t// (m)ax-content, (m)in-content\n\t\t\t\t\tcase 109:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (charat(value, length + 4) !== 45)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t// (f)ill-available, (f)it-content\n\t\t\t\t\tcase 102:\n\t\t\t\t\t\treturn replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value\n\t\t\t\t\t// (s)tretch\n\t\t\t\t\tcase 115:\n\t\t\t\t\t\treturn ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value\n\t\t\t\t}\n\t\t\tbreak\n\t\t// position: sticky\n\t\tcase 4949:\n\t\t\t// (s)ticky?\n\t\t\tif (charat(value, length + 1) !== 115)\n\t\t\t\tbreak\n\t\t// display: (flex|inline-flex)\n\t\tcase 6444:\n\t\t\tswitch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n\t\t\t\t// stic(k)y\n\t\t\t\tcase 107:\n\t\t\t\t\treturn replace(value, ':', ':' + WEBKIT) + value\n\t\t\t\t// (inline-)?fl(e)x\n\t\t\t\tcase 101:\n\t\t\t\t\treturn replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value\n\t\t\t}\n\t\t\tbreak\n\t\t// writing-mode\n\t\tcase 5936:\n\t\t\tswitch (charat(value, length + 11)) {\n\t\t\t\t// vertical-l(r)\n\t\t\t\tcase 114:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value\n\t\t\t\t// vertical-r(l)\n\t\t\t\tcase 108:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value\n\t\t\t\t// horizontal(-)tb\n\t\t\t\tcase 45:\n\t\t\t\t\treturn WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value\n\t\t\t}\n\n\t\t\treturn WEBKIT + value + MS + value + value\n\t}\n\n\treturn value\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && characters.charCodeAt(length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset:\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule) {\n\t\t\t\t\t\t\t\t\t// d m s\n\t\t\t\t\t\t\t\t\tcase 100: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, stringify, COMMENT, rulesheet, middleware, prefixer, serialize, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar last = function last(arr) {\n return arr.length ? arr[arr.length - 1] : null;\n}; // based on https://github.com/thysultan/stylis.js/blob/e6843c373ebcbbfade25ebcc23f540ed8508da0a/src/Tokenizer.js#L239-L244\n\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n var previous = 0;\n var character = 0;\n\n while (true) {\n previous = character;\n character = peek(); // &\\f\n\n if (previous === 38 && character === 12) {\n points[index] = 1;\n }\n\n if (token(character)) {\n break;\n }\n\n next();\n }\n\n return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n // pretend we've started with a comma\n var index = -1;\n var character = 44;\n\n do {\n switch (token(character)) {\n case 0:\n // &\\f\n if (character === 38 && peek() === 12) {\n // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n // and when it should just concatenate the outer and inner selectors\n // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n points[index] = 1;\n }\n\n parsed[index] += identifierWithPointTracking(position - 1, points, index);\n break;\n\n case 2:\n parsed[index] += delimit(character);\n break;\n\n case 4:\n // comma\n if (character === 44) {\n // colon\n parsed[++index] = peek() === 58 ? '&\\f' : '';\n points[index] = parsed[index].length;\n break;\n }\n\n // fallthrough\n\n default:\n parsed[index] += from(character);\n }\n } while (character = next());\n\n return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n // negative .length indicates that this rule has been already prefixed\n element.length < 1) {\n return;\n }\n\n var value = element.value,\n parent = element.parent;\n var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n while (parent.type !== 'rule') {\n parent = parent.parent;\n if (!parent) return;\n } // short-circuit for the simplest case\n\n\n if (element.props.length === 1 && value.charCodeAt(0) !== 58\n /* colon */\n && !fixedElements.get(parent)) {\n return;\n } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n if (isImplicitRule) {\n return;\n }\n\n fixedElements.set(element, true);\n var points = [];\n var rules = getRules(value, points);\n var parentRules = parent.props;\n\n for (var i = 0, k = 0; i < rules.length; i++) {\n for (var j = 0; j < parentRules.length; j++, k++) {\n element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n }\n }\n};\nvar removeLabel = function removeLabel(element) {\n if (element.type === 'decl') {\n var value = element.value;\n\n if ( // charcode for l\n value.charCodeAt(0) === 108 && // charcode for b\n value.charCodeAt(2) === 98) {\n // this ignores label\n element[\"return\"] = '';\n element.value = '';\n }\n }\n};\nvar ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';\n\nvar isIgnoringComment = function isIgnoringComment(element) {\n return !!element && element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;\n};\n\nvar createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {\n return function (element, index, children) {\n if (element.type !== 'rule') return;\n var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);\n\n if (unsafePseudoClasses && cache.compat !== true) {\n var prevElement = index > 0 ? children[index - 1] : null;\n\n if (prevElement && isIgnoringComment(last(prevElement.children))) {\n return;\n }\n\n unsafePseudoClasses.forEach(function (unsafePseudoClass) {\n console.error(\"The pseudo class \\\"\" + unsafePseudoClass + \"\\\" is potentially unsafe when doing server-side rendering. Try changing it to \\\"\" + unsafePseudoClass.split('-child')[0] + \"-of-type\\\".\");\n });\n }\n };\n};\n\nvar isImportRule = function isImportRule(element) {\n return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;\n};\n\nvar isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {\n for (var i = index - 1; i >= 0; i--) {\n if (!isImportRule(children[i])) {\n return true;\n }\n }\n\n return false;\n}; // use this to remove incorrect elements from further processing\n// so they don't get handed to the `sheet` (or anything else)\n// as that could potentially lead to additional logs which in turn could be overhelming to the user\n\n\nvar nullifyElement = function nullifyElement(element) {\n element.type = '';\n element.value = '';\n element[\"return\"] = '';\n element.children = '';\n element.props = '';\n};\n\nvar incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {\n if (!isImportRule(element)) {\n return;\n }\n\n if (element.parent) {\n console.error(\"`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.\");\n nullifyElement(element);\n } else if (isPrependedWithRegularRules(index, children)) {\n console.error(\"`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.\");\n nullifyElement(element);\n }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n var key = options.key;\n\n if (process.env.NODE_ENV !== 'production' && !key) {\n throw new Error(\"You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\\n\" + \"If multiple caches share the same key they might \\\"fight\\\" for each other's style elements.\");\n }\n\n if ( key === 'css') {\n var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n // note this very very intentionally targets all style elements regardless of the key to ensure\n // that creating a cache works inside of render of a React component\n\n Array.prototype.forEach.call(ssrStyles, function (node) {\n // we want to only move elements which have a space in the data-emotion attribute value\n // because that indicates that it is an Emotion 11 server-side rendered style elements\n // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n // will not result in the Emotion 10 styles being destroyed\n var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n if (dataEmotionAttribute.indexOf(' ') === -1) {\n return;\n }\n document.head.appendChild(node);\n node.setAttribute('data-s', '');\n });\n }\n\n var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe\n if (/[^a-z-]/.test(key)) {\n throw new Error(\"Emotion key must only contain lower case alphabetical characters and - but \\\"\" + key + \"\\\" was passed\");\n }\n }\n\n var inserted = {}; // $FlowFixMe\n\n var container;\n var nodesToHydrate = [];\n\n {\n container = options.container || document.head;\n Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n var attrib = node.getAttribute(\"data-emotion\").split(' '); // $FlowFixMe\n\n for (var i = 1; i < attrib.length; i++) {\n inserted[attrib[i]] = true;\n }\n\n nodesToHydrate.push(node);\n });\n }\n\n var _insert;\n\n var omnipresentPlugins = [compat, removeLabel];\n\n if (process.env.NODE_ENV !== 'production') {\n omnipresentPlugins.push(createUnsafeSelectorsAlarm({\n get compat() {\n return cache.compat;\n }\n\n }), incorrectImportAlarm);\n }\n\n {\n var currentSheet;\n var finalizingPlugins = [stringify, process.env.NODE_ENV !== 'production' ? function (element) {\n if (!element.root) {\n if (element[\"return\"]) {\n currentSheet.insert(element[\"return\"]);\n } else if (element.value && element.type !== COMMENT) {\n // insert empty rule in non-production environments\n // so @emotion/jest can grab `key` from the (JS)DOM for caches without any rules inserted yet\n currentSheet.insert(element.value + \"{}\");\n }\n }\n } : rulesheet(function (rule) {\n currentSheet.insert(rule);\n })];\n var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n var stylis = function stylis(styles) {\n return serialize(compile(styles), serializer);\n };\n\n _insert = function insert(selector, serialized, sheet, shouldCache) {\n currentSheet = sheet;\n\n if (process.env.NODE_ENV !== 'production' && serialized.map !== undefined) {\n currentSheet = {\n insert: function insert(rule) {\n sheet.insert(rule + serialized.map);\n }\n };\n }\n\n stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n if (shouldCache) {\n cache.inserted[serialized.name] = true;\n }\n };\n }\n\n var cache = {\n key: key,\n sheet: new StyleSheet({\n key: key,\n container: container,\n nonce: options.nonce,\n speedy: options.speedy,\n prepend: options.prepend,\n insertionPoint: options.insertionPoint\n }),\n nonce: options.nonce,\n inserted: inserted,\n registered: {},\n insert: _insert\n };\n cache.sheet.hydrate(nodesToHydrate);\n return cache;\n};\n\nexport default createCache;\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length)\n\t\t\t\t\tbreak\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","var weakMemoize = function weakMemoize(func) {\n // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps\n var cache = new WeakMap();\n return function (arg) {\n if (cache.has(arg)) {\n // $FlowFixMe\n return cache.get(arg);\n }\n\n var ret = func(arg);\n cache.set(arg, ret);\n return ret;\n };\n};\n\nexport default weakMemoize;\n","var isBrowser = \"object\" !== 'undefined';\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n var rawClassName = '';\n classNames.split(' ').forEach(function (className) {\n if (registered[className] !== undefined) {\n registeredStyles.push(registered[className] + \";\");\n } else {\n rawClassName += className + \" \";\n }\n });\n return rawClassName;\n}\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n var className = cache.key + \"-\" + serialized.name;\n\n if ( // we only need to add the styles to the registered cache if the\n // class name could be used further down\n // the tree but if it's a string tag, we know it won't\n // so we don't have to add it to registered cache.\n // this improves memory usage since we can avoid storing the whole style string\n (isStringTag === false || // we need to always store it if we're in compat mode and\n // in node since emotion-server relies on whether a style is in\n // the registered cache to know whether a style is global or not\n // also, note that this check will be dead code eliminated in the browser\n isBrowser === false ) && cache.registered[className] === undefined) {\n cache.registered[className] = serialized.styles;\n }\n\n if (cache.inserted[serialized.name] === undefined) {\n var current = serialized;\n\n do {\n var maybeStyles = cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n current = current.next;\n } while (current !== undefined);\n }\n};\n\nexport { getRegisteredStyles, insertStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n // 'm' and 'r' are mixing constants generated offline.\n // They're not really 'magic', they just happen to work well.\n // const m = 0x5bd1e995;\n // const r = 24;\n // Initialize the hash\n var h = 0; // Mix 4 bytes at a time into the hash\n\n var k,\n i = 0,\n len = str.length;\n\n for (; len >= 4; ++i, len -= 4) {\n k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n k =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n k ^=\n /* k >>> r: */\n k >>> 24;\n h =\n /* Math.imul(k, m): */\n (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Handle the last few bytes of the input array\n\n\n switch (len) {\n case 3:\n h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n case 2:\n h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n case 1:\n h ^= str.charCodeAt(i) & 0xff;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n } // Do a few final mixes of the hash to ensure the last few\n // bytes are well-incorporated.\n\n\n h ^= h >>> 13;\n h =\n /* Math.imul(h, m): */\n (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport default murmur2;\n","var unitlessKeys = {\n animationIterationCount: 1,\n borderImageOutset: 1,\n borderImageSlice: 1,\n borderImageWidth: 1,\n boxFlex: 1,\n boxFlexGroup: 1,\n boxOrdinalGroup: 1,\n columnCount: 1,\n columns: 1,\n flex: 1,\n flexGrow: 1,\n flexPositive: 1,\n flexShrink: 1,\n flexNegative: 1,\n flexOrder: 1,\n gridRow: 1,\n gridRowEnd: 1,\n gridRowSpan: 1,\n gridRowStart: 1,\n gridColumn: 1,\n gridColumnEnd: 1,\n gridColumnSpan: 1,\n gridColumnStart: 1,\n msGridRow: 1,\n msGridRowSpan: 1,\n msGridColumn: 1,\n msGridColumnSpan: 1,\n fontWeight: 1,\n lineHeight: 1,\n opacity: 1,\n order: 1,\n orphans: 1,\n tabSize: 1,\n widows: 1,\n zIndex: 1,\n zoom: 1,\n WebkitLineClamp: 1,\n // SVG-related properties\n fillOpacity: 1,\n floodOpacity: 1,\n stopOpacity: 1,\n strokeDasharray: 1,\n strokeDashoffset: 1,\n strokeMiterlimit: 1,\n strokeOpacity: 1,\n strokeWidth: 1\n};\n\nexport default unitlessKeys;\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\nvar UNDEFINED_AS_OBJECT_KEY_ERROR = \"You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).\";\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n switch (key) {\n case 'animation':\n case 'animationName':\n {\n if (typeof value === 'string') {\n return value.replace(animationRegex, function (match, p1, p2) {\n cursor = {\n name: p1,\n styles: p2,\n next: cursor\n };\n return p1;\n });\n }\n }\n }\n\n if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n return value + 'px';\n }\n\n return value;\n};\n\nif (process.env.NODE_ENV !== 'production') {\n var contentValuePattern = /(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\\(|(no-)?(open|close)-quote/;\n var contentValues = ['normal', 'none', 'initial', 'inherit', 'unset'];\n var oldProcessStyleValue = processStyleValue;\n var msPattern = /^-ms-/;\n var hyphenPattern = /-(.)/g;\n var hyphenatedCache = {};\n\n processStyleValue = function processStyleValue(key, value) {\n if (key === 'content') {\n if (typeof value !== 'string' || contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || value.charAt(0) !== '\"' && value.charAt(0) !== \"'\")) {\n throw new Error(\"You seem to be using a value for 'content' without quotes, try replacing it with `content: '\\\"\" + value + \"\\\"'`\");\n }\n }\n\n var processed = oldProcessStyleValue(key, value);\n\n if (processed !== '' && !isCustomProperty(key) && key.indexOf('-') !== -1 && hyphenatedCache[key] === undefined) {\n hyphenatedCache[key] = true;\n console.error(\"Using kebab-case for css properties in objects is not supported. Did you mean \" + key.replace(msPattern, 'ms-').replace(hyphenPattern, function (str, _char) {\n return _char.toUpperCase();\n }) + \"?\");\n }\n\n return processed;\n };\n}\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n if (interpolation == null) {\n return '';\n }\n\n if (interpolation.__emotion_styles !== undefined) {\n if (process.env.NODE_ENV !== 'production' && interpolation.toString() === 'NO_COMPONENT_SELECTOR') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n return interpolation;\n }\n\n switch (typeof interpolation) {\n case 'boolean':\n {\n return '';\n }\n\n case 'object':\n {\n if (interpolation.anim === 1) {\n cursor = {\n name: interpolation.name,\n styles: interpolation.styles,\n next: cursor\n };\n return interpolation.name;\n }\n\n if (interpolation.styles !== undefined) {\n var next = interpolation.next;\n\n if (next !== undefined) {\n // not the most efficient thing ever but this is a pretty rare case\n // and there will be very few iterations of this generally\n while (next !== undefined) {\n cursor = {\n name: next.name,\n styles: next.styles,\n next: cursor\n };\n next = next.next;\n }\n }\n\n var styles = interpolation.styles + \";\";\n\n if (process.env.NODE_ENV !== 'production' && interpolation.map !== undefined) {\n styles += interpolation.map;\n }\n\n return styles;\n }\n\n return createStringFromObject(mergedProps, registered, interpolation);\n }\n\n case 'function':\n {\n if (mergedProps !== undefined) {\n var previousCursor = cursor;\n var result = interpolation(mergedProps);\n cursor = previousCursor;\n return handleInterpolation(mergedProps, registered, result);\n } else if (process.env.NODE_ENV !== 'production') {\n console.error('Functions that are interpolated in css calls will be stringified.\\n' + 'If you want to have a css call based on props, create a function that returns a css call like this\\n' + 'let dynamicStyle = (props) => css`color: ${props.color}`\\n' + 'It can be called directly with props or interpolated in a styled call like this\\n' + \"let SomeComponent = styled('div')`${dynamicStyle}`\");\n }\n\n break;\n }\n\n case 'string':\n if (process.env.NODE_ENV !== 'production') {\n var matched = [];\n var replaced = interpolation.replace(animationRegex, function (match, p1, p2) {\n var fakeVarName = \"animation\" + matched.length;\n matched.push(\"const \" + fakeVarName + \" = keyframes`\" + p2.replace(/^@keyframes animation-\\w+/, '') + \"`\");\n return \"${\" + fakeVarName + \"}\";\n });\n\n if (matched.length) {\n console.error('`keyframes` output got interpolated into plain string, please wrap it with `css`.\\n\\n' + 'Instead of doing this:\\n\\n' + [].concat(matched, [\"`\" + replaced + \"`\"]).join('\\n') + '\\n\\nYou should wrap it with `css` like this:\\n\\n' + (\"css`\" + replaced + \"`\"));\n }\n }\n\n break;\n } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n if (registered == null) {\n return interpolation;\n }\n\n var cached = registered[interpolation];\n return cached !== undefined ? cached : interpolation;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n var string = '';\n\n if (Array.isArray(obj)) {\n for (var i = 0; i < obj.length; i++) {\n string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n }\n } else {\n for (var _key in obj) {\n var value = obj[_key];\n\n if (typeof value !== 'object') {\n if (registered != null && registered[value] !== undefined) {\n string += _key + \"{\" + registered[value] + \"}\";\n } else if (isProcessableValue(value)) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value) + \";\";\n }\n } else {\n if (_key === 'NO_COMPONENT_SELECTOR' && process.env.NODE_ENV !== 'production') {\n throw new Error('Component selectors can only be used in conjunction with @emotion/babel-plugin.');\n }\n\n if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n for (var _i = 0; _i < value.length; _i++) {\n if (isProcessableValue(value[_i])) {\n string += processStyleName(_key) + \":\" + processStyleValue(_key, value[_i]) + \";\";\n }\n }\n } else {\n var interpolated = handleInterpolation(mergedProps, registered, value);\n\n switch (_key) {\n case 'animation':\n case 'animationName':\n {\n string += processStyleName(_key) + \":\" + interpolated + \";\";\n break;\n }\n\n default:\n {\n if (process.env.NODE_ENV !== 'production' && _key === 'undefined') {\n console.error(UNDEFINED_AS_OBJECT_KEY_ERROR);\n }\n\n string += _key + \"{\" + interpolated + \"}\";\n }\n }\n }\n }\n }\n }\n\n return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;\\n{]+)\\s*(;|$)/g;\nvar sourceMapPattern;\n\nif (process.env.NODE_ENV !== 'production') {\n sourceMapPattern = /\\/\\*#\\ssourceMappingURL=data:application\\/json;\\S+\\s+\\*\\//g;\n} // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\n\nvar cursor;\nvar serializeStyles = function serializeStyles(args, registered, mergedProps) {\n if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n return args[0];\n }\n\n var stringMode = true;\n var styles = '';\n cursor = undefined;\n var strings = args[0];\n\n if (strings == null || strings.raw === undefined) {\n stringMode = false;\n styles += handleInterpolation(mergedProps, registered, strings);\n } else {\n if (process.env.NODE_ENV !== 'production' && strings[0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[0];\n } // we start at 1 since we've already handled the first arg\n\n\n for (var i = 1; i < args.length; i++) {\n styles += handleInterpolation(mergedProps, registered, args[i]);\n\n if (stringMode) {\n if (process.env.NODE_ENV !== 'production' && strings[i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles += strings[i];\n }\n }\n\n var sourceMap;\n\n if (process.env.NODE_ENV !== 'production') {\n styles = styles.replace(sourceMapPattern, function (match) {\n sourceMap = match;\n return '';\n });\n } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n labelPattern.lastIndex = 0;\n var identifierName = '';\n var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n while ((match = labelPattern.exec(styles)) !== null) {\n identifierName += '-' + // $FlowFixMe we know it's not null\n match[1];\n }\n\n var name = hashString(styles) + identifierName;\n\n if (process.env.NODE_ENV !== 'production') {\n // $FlowFixMe SerializedStyles type doesn't have toString property (and we don't want to add it)\n return {\n name: name,\n styles: styles,\n map: sourceMap,\n next: cursor,\n toString: function toString() {\n return \"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).\";\n }\n };\n }\n\n return {\n name: name,\n styles: styles,\n next: cursor\n };\n};\n\nexport { serializeStyles };\n","import { createContext, useContext, forwardRef, createElement, Fragment } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nvar EmotionCacheContext = /* #__PURE__ */createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n key: 'css'\n}) : null);\n\nif (process.env.NODE_ENV !== 'production') {\n EmotionCacheContext.displayName = 'EmotionCacheContext';\n}\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n // $FlowFixMe\n return /*#__PURE__*/forwardRef(function (props, ref) {\n // the cache will never be null in the browser\n var cache = useContext(EmotionCacheContext);\n return func(props, cache, ref);\n });\n};\n\nvar ThemeContext = /* #__PURE__ */createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n ThemeContext.displayName = 'EmotionThemeContext';\n}\n\nvar useTheme = function useTheme() {\n return useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n if (typeof theme === 'function') {\n var mergedTheme = theme(outerTheme);\n\n if (process.env.NODE_ENV !== 'production' && (mergedTheme == null || typeof mergedTheme !== 'object' || Array.isArray(mergedTheme))) {\n throw new Error('[ThemeProvider] Please return an object from your theme function, i.e. theme={() => ({})}!');\n }\n\n return mergedTheme;\n }\n\n if (process.env.NODE_ENV !== 'production' && (theme == null || typeof theme !== 'object' || Array.isArray(theme))) {\n throw new Error('[ThemeProvider] Please make your theme prop a plain object');\n }\n\n return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n return weakMemoize(function (theme) {\n return getTheme(outerTheme, theme);\n });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n var theme = useContext(ThemeContext);\n\n if (props.theme !== theme) {\n theme = createCacheWithTheme(theme)(props.theme);\n }\n\n return /*#__PURE__*/createElement(ThemeContext.Provider, {\n value: theme\n }, props.children);\n};\nfunction withTheme(Component) {\n var componentName = Component.displayName || Component.name || 'Component';\n\n var render = function render(props, ref) {\n var theme = useContext(ThemeContext);\n return /*#__PURE__*/createElement(Component, _extends({\n theme: theme,\n ref: ref\n }, props));\n }; // $FlowFixMe\n\n\n var WithTheme = /*#__PURE__*/forwardRef(render);\n WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {\n // V8\n var match = /^\\s+at\\s+([A-Za-z0-9$.]+)\\s/.exec(line);\n\n if (match) {\n // The match may be something like 'Object.createEmotionProps'\n var parts = match[1].split('.');\n return parts[parts.length - 1];\n } // Safari / Firefox\n\n\n match = /^([A-Za-z0-9$.]+)@/.exec(line);\n if (match) return match[1];\n return undefined;\n};\n\nvar internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS\n// identifiers, thus we only need to replace what is a valid character for JS,\n// but not for CSS.\n\nvar sanitizeIdentifier = function sanitizeIdentifier(identifier) {\n return identifier.replace(/\\$/g, '-');\n};\n\nvar getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {\n if (!stackTrace) return undefined;\n var lines = stackTrace.split('\\n');\n\n for (var i = 0; i < lines.length; i++) {\n var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just \"Error\"\n\n if (!functionName) continue; // If we reach one of these, we have gone too far and should quit\n\n if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an\n // uppercase letter\n\n if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);\n }\n\n return undefined;\n};\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n if (process.env.NODE_ENV !== 'production' && typeof props.css === 'string' && // check if there is a css declaration\n props.css.indexOf(':') !== -1) {\n throw new Error(\"Strings are not allowed as css prop values, please wrap it in a css template literal from '@emotion/react' like this: css`\" + props.css + \"`\");\n }\n\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key)) {\n newProps[key] = props[key];\n }\n }\n\n newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when\n // the label hasn't already been computed\n\n if (process.env.NODE_ENV !== 'production' && !!props.css && (typeof props.css !== 'object' || typeof props.css.name !== 'string' || props.css.name.indexOf('-') === -1)) {\n var label = getLabelFromStackTrace(new Error().stack);\n if (label) newProps[labelPropName] = label;\n }\n\n return newProps;\n};\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n // not passing the registered cache to serializeStyles because it would\n // make certain babel optimisations not possible\n\n if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n cssProp = cache.registered[cssProp];\n }\n\n var type = props[typePropName];\n var registeredStyles = [cssProp];\n var className = '';\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(registeredStyles, undefined, useContext(ThemeContext));\n\n if (process.env.NODE_ENV !== 'production' && serialized.name.indexOf('-') === -1) {\n var labelFromStack = props[labelPropName];\n\n if (labelFromStack) {\n serialized = serializeStyles([serialized, 'label:' + labelFromStack + ';']);\n }\n }\n\n var rules = insertStyles(cache, serialized, typeof type === 'string');\n className += cache.key + \"-\" + serialized.name;\n var newProps = {};\n\n for (var key in props) {\n if (hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && (process.env.NODE_ENV === 'production' || key !== labelPropName)) {\n newProps[key] = props[key];\n }\n }\n\n newProps.ref = ref;\n newProps.className = className;\n var ele = /*#__PURE__*/createElement(type, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Emotion.displayName = 'EmotionCssPropInternal';\n}\n\nexport { CacheProvider as C, Emotion as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwnProperty as h, useTheme as u, withEmotionCache as w };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useContext, createElement, Fragment } from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { getRegisteredStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n return typeof tag === 'string' && // 96 is one less than the char code\n // for \"a\" so this is checking that\n // it's a lowercase character\n tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n var shouldForwardProp;\n\n if (options) {\n var optionsShouldForwardProp = options.shouldForwardProp;\n shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n } : optionsShouldForwardProp;\n }\n\n if (typeof shouldForwardProp !== 'function' && isReal) {\n shouldForwardProp = tag.__emotion_forwardProp;\n }\n\n return shouldForwardProp;\n};\n\nvar ILLEGAL_ESCAPE_SEQUENCE_ERROR = \"You have illegal escape sequence in your template literal, most likely inside content's property value.\\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \\\"content: '\\\\00d7';\\\" should become \\\"content: '\\\\\\\\00d7';\\\".\\nYou can read more about this here:\\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences\";\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n if (process.env.NODE_ENV !== 'production') {\n if (tag === undefined) {\n throw new Error('You are trying to create a styled element with an undefined component.\\nYou may have forgotten to import it.');\n }\n }\n\n var isReal = tag.__emotion_real === tag;\n var baseTag = isReal && tag.__emotion_base || tag;\n var identifierName;\n var targetClassName;\n\n if (options !== undefined) {\n identifierName = options.label;\n targetClassName = options.target;\n }\n\n var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n var shouldUseAs = !defaultShouldForwardProp('as');\n return function () {\n var args = arguments;\n var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n if (identifierName !== undefined) {\n styles.push(\"label:\" + identifierName + \";\");\n }\n\n if (args[0] == null || args[0].raw === undefined) {\n styles.push.apply(styles, args);\n } else {\n if (process.env.NODE_ENV !== 'production' && args[0][0] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[0][0]);\n var len = args.length;\n var i = 1;\n\n for (; i < len; i++) {\n if (process.env.NODE_ENV !== 'production' && args[0][i] === undefined) {\n console.error(ILLEGAL_ESCAPE_SEQUENCE_ERROR);\n }\n\n styles.push(args[i], args[0][i]);\n }\n } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class\n\n\n var Styled = withEmotionCache(function (props, cache, ref) {\n var finalTag = shouldUseAs && props.as || baseTag;\n var className = '';\n var classInterpolations = [];\n var mergedProps = props;\n\n if (props.theme == null) {\n mergedProps = {};\n\n for (var key in props) {\n mergedProps[key] = props[key];\n }\n\n mergedProps.theme = useContext(ThemeContext);\n }\n\n if (typeof props.className === 'string') {\n className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n } else if (props.className != null) {\n className = props.className + \" \";\n }\n\n var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n var rules = insertStyles(cache, serialized, typeof finalTag === 'string');\n className += cache.key + \"-\" + serialized.name;\n\n if (targetClassName !== undefined) {\n className += \" \" + targetClassName;\n }\n\n var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(finalTag) : defaultShouldForwardProp;\n var newProps = {};\n\n for (var _key in props) {\n if (shouldUseAs && _key === 'as') continue;\n\n if ( // $FlowFixMe\n finalShouldForwardProp(_key)) {\n newProps[_key] = props[_key];\n }\n }\n\n newProps.className = className;\n newProps.ref = ref;\n var ele = /*#__PURE__*/createElement(finalTag, newProps);\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n });\n Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n Styled.defaultProps = tag.defaultProps;\n Styled.__emotion_real = Styled;\n Styled.__emotion_base = baseTag;\n Styled.__emotion_styles = styles;\n Styled.__emotion_forwardProp = shouldForwardProp;\n Object.defineProperty(Styled, 'toString', {\n value: function value() {\n if (targetClassName === undefined && process.env.NODE_ENV !== 'production') {\n return 'NO_COMPONENT_SELECTOR';\n } // $FlowFixMe: coerce undefined to string\n\n\n return \".\" + targetClassName;\n }\n });\n\n Styled.withComponent = function (nextTag, nextOptions) {\n return createStyled(nextTag, _extends({}, options, nextOptions, {\n shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n })).apply(void 0, styles);\n };\n\n return Styled;\n };\n};\n\nexport default createStyled;\n","import '@babel/runtime/helpers/extends';\nimport 'react';\nimport '@emotion/is-prop-valid';\nimport createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@emotion/react';\nimport '@emotion/utils';\nimport '@emotion/serialize';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\nvar newStyled = createStyled.bind();\ntags.forEach(function (tagName) {\n // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type\n newStyled[tagName] = newStyled(tagName);\n});\n\nexport default newStyled;\n","function add(first, second) {\n return first + second;\n}\n\nvar _ref = {},\n hasOwnProperty = _ref.hasOwnProperty;\nfunction hasOwn(prop, obj) {\n return hasOwnProperty.call(obj, prop);\n}\n\nfunction assign() {\n // eslint-disable-next-line no-func-assign\n assign = Object.assign || function (target) {\n for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n sources[_key - 1] = arguments[_key];\n }\n\n sources.forEach(function (source) {\n for (var key in source) {\n if (hasOwn(key, source)) {\n target[key] = source[key];\n }\n }\n });\n return target;\n };\n\n return assign.apply(void 0, arguments);\n}\n\nvar capitalizeFirstLetter = function capitalizeFirstLetter(text) {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\n\nfunction flatMap(iteratee, arr) {\n var _ref;\n\n return (_ref = []).concat.apply(_ref, arr.map(iteratee));\n}\n\nfunction chain(fn, listOrFn) {\n if (typeof listOrFn === 'function') {\n return function (list) {\n return fn(listOrFn(list))(list);\n };\n }\n\n return flatMap(fn, listOrFn);\n}\n\nfunction chunk(arr, number) {\n var chunked = [];\n\n for (var i = 0; i < arr.length; i += number) {\n chunked.push(arr.slice(i, i + number));\n }\n\n return chunked;\n}\n\nvar isArray = Array.isArray;\n\nfunction isObject(obj) {\n return typeof obj === 'object' && obj !== null && !isArray(obj);\n}\n\nfunction mapValues(mapper, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n acc[key] = mapper(obj[key]);\n return acc;\n }, {});\n}\n\nfunction cloneDeep(value) {\n if (isArray(value)) {\n return value.map(cloneDeep);\n }\n\n if (isObject(value)) {\n return mapValues(cloneDeep, value);\n }\n\n return value;\n}\n\n// slightly simplified version of https://github.com/sindresorhus/camelcase/blob/a526ef0399f9a1310eaacafa0ae4a69da4a2f1ad/index.js\n// TODO: possibly could be rewritten using short-ish regexp\nvar preserveCamelCase = function preserveCamelCase(input) {\n var text = input;\n var isLastCharLower = false;\n var isLastCharUpper = false;\n var isLastLastCharUpper = false;\n\n for (var index = 0; index < text.length; index++) {\n var _char = text[index];\n\n if (isLastCharLower && /[a-zA-Z]/.test(_char) && _char.toUpperCase() === _char) {\n text = text.slice(0, index) + '-' + text.slice(index);\n isLastCharLower = false;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = true;\n index++;\n } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(_char) && _char.toLowerCase() === _char) {\n text = text.slice(0, index - 1) + '-' + text.slice(index - 1);\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = false;\n isLastCharLower = true;\n } else {\n isLastCharLower = _char.toLowerCase() === _char;\n isLastLastCharUpper = isLastCharUpper;\n isLastCharUpper = _char.toUpperCase() === _char;\n }\n }\n\n return text;\n};\n\nfunction camelCase(input) {\n var text = input.trim();\n\n if (text.length === 0) {\n return '';\n }\n\n if (text.length === 1) {\n return text.toLowerCase();\n }\n\n if (/^[a-z\\d]+$/.test(text)) {\n return text;\n }\n\n var hasUpperCase = text !== text.toLowerCase();\n\n if (hasUpperCase) {\n text = preserveCamelCase(text);\n }\n\n text = text.replace(/^[_.\\- ]+/, '').toLowerCase().replace(/[_.\\- ]+(\\w|$)/g, function (match, p1) {\n return p1.toUpperCase();\n });\n return text;\n}\n\nfunction compact(collection) {\n return isArray(collection) ? collection.filter(function (value) {\n return value !== null && value !== undefined;\n }) : Object.keys(collection).reduce(function (result, key) {\n var value = collection[key];\n\n if (value !== null && value !== undefined) {\n result[key] = value;\n }\n\n return result;\n }, {});\n}\n\nfunction compose() {\n for (var _len = arguments.length, funcs = new Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n return funcs.reduce(function (composed, next) {\n return function () {\n return composed(next.apply(void 0, arguments));\n };\n });\n}\n\nfunction debounce(ms, fn) {\n // actual return type of setTimeout differs per platform (browser vs node)\n var timeoutId;\n return function () {\n clearTimeout(timeoutId);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n timeoutId = setTimeout.apply(void 0, [fn, ms].concat(args));\n };\n}\n\nfunction mapKeys(mapper, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n if (obj[key] && typeof obj[key] === 'object') {\n if (Array.isArray(obj[key])) {\n acc[mapper(key)] = obj[key].map(function (el) {\n return mapKeys(mapper, el);\n });\n return acc;\n }\n\n acc[mapper(key)] = mapKeys(mapper, obj[key]);\n return acc;\n }\n\n acc[mapper(key)] = obj[key];\n return acc;\n }, {});\n}\n\nfunction deepMerge(target) {\n for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n sources[_key - 1] = arguments[_key];\n }\n\n if (!sources.length) return target;\n var source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (var key in source) {\n if (isObject(source[key])) {\n var _Object$assign;\n\n if (!target[key]) Object.assign(target, (_Object$assign = {}, _Object$assign[key] = {}, _Object$assign));\n deepMerge(target[key], source[key]);\n } else {\n var _Object$assign2;\n\n Object.assign(target, (_Object$assign2 = {}, _Object$assign2[key] = source[key], _Object$assign2));\n }\n }\n }\n\n return deepMerge.apply(void 0, [target].concat(sources));\n}\n\nfunction isNil(value) {\n return value === null || value === undefined;\n}\n\nfunction defaultTo(defaultValue) {\n return function (value) {\n return isNil(value) ? defaultValue : value;\n };\n}\n\nfunction drop(count, arr) {\n return arr.slice(count);\n}\n\nfunction dropRight(count, arr) {\n return arr.slice(0, -count);\n}\n\nfunction ensureArray(maybeArr) {\n return isArray(maybeArr) ? maybeArr : [maybeArr];\n}\n\nfunction entries(obj) {\n return Object.keys(obj).map(function (key) {\n return [key, obj[key]];\n });\n}\n\nfunction find(predicate, arr) {\n for (var index = 0; index < arr.length; index++) {\n var element = arr[index];\n\n if (predicate(element)) {\n return element;\n }\n }\n}\n\nfunction findIndex(predicate, arr) {\n for (var index = 0; index < arr.length; index++) {\n if (predicate(arr[index])) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findKey(predicate, obj) {\n return find(function (key) {\n return predicate(obj[key]);\n }, Object.keys(obj));\n}\n\nfunction findLast(predicate, arr) {\n for (var index = arr.length - 1; index >= 0; index--) {\n if (predicate(arr[index])) {\n return arr[index];\n }\n }\n}\n\nfunction findLastIndexFrom(predicate, startIndex, arr) {\n for (var index = startIndex; index >= 0; index--) {\n if (predicate(arr[index])) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findLastIndex(predicate, arr) {\n return findLastIndexFrom(predicate, arr.length - 1, arr);\n}\n\nfunction filledArray(length, value) {\n var arr = [];\n\n while (length--) {\n arr.push(value);\n }\n\n return arr;\n}\n\nfunction identity(value) {\n return value;\n}\n\nfunction flatten(arr) {\n return flatMap(identity, arr);\n}\n\nfunction forOwn(callback, obj) {\n return Object.keys(obj).forEach(function (key) {\n callback(obj[key], key);\n });\n}\n\nfunction fromPairs(pairs) {\n return pairs.reduce(function (obj, _ref) {\n var key = _ref[0],\n value = _ref[1];\n obj[key] = value;\n return obj;\n }, {});\n}\n\nfunction generateRandomId() {\n return Math.random().toString(36).substring(2);\n}\n\nfunction generateUniqueId(map) {\n var id = generateRandomId();\n return hasOwn(id, map) ? generateUniqueId(map) : id;\n}\n\n// based on https://github.com/developit/dlv/blob/d7ec976d12665f1c25dec2acf955dfc2e8757a9c/index.js\nfunction get(propPath, obj) {\n var arrPath = typeof propPath === 'string' ? propPath.split('.') : propPath;\n var pathPartIndex = 0;\n var result = obj;\n\n while (result && pathPartIndex < arrPath.length) {\n result = result[arrPath[pathPartIndex++]];\n }\n\n return result;\n}\n\nfunction getOr(defaultValue, prop, obj) {\n var propValue = get(prop, obj);\n return propValue !== undefined && propValue !== null ? propValue : defaultValue;\n}\n\nfunction groupBy(mapper, collection) {\n return Object.keys(collection).reduce(function (grouped, key) {\n var element = collection[key];\n var groupKey = mapper(element);\n grouped[groupKey] = grouped[groupKey] || [];\n grouped[groupKey].push(element);\n return grouped;\n }, {});\n}\n\nfunction groupKeys(mapper, obj) {\n return Object.keys(obj).reduce(function (grouped, key) {\n var groupKey = mapper(key);\n grouped[groupKey] = grouped[groupKey] || {};\n grouped[groupKey][key] = obj[key];\n return grouped;\n }, {});\n}\n\nfunction includes(value, arrOrStr) {\n return arrOrStr.indexOf(value) !== -1;\n}\n\nfunction isEmpty(collection) {\n return (isArray(collection) ? collection : Object.keys(collection)).length === 0;\n}\n\nfunction isFalsy (value) {\n return !value;\n}\n\nfunction isTruthy (value) {\n return !!value;\n}\n\nvar isPromise = function isPromise(promise) {\n return !!promise && typeof promise.then === 'function';\n};\n\nfunction keyBy(prop, arr) {\n return arr.reduce(function (acc, el) {\n acc[el[prop]] = el;\n return acc;\n }, {});\n}\n\nfunction keys(obj) {\n var keysArray = [];\n\n for (var property in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, property)) {\n keysArray.push(property);\n }\n }\n\n return keysArray;\n}\n\n// TODO: this should return `T | undefined` to match native behavior\nfunction last(arr) {\n return arr.length > 0 ? arr[arr.length - 1] : null;\n}\n\nfunction mapKeys$1(mapper, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n acc[mapper(key)] = obj[key];\n return acc;\n }, {});\n}\n\nfunction mapValuesIndexed(iteratee, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n acc[key] = iteratee(obj[key], key);\n return acc;\n }, {});\n}\n\nfunction merge(objA, objB) {\n if (isEmpty(objB)) {\n return objA;\n }\n\n var result = {};\n forOwn(function (value, key) {\n if (hasOwn(key, objB)) {\n if (isObject(objA[key]) && isObject(objB[key])) {\n result[key] = merge(objA[key], objB[key]);\n } else if (isArray(objA[key]) && isArray(objB[key])) {\n var length = Math.max(objA[key].length, objB[key].length);\n result[key] = new Array(length);\n\n for (var i = 0; i < length; i++) {\n if (i in objB[key]) {\n result[key][i] = objB[key][i];\n } else if (i in objA[key]) {\n result[key][i] = objA[key][i];\n }\n }\n } else {\n result[key] = objB[key];\n }\n } else {\n result[key] = objA[key];\n }\n }, objA);\n forOwn(function (value, key) {\n if (!hasOwn(key, result)) {\n result[key] = objB[key];\n }\n }, objB);\n return result;\n}\n\nfunction mergeAll(objs) {\n if (objs.length === 0) {\n return {};\n }\n\n var first = objs[0],\n rest = objs.slice(1);\n return rest.reduce(function (merged, obj) {\n return merge(merged, obj);\n }, first);\n}\n\nfunction memoizeWith(keyResolver, func) {\n var cache = {};\n return function () {\n var key = keyResolver.apply(void 0, arguments);\n\n if (hasOwn(key, cache)) {\n return cache[key];\n }\n\n var value = func.apply(void 0, arguments);\n cache[key] = value;\n return value;\n };\n}\n\n// TODO: technically this should accept AnyFunction but it doesn't type check currently with that for some reason\nfunction memoize(func) {\n return memoizeWith(identity, func);\n}\n\nfunction memoizeOne(fn) {\n var called = false;\n var memoized;\n var cacheKey;\n return function () {\n if (called && (arguments.length <= 0 ? undefined : arguments[0]) === cacheKey) {\n return memoized;\n }\n\n called = true;\n cacheKey = arguments.length <= 0 ? undefined : arguments[0];\n memoized = fn.apply(void 0, arguments);\n return memoized;\n };\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nfunction values(obj) {\n return Object.keys(obj).map(function (key) {\n return obj[key];\n });\n}\n\nfunction numericSortBy(propOrMapper, collection) {\n var mapper = typeof propOrMapper === 'function' ? propOrMapper : function (element) {\n return get(propOrMapper, element);\n };\n return (isArray(collection) ? [].concat(collection) : values(collection)).sort(function (elementA, elementB) {\n return mapper(elementA) - mapper(elementB);\n });\n}\n\nfunction omitByIndexed(predicate, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n if (!predicate(obj[key], key)) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n\nfunction omit(keys, obj) {\n return omitByIndexed(function (_, key) {\n return keys.indexOf(key) !== -1;\n }, obj);\n}\n\nfunction omitBy(predicate, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n if (!predicate(obj[key])) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n\nfunction once(fn) {\n var called = false;\n var result;\n return function () {\n if (called) {\n return result;\n }\n\n called = true;\n return result = fn.apply(void 0, arguments);\n };\n}\n\nfunction over(fns) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return fns.map(function (fn) {\n return fn.apply(void 0, args);\n });\n };\n}\n\nfunction takeLast(count, arr) {\n return arr.slice(-count);\n}\n\nfunction overArgs(fn, transformers) {\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var transformed = transformers.map(function (transform, index) {\n return transform(args[index]);\n });\n return args.length > transformed.length ? fn.apply(void 0, transformed.concat(takeLast(args.length - transformed.length, args))) : fn.apply(void 0, transformed);\n };\n}\n\nfunction pair(a, b) {\n return [a, b];\n}\n\nfunction partitionObject(predicate, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n acc[predicate(obj[key]) ? 0 : 1][key] = obj[key];\n return acc;\n }, [{}, {}]);\n}\n\nfunction pick(props, obj) {\n return props.reduce(function (acc, prop) {\n acc[prop] = obj[prop];\n return acc;\n }, {});\n}\n\nfunction pickBy(predicate, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n if (predicate(obj[key])) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n\nfunction pickByIndexed(predicate, obj) {\n return Object.keys(obj).reduce(function (acc, key) {\n if (predicate(obj[key], key)) {\n acc[key] = obj[key];\n }\n\n return acc;\n }, {});\n}\n\nfunction pickOwn(props, obj) {\n return props.reduce(function (acc, prop) {\n if (hasOwn(prop, obj)) {\n acc[prop] = obj[prop];\n }\n\n return acc;\n }, {});\n}\n\nfunction randomInt(min, max) {\n return min + Math.floor(Math.random() * (max - min + 1));\n}\n\nfunction range(max) {\n var arr = [];\n var counter = 0;\n\n while (counter <= max) {\n arr.push(counter++);\n }\n\n return arr;\n}\n\nfunction reject(predicate, arr) {\n return arr.filter(function (element) {\n return !predicate(element);\n });\n}\n\nfunction removeAt(index, arr) {\n var copy = [].concat(arr);\n copy.splice(index, 1);\n return copy;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction _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}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n it = o[Symbol.iterator]();\n return it.next.bind(it);\n}\n\nfunction set(_keys, val, obj) {\n var _extends2;\n\n var keys = _keys.split ? _keys.split('.') : _keys;\n var index = keys[0];\n var finalVal = val;\n\n if (keys.length > 1) {\n // eslint-disable-next-line eqeqeq\n var nextObj = obj != null && hasOwn(index, obj) ? obj[index] : {};\n finalVal = set(keys.slice(1), val, nextObj);\n }\n\n return _extends({}, obj, (_extends2 = {}, _extends2[index] = finalVal, _extends2));\n}\n\n// https://github.com/reactjs/react-redux/blob/5d792a283554cff3d2f54fad1be1f79cbcab33fe/src/utils/shallowEqual.js\n\nfunction is(first, second) {\n if (first === second) {\n return first !== 0 || second !== 0 || 1 / first === 1 / second;\n } // eslint-disable-next-line no-self-compare\n\n\n return first !== first && second !== second;\n}\n\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) return true;\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) return false;\n\n for (var index = 0; index < keysA.length; index++) {\n if (!hasOwn(keysA[index], objB) || !is(objA[keysA[index]], objB[keysA[index]])) {\n return false;\n }\n }\n\n return true;\n}\n\nvar shortenLongText = function shortenLongText(limit, text) {\n if (text.length <= limit) {\n return text;\n }\n\n var words = text.split(' ');\n var sentence = [];\n var totalLength = 0;\n\n for (var _iterator = _createForOfIteratorHelperLoose(words), _step; !(_step = _iterator()).done;) {\n var word = _step.value;\n\n if (totalLength + word.length > limit) {\n break;\n }\n\n totalLength += word.length + 1;\n sentence.push(word);\n }\n\n return sentence.join(' ') + \"...\";\n};\n\nfunction sign(value) {\n if (typeof value !== 'number' || isNaN(value)) {\n return NaN;\n }\n\n if (value === 0) {\n return 0;\n } // eslint-disable-next-line no-compare-neg-zero\n\n\n if (value === -0) {\n return -0;\n }\n\n return value > 0 ? 1 : -1;\n}\n\nfunction shuffle(arr) {\n var copy = arr.slice();\n var lastIndex = arr.length - 1;\n\n for (var i = 0; i < arr.length; i++) {\n var randomIndex = randomInt(i, lastIndex);\n var randomValue = copy[randomIndex];\n copy[randomIndex] = copy[i];\n copy[i] = randomValue;\n }\n\n return copy;\n}\n\nfunction sliceDiff(slice, obj) {\n var picked = pickByIndexed(function (value, key) {\n return value !== obj[key];\n }, slice);\n return isEmpty(picked) ? null : picked;\n}\n\n// TODO: this could be written a lot better\nfunction snakeCase(str) {\n var snakeCased = str.replace(/[A-Z]|([-_ ]+)/g, function (match) {\n var code = match.charCodeAt(0);\n var upperCased = code > 64 && code < 91;\n return upperCased ? \"_\" + match.toLowerCase() : '_';\n });\n return snakeCased[0] === '_' ? snakeCased.substr(1) : snakeCased;\n}\n\nfunction someAreTruthy(arr) {\n return arr.some(identity);\n}\n\nfunction splitAt(splitPoint, arrOrStr) {\n return [arrOrStr.slice(0, splitPoint), arrOrStr.slice(splitPoint, arrOrStr.length)];\n}\n\nfunction splitRightWhenAccum(fn, acc, arr) {\n var result = false;\n\n for (var index = arr.length; index > 0; index--) {\n\n var _fn = fn(arr[index - 1], acc);\n\n result = _fn[0];\n acc = _fn[1];\n\n if (result) {\n return splitAt(index - 1, arr);\n }\n }\n\n return [[], arr];\n}\n\nfunction spread(fn) {\n return function (args) {\n return fn.apply(void 0, args);\n };\n}\n\nfunction sum(numbers) {\n return numbers.reduce(add, 0);\n}\n\nfunction take(count, arr) {\n return arr.slice(0, count);\n}\n\nfunction takeRightWhileFrom(predicate, startIndex, arr) {\n var endIndex = findLastIndexFrom(function (element) {\n return !predicate(element);\n }, startIndex, arr);\n return endIndex === startIndex ? [] : arr.slice(endIndex + 1, startIndex + 1);\n}\n\nfunction takeRightWhile(predicate, arr) {\n return takeRightWhileFrom(predicate, arr.length - 1, arr);\n}\n\nfunction throttle(ms, fn) {\n var lastCall = Date.now() - 2 * ms;\n var trailingId;\n\n var invoke = function invoke() {\n lastCall = Date.now();\n fn.apply(void 0, arguments);\n };\n\n return function () {\n var now = Date.now();\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (now - lastCall >= ms) {\n invoke.apply(void 0, args);\n return;\n }\n\n clearTimeout(trailingId);\n trailingId = setTimeout.apply(void 0, [invoke, lastCall - now + ms].concat(args));\n };\n}\n\nfunction toArray(arrayLike) {\n return Array.prototype.slice.call(arrayLike);\n}\n\nvar toFixedNumber = function toFixedNumber(num, digits) {\n return Number(num.toFixed(digits));\n};\n\nvar toPairs = function toPairs(obj) {\n return Object.keys(obj).map(function (key) {\n return [key, obj[key]];\n });\n};\n\nfunction trailingThrottle(ms, fn) {\n var lastCall = Date.now() - 2 * ms;\n var trailingId;\n\n var invoke = function invoke() {\n lastCall = Date.now();\n return fn.apply(void 0, arguments);\n };\n\n return function () {\n var now = Date.now();\n\n if (now - lastCall >= ms) {\n lastCall = Date.now();\n }\n\n clearTimeout(trailingId);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n trailingId = setTimeout.apply(void 0, [invoke, lastCall - now + ms].concat(args));\n };\n}\n\nfunction leadingThrottle(ms, fn) {\n var lastCall = 0;\n return function () {\n var now = Date.now();\n\n if (now - lastCall >= ms) {\n lastCall = Date.now();\n fn.apply(void 0, arguments);\n }\n };\n}\n\nvar stringCompare = function stringCompare(strA, strB) {\n if (strA === strB) {\n return 0;\n }\n\n return strA < strB ? -1 : 1;\n};\n\nvar leadingWhiteSpace = /^\\s+/;\nfunction trimStart(str) {\n return str.replace(leadingWhiteSpace, '');\n}\n\nvar trailingWhiteSpace = /\\s+$/;\nfunction trimEnd(str) {\n return str.replace(trailingWhiteSpace, '');\n}\n\nfunction repeat(count, text) {\n return Array(count + 1).join(text);\n}\n\nfunction uniqBy(iteratee, arr) {\n // with polyfills this could be just: return Array.from(new Set(arr.map(iteratee)))\n var seen = [];\n return arr.filter(function (element) {\n var key = iteratee(element);\n\n if (seen.indexOf(key) === -1) {\n seen.push(key);\n return true;\n }\n\n return false;\n });\n}\n\nfunction uniq(arr) {\n return uniqBy(identity, arr);\n}\n\nfunction update(index, newElement, arr) {\n return [].concat(arr.slice(0, index), [newElement], arr.slice(index + 1, arr.length));\n}\n\nfunction without(removed, arr) {\n return arr.filter(function (element) {\n return removed.indexOf(element) === -1;\n });\n}\n\nfunction zipWith(zipper, arrayA, arrayB) {\n return arrayA.map(function (elementA, index) {\n return zipper(elementA, arrayB[index]);\n });\n}\n\nfunction zip(arrayA, arrayB) {\n return zipWith(pair, arrayA, arrayB);\n}\n\nexport { add, assign, camelCase, capitalizeFirstLetter, chain, chunk, cloneDeep, compact, compose, debounce, mapKeys as deepMapKeys, deepMerge, defaultTo, drop, dropRight, ensureArray, entries, filledArray, find, findIndex, findKey, findLast, findLastIndex, findLastIndexFrom, flatMap, flatten, forOwn, fromPairs, generateRandomId, generateUniqueId, get, getOr, groupBy, groupKeys, hasOwn, identity, includes, isArray, isEmpty, isFalsy, isNil, isObject, isPromise, isTruthy, keyBy, keys, last, leadingThrottle, mapKeys$1 as mapKeys, mapValues, mapValuesIndexed, memoize, memoizeOne, memoizeWith, merge, mergeAll, noop, numericSortBy, omit, omitBy, omitByIndexed, once, over, overArgs, pair, partitionObject, pick, pickBy, pickByIndexed, pickOwn, randomInt, range, reject, removeAt, repeat, set, shallowEqual, shortenLongText, shuffle, sign, sliceDiff, snakeCase, someAreTruthy, splitAt, splitRightWhenAccum, spread, stringCompare, sum, take, takeLast, takeRightWhile, takeRightWhileFrom, throttle, toArray, toFixedNumber, toPairs, trailingThrottle, trimEnd, trimStart, uniq, uniqBy, update, values, without, zip, zipWith };\n","import { createElement, useContext, useRef, useLayoutEffect, Fragment } from 'react';\nimport '@emotion/cache';\nimport { h as hasOwnProperty, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext } from './emotion-element-699e6908.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-699e6908.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport 'hoist-non-react-statics';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { insertStyles, getRegisteredStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { StyleSheet } from '@emotion/sheet';\n\nvar pkg = {\n\tname: \"@emotion/react\",\n\tversion: \"11.7.1\",\n\tmain: \"dist/emotion-react.cjs.js\",\n\tmodule: \"dist/emotion-react.esm.js\",\n\tbrowser: {\n\t\t\"./dist/emotion-react.cjs.js\": \"./dist/emotion-react.browser.cjs.js\",\n\t\t\"./dist/emotion-react.esm.js\": \"./dist/emotion-react.browser.esm.js\"\n\t},\n\ttypes: \"types/index.d.ts\",\n\tfiles: [\n\t\t\"src\",\n\t\t\"dist\",\n\t\t\"jsx-runtime\",\n\t\t\"jsx-dev-runtime\",\n\t\t\"_isolated-hnrs\",\n\t\t\"types/*.d.ts\",\n\t\t\"macro.js\",\n\t\t\"macro.d.ts\",\n\t\t\"macro.js.flow\"\n\t],\n\tsideEffects: false,\n\tauthor: \"mitchellhamilton <mitchell@mitchellhamilton.me>\",\n\tlicense: \"MIT\",\n\tscripts: {\n\t\t\"test:typescript\": \"dtslint types\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.13.10\",\n\t\t\"@emotion/cache\": \"^11.7.1\",\n\t\t\"@emotion/serialize\": \"^1.0.2\",\n\t\t\"@emotion/sheet\": \"^1.1.0\",\n\t\t\"@emotion/utils\": \"^1.0.0\",\n\t\t\"@emotion/weak-memoize\": \"^0.2.5\",\n\t\t\"hoist-non-react-statics\": \"^3.3.1\"\n\t},\n\tpeerDependencies: {\n\t\t\"@babel/core\": \"^7.0.0\",\n\t\treact: \">=16.8.0\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"@babel/core\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"@types/react\": {\n\t\t\toptional: true\n\t\t}\n\t},\n\tdevDependencies: {\n\t\t\"@babel/core\": \"^7.13.10\",\n\t\t\"@emotion/css\": \"11.7.1\",\n\t\t\"@emotion/css-prettifier\": \"1.0.1\",\n\t\t\"@emotion/server\": \"11.4.0\",\n\t\t\"@emotion/styled\": \"11.6.0\",\n\t\t\"@types/react\": \"^16.9.11\",\n\t\tdtslint: \"^0.3.0\",\n\t\t\"html-tag-names\": \"^1.1.2\",\n\t\treact: \"16.14.0\",\n\t\t\"svg-tag-names\": \"^1.1.1\"\n\t},\n\trepository: \"https://github.com/emotion-js/emotion/tree/main/packages/react\",\n\tpublishConfig: {\n\t\taccess: \"public\"\n\t},\n\t\"umd:main\": \"dist/emotion-react.umd.min.js\",\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"./index.js\",\n\t\t\t\"./jsx-runtime.js\",\n\t\t\t\"./jsx-dev-runtime.js\",\n\t\t\t\"./_isolated-hnrs.js\"\n\t\t],\n\t\tumdName: \"emotionReact\"\n\t}\n};\n\nvar jsx = function jsx(type, props) {\n var args = arguments;\n\n if (props == null || !hasOwnProperty.call(props, 'css')) {\n // $FlowFixMe\n return createElement.apply(undefined, args);\n }\n\n var argsLength = args.length;\n var createElementArgArray = new Array(argsLength);\n createElementArgArray[0] = Emotion;\n createElementArgArray[1] = createEmotionProps(type, props);\n\n for (var i = 2; i < argsLength; i++) {\n createElementArgArray[i] = args[i];\n } // $FlowFixMe\n\n\n return createElement.apply(null, createElementArgArray);\n};\n\nvar warnedAboutCssPropForGlobal = false; // maintain place over rerenders.\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n if (process.env.NODE_ENV !== 'production' && !warnedAboutCssPropForGlobal && ( // check for className as well since the user is\n // probably using the custom createElement which\n // means it will be turned into a className prop\n // $FlowFixMe I don't really want to add it to the type since it shouldn't be used\n props.className || props.css)) {\n console.error(\"It looks like you're using the css prop on Global, did you mean to use the styles prop instead?\");\n warnedAboutCssPropForGlobal = true;\n }\n\n var styles = props.styles;\n var serialized = serializeStyles([styles], undefined, useContext(ThemeContext));\n // but it is based on a constant that will never change at runtime\n // it's effectively like having two implementations and switching them out\n // so it's not actually breaking anything\n\n\n var sheetRef = useRef();\n useLayoutEffect(function () {\n var key = cache.key + \"-global\";\n var sheet = new StyleSheet({\n key: key,\n nonce: cache.sheet.nonce,\n container: cache.sheet.container,\n speedy: cache.sheet.isSpeedy\n });\n var rehydrating = false; // $FlowFixMe\n\n var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n if (cache.sheet.tags.length) {\n sheet.before = cache.sheet.tags[0];\n }\n\n if (node !== null) {\n rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n node.setAttribute('data-emotion', key);\n sheet.hydrate([node]);\n }\n\n sheetRef.current = [sheet, rehydrating];\n return function () {\n sheet.flush();\n };\n }, [cache]);\n useLayoutEffect(function () {\n var sheetRefCurrent = sheetRef.current;\n var sheet = sheetRefCurrent[0],\n rehydrating = sheetRefCurrent[1];\n\n if (rehydrating) {\n sheetRefCurrent[1] = false;\n return;\n }\n\n if (serialized.next !== undefined) {\n // insert keyframes\n insertStyles(cache, serialized.next, true);\n }\n\n if (sheet.tags.length) {\n // if this doesn't exist then it will be null so the style element will be appended\n var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n sheet.before = element;\n sheet.flush();\n }\n\n cache.insert(\"\", serialized, sheet, false);\n }, [cache, serialized.name]);\n return null;\n});\n\nif (process.env.NODE_ENV !== 'production') {\n Global.displayName = 'EmotionGlobal';\n}\n\nfunction css() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return serializeStyles(args);\n}\n\nvar keyframes = function keyframes() {\n var insertable = css.apply(void 0, arguments);\n var name = \"animation-\" + insertable.name; // $FlowFixMe\n\n return {\n name: name,\n styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n anim: 1,\n toString: function toString() {\n return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n }\n };\n};\n\nvar classnames = function classnames(args) {\n var len = args.length;\n var i = 0;\n var cls = '';\n\n for (; i < len; i++) {\n var arg = args[i];\n if (arg == null) continue;\n var toAdd = void 0;\n\n switch (typeof arg) {\n case 'boolean':\n break;\n\n case 'object':\n {\n if (Array.isArray(arg)) {\n toAdd = classnames(arg);\n } else {\n if (process.env.NODE_ENV !== 'production' && arg.styles !== undefined && arg.name !== undefined) {\n console.error('You have passed styles created with `css` from `@emotion/react` package to the `cx`.\\n' + '`cx` is meant to compose class names (strings) so you should convert those styles to a class name by passing them to the `css` received from <ClassNames/> component.');\n }\n\n toAdd = '';\n\n for (var k in arg) {\n if (arg[k] && k) {\n toAdd && (toAdd += ' ');\n toAdd += k;\n }\n }\n }\n\n break;\n }\n\n default:\n {\n toAdd = arg;\n }\n }\n\n if (toAdd) {\n cls && (cls += ' ');\n cls += toAdd;\n }\n }\n\n return cls;\n};\n\nfunction merge(registered, css, className) {\n var registeredStyles = [];\n var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n if (registeredStyles.length < 2) {\n return className;\n }\n\n return rawClassName + css(registeredStyles);\n}\n\nvar Noop = function Noop() {\n return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n var hasRendered = false;\n\n var css = function css() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('css can only be used during render');\n }\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var serialized = serializeStyles(args, cache.registered);\n\n {\n insertStyles(cache, serialized, false);\n }\n\n return cache.key + \"-\" + serialized.name;\n };\n\n var cx = function cx() {\n if (hasRendered && process.env.NODE_ENV !== 'production') {\n throw new Error('cx can only be used during render');\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return merge(cache.registered, css, classnames(args));\n };\n\n var content = {\n css: css,\n cx: cx,\n theme: useContext(ThemeContext)\n };\n var ele = props.children(content);\n hasRendered = true;\n var possiblyStyleElement = /*#__PURE__*/createElement(Noop, null);\n\n\n return /*#__PURE__*/createElement(Fragment, null, possiblyStyleElement, ele);\n});\n\nif (process.env.NODE_ENV !== 'production') {\n ClassNames.displayName = 'EmotionClassNames';\n}\n\nif (process.env.NODE_ENV !== 'production') {\n var isBrowser = \"object\" !== 'undefined'; // #1727 for some reason Jest evaluates modules twice if some consuming module gets mocked with jest.mock\n\n var isJest = typeof jest !== 'undefined';\n\n if (isBrowser && !isJest) {\n // globalThis has wide browser support - https://caniuse.com/?search=globalThis, Node.js 12 and later\n var globalContext = // $FlowIgnore\n typeof globalThis !== 'undefined' ? globalThis // eslint-disable-line no-undef\n : isBrowser ? window : global;\n var globalKey = \"__EMOTION_REACT_\" + pkg.version.split('.')[0] + \"__\";\n\n if (globalContext[globalKey]) {\n console.warn('You are loading @emotion/react when it is already loaded. Running ' + 'multiple instances may cause problems. This can happen if multiple ' + 'versions are used, or if multiple builds of the same version are ' + 'used.');\n }\n\n globalContext[globalKey] = true;\n }\n}\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\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\n return target;\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default {\n disabled: false\n};","import React from 'react';\nexport default React.createContext(null);","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n * transition: `opacity ${duration}ms ease-in-out`,\n * opacity: 0,\n * }\n *\n * const transitionStyles = {\n * entering: { opacity: 1 },\n * entered: { opacity: 1 },\n * exiting: { opacity: 0 },\n * exited: { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n * <Transition in={inProp} timeout={duration}>\n * {state => (\n * <div style={{\n * ...defaultStyle,\n * ...transitionStyles[state]\n * }}>\n * I'm a fade Transition!\n * </div>\n * )}\n * </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n * - `'entering'`\n * - `'entered'`\n * - `'exiting'`\n * - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <Transition in={inProp} timeout={500}>\n * {state => (\n * // ...\n * )}\n * </Transition>\n * <button onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(Transition, _React$Component);\n\n function Transition(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n var initialStatus;\n _this.appearStatus = null;\n\n if (props.in) {\n if (appear) {\n initialStatus = EXITED;\n _this.appearStatus = ENTERING;\n } else {\n initialStatus = ENTERED;\n }\n } else {\n if (props.unmountOnExit || props.mountOnEnter) {\n initialStatus = UNMOUNTED;\n } else {\n initialStatus = EXITED;\n }\n }\n\n _this.state = {\n status: initialStatus\n };\n _this.nextCallback = null;\n return _this;\n }\n\n Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n var nextIn = _ref.in;\n\n if (nextIn && prevState.status === UNMOUNTED) {\n return {\n status: EXITED\n };\n }\n\n return null;\n } // getSnapshotBeforeUpdate(prevProps) {\n // let nextStatus = null\n // if (prevProps !== this.props) {\n // const { status } = this.state\n // if (this.props.in) {\n // if (status !== ENTERING && status !== ENTERED) {\n // nextStatus = ENTERING\n // }\n // } else {\n // if (status === ENTERING || status === ENTERED) {\n // nextStatus = EXITING\n // }\n // }\n // }\n // return { nextStatus }\n // }\n ;\n\n var _proto = Transition.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.updateStatus(true, this.appearStatus);\n };\n\n _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n var nextStatus = null;\n\n if (prevProps !== this.props) {\n var status = this.state.status;\n\n if (this.props.in) {\n if (status !== ENTERING && status !== ENTERED) {\n nextStatus = ENTERING;\n }\n } else {\n if (status === ENTERING || status === ENTERED) {\n nextStatus = EXITING;\n }\n }\n }\n\n this.updateStatus(false, nextStatus);\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.cancelNextCallback();\n };\n\n _proto.getTimeouts = function getTimeouts() {\n var timeout = this.props.timeout;\n var exit, enter, appear;\n exit = enter = appear = timeout;\n\n if (timeout != null && typeof timeout !== 'number') {\n exit = timeout.exit;\n enter = timeout.enter; // TODO: remove fallback for next major\n\n appear = timeout.appear !== undefined ? timeout.appear : enter;\n }\n\n return {\n exit: exit,\n enter: enter,\n appear: appear\n };\n };\n\n _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n if (mounting === void 0) {\n mounting = false;\n }\n\n if (nextStatus !== null) {\n // nextStatus will always be ENTERING or EXITING.\n this.cancelNextCallback();\n\n if (nextStatus === ENTERING) {\n this.performEnter(mounting);\n } else {\n this.performExit();\n }\n } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n this.setState({\n status: UNMOUNTED\n });\n }\n };\n\n _proto.performEnter = function performEnter(mounting) {\n var _this2 = this;\n\n var enter = this.props.enter;\n var appearing = this.context ? this.context.isMounting : mounting;\n\n var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n maybeNode = _ref2[0],\n maybeAppearing = _ref2[1];\n\n var timeouts = this.getTimeouts();\n var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n // if we are mounting and running this it means appear _must_ be set\n\n if (!mounting && !enter || config.disabled) {\n this.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode);\n });\n return;\n }\n\n this.props.onEnter(maybeNode, maybeAppearing);\n this.safeSetState({\n status: ENTERING\n }, function () {\n _this2.props.onEntering(maybeNode, maybeAppearing);\n\n _this2.onTransitionEnd(enterTimeout, function () {\n _this2.safeSetState({\n status: ENTERED\n }, function () {\n _this2.props.onEntered(maybeNode, maybeAppearing);\n });\n });\n });\n };\n\n _proto.performExit = function performExit() {\n var _this3 = this;\n\n var exit = this.props.exit;\n var timeouts = this.getTimeouts();\n var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n if (!exit || config.disabled) {\n this.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n return;\n }\n\n this.props.onExit(maybeNode);\n this.safeSetState({\n status: EXITING\n }, function () {\n _this3.props.onExiting(maybeNode);\n\n _this3.onTransitionEnd(timeouts.exit, function () {\n _this3.safeSetState({\n status: EXITED\n }, function () {\n _this3.props.onExited(maybeNode);\n });\n });\n });\n };\n\n _proto.cancelNextCallback = function cancelNextCallback() {\n if (this.nextCallback !== null) {\n this.nextCallback.cancel();\n this.nextCallback = null;\n }\n };\n\n _proto.safeSetState = function safeSetState(nextState, callback) {\n // This shouldn't be necessary, but there are weird race conditions with\n // setState callbacks and unmounting in testing, so always make sure that\n // we can cancel any pending setState callbacks after we unmount.\n callback = this.setNextCallback(callback);\n this.setState(nextState, callback);\n };\n\n _proto.setNextCallback = function setNextCallback(callback) {\n var _this4 = this;\n\n var active = true;\n\n this.nextCallback = function (event) {\n if (active) {\n active = false;\n _this4.nextCallback = null;\n callback(event);\n }\n };\n\n this.nextCallback.cancel = function () {\n active = false;\n };\n\n return this.nextCallback;\n };\n\n _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n this.setNextCallback(handler);\n var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n if (!node || doesNotHaveTimeoutOrListener) {\n setTimeout(this.nextCallback, 0);\n return;\n }\n\n if (this.props.addEndListener) {\n var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n maybeNode = _ref3[0],\n maybeNextCallback = _ref3[1];\n\n this.props.addEndListener(maybeNode, maybeNextCallback);\n }\n\n if (timeout != null) {\n setTimeout(this.nextCallback, timeout);\n }\n };\n\n _proto.render = function render() {\n var status = this.state.status;\n\n if (status === UNMOUNTED) {\n return null;\n }\n\n var _this$props = this.props,\n children = _this$props.children,\n _in = _this$props.in,\n _mountOnEnter = _this$props.mountOnEnter,\n _unmountOnExit = _this$props.unmountOnExit,\n _appear = _this$props.appear,\n _enter = _this$props.enter,\n _exit = _this$props.exit,\n _timeout = _this$props.timeout,\n _addEndListener = _this$props.addEndListener,\n _onEnter = _this$props.onEnter,\n _onEntering = _this$props.onEntering,\n _onEntered = _this$props.onEntered,\n _onExit = _this$props.onExit,\n _onExiting = _this$props.onExiting,\n _onExited = _this$props.onExited,\n _nodeRef = _this$props.nodeRef,\n childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n return (\n /*#__PURE__*/\n // allows for nested Transitions\n React.createElement(TransitionGroupContext.Provider, {\n value: null\n }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n );\n };\n\n return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * A React reference to DOM element that need to transition:\n * https://stackoverflow.com/a/51127130/4671932\n *\n * - When `nodeRef` prop is used, `node` is not passed to callback functions\n * (e.g. `onEnter`) because user already has direct access to the node.\n * - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n * `nodeRef` need to be provided to `Transition` with changed `key` prop\n * (see\n * [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n */\n nodeRef: PropTypes.shape({\n current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n var value = propValue[key];\n return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n }\n }),\n\n /**\n * A `function` child can be used instead of a React element. This function is\n * called with the current transition status (`'entering'`, `'entered'`,\n * `'exiting'`, `'exited'`), which can be used to apply context\n * specific props to a component.\n *\n * ```jsx\n * <Transition in={this.state.in} timeout={150}>\n * {state => (\n * <MyComponent className={`fade fade-${state}`} />\n * )}\n * </Transition>\n * ```\n */\n children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n /**\n * Show the component; triggers the enter or exit states\n */\n in: PropTypes.bool,\n\n /**\n * By default the child component is mounted immediately along with\n * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n */\n mountOnEnter: PropTypes.bool,\n\n /**\n * By default the child component stays mounted after it reaches the `'exited'` state.\n * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n */\n unmountOnExit: PropTypes.bool,\n\n /**\n * By default the child component does not perform the enter transition when\n * it first mounts, regardless of the value of `in`. If you want this\n * behavior, set both `appear` and `in` to `true`.\n *\n * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n * > only adds an additional enter transition. However, in the\n * > `<CSSTransition>` component that first enter transition does result in\n * > additional `.appear-*` classes, that way you can choose to style it\n * > differently.\n */\n appear: PropTypes.bool,\n\n /**\n * Enable or disable enter transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * Enable or disable exit transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * The duration of the transition, in milliseconds.\n * Required unless `addEndListener` is provided.\n *\n * You may specify a single timeout for all transitions:\n *\n * ```jsx\n * timeout={500}\n * ```\n *\n * or individually:\n *\n * ```jsx\n * timeout={{\n * appear: 500,\n * enter: 300,\n * exit: 500,\n * }}\n * ```\n *\n * - `appear` defaults to the value of `enter`\n * - `enter` defaults to `0`\n * - `exit` defaults to `0`\n *\n * @type {number | { enter?: number, exit?: number, appear?: number }}\n */\n timeout: function timeout(props) {\n var pt = timeoutsShape;\n if (!props.addEndListener) pt = pt.isRequired;\n\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return pt.apply(void 0, [props].concat(args));\n },\n\n /**\n * Add a custom transition end trigger. Called with the transitioning\n * DOM node and a `done` callback. Allows for more fine grained transition end\n * logic. Timeouts are still used as a fallback if provided.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * ```jsx\n * addEndListener={(node, done) => {\n * // use the css transitionend event to mark the finish of a transition\n * node.addEventListener('transitionend', done, false);\n * }}\n * ```\n */\n addEndListener: PropTypes.func,\n\n /**\n * Callback fired before the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEnter: PropTypes.func,\n\n /**\n * Callback fired after the \"entering\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * Callback fired after the \"entered\" status is applied. An extra parameter\n * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool) -> void\n */\n onEntered: PropTypes.func,\n\n /**\n * Callback fired before the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExit: PropTypes.func,\n\n /**\n * Callback fired after the \"exiting\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExiting: PropTypes.func,\n\n /**\n * Callback fired after the \"exited\" status is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement) -> void\n */\n onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n in: false,\n mountOnEnter: false,\n unmountOnExit: false,\n appear: false,\n enter: true,\n exit: true,\n onEnter: noop,\n onEntering: noop,\n onEntered: noop,\n onExit: noop,\n onExiting: noop,\n onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\n\nvar _addClass = function addClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return addOneClass(node, c);\n });\n};\n\nvar removeClass = function removeClass(node, classes) {\n return node && classes && classes.split(' ').forEach(function (c) {\n return removeOneClass(node, c);\n });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n * const [inProp, setInProp] = useState(false);\n * return (\n * <div>\n * <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n * <div>\n * {\"I'll receive my-node-* classes\"}\n * </div>\n * </CSSTransition>\n * <button type=\"button\" onClick={() => setInProp(true)}>\n * Click to Enter\n * </button>\n * </div>\n * );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n * opacity: 0;\n * }\n * .my-node-enter-active {\n * opacity: 1;\n * transition: opacity 200ms;\n * }\n * .my-node-exit {\n * opacity: 1;\n * }\n * .my-node-exit-active {\n * opacity: 0;\n * transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(CSSTransition, _React$Component);\n\n function CSSTransition() {\n var _this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n _this.appliedClasses = {\n appear: {},\n enter: {},\n exit: {}\n };\n\n _this.onEnter = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument[0],\n appearing = _this$resolveArgument[1];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n if (_this.props.onEnter) {\n _this.props.onEnter(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntering = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument2[0],\n appearing = _this$resolveArgument2[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.addClass(node, type, 'active');\n\n if (_this.props.onEntering) {\n _this.props.onEntering(maybeNode, maybeAppearing);\n }\n };\n\n _this.onEntered = function (maybeNode, maybeAppearing) {\n var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n node = _this$resolveArgument3[0],\n appearing = _this$resolveArgument3[1];\n\n var type = appearing ? 'appear' : 'enter';\n\n _this.removeClasses(node, type);\n\n _this.addClass(node, type, 'done');\n\n if (_this.props.onEntered) {\n _this.props.onEntered(maybeNode, maybeAppearing);\n }\n };\n\n _this.onExit = function (maybeNode) {\n var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument4[0];\n\n _this.removeClasses(node, 'appear');\n\n _this.removeClasses(node, 'enter');\n\n _this.addClass(node, 'exit', 'base');\n\n if (_this.props.onExit) {\n _this.props.onExit(maybeNode);\n }\n };\n\n _this.onExiting = function (maybeNode) {\n var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument5[0];\n\n _this.addClass(node, 'exit', 'active');\n\n if (_this.props.onExiting) {\n _this.props.onExiting(maybeNode);\n }\n };\n\n _this.onExited = function (maybeNode) {\n var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n node = _this$resolveArgument6[0];\n\n _this.removeClasses(node, 'exit');\n\n _this.addClass(node, 'exit', 'done');\n\n if (_this.props.onExited) {\n _this.props.onExited(maybeNode);\n }\n };\n\n _this.resolveArguments = function (maybeNode, maybeAppearing) {\n return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n : [maybeNode, maybeAppearing];\n };\n\n _this.getClassNames = function (type) {\n var classNames = _this.props.classNames;\n var isStringClassNames = typeof classNames === 'string';\n var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n return {\n baseClassName: baseClassName,\n activeClassName: activeClassName,\n doneClassName: doneClassName\n };\n };\n\n return _this;\n }\n\n var _proto = CSSTransition.prototype;\n\n _proto.addClass = function addClass(node, type, phase) {\n var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n var _this$getClassNames = this.getClassNames('enter'),\n doneClassName = _this$getClassNames.doneClassName;\n\n if (type === 'appear' && phase === 'done' && doneClassName) {\n className += \" \" + doneClassName;\n } // This is to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n\n\n if (phase === 'active') {\n /* eslint-disable no-unused-expressions */\n node && node.scrollTop;\n }\n\n if (className) {\n this.appliedClasses[type][phase] = className;\n\n _addClass(node, className);\n }\n };\n\n _proto.removeClasses = function removeClasses(node, type) {\n var _this$appliedClasses$ = this.appliedClasses[type],\n baseClassName = _this$appliedClasses$.base,\n activeClassName = _this$appliedClasses$.active,\n doneClassName = _this$appliedClasses$.done;\n this.appliedClasses[type] = {};\n\n if (baseClassName) {\n removeClass(node, baseClassName);\n }\n\n if (activeClassName) {\n removeClass(node, activeClassName);\n }\n\n if (doneClassName) {\n removeClass(node, doneClassName);\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n _ = _this$props.classNames,\n props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n onEnter: this.onEnter,\n onEntered: this.onEntered,\n onEntering: this.onEntering,\n onExit: this.onExit,\n onExiting: this.onExiting,\n onExited: this.onExited\n }));\n };\n\n return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n /**\n * The animation classNames applied to the component as it appears, enters,\n * exits or has finished the transition. A single name can be provided, which\n * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n *\n * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n *\n * A few details to note about how these classes are applied:\n *\n * 1. They are _joined_ with the ones that are already defined on the child\n * component, so if you want to add some base styles, you can use\n * `className` without worrying that it will be overridden.\n *\n * 2. If the transition component mounts with `in={false}`, no classes are\n * applied yet. You might be expecting `*-exit-done`, but if you think\n * about it, a component cannot finish exiting if it hasn't entered yet.\n *\n * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n * allows you to define different behavior for when appearing is done and\n * when regular entering is done, using selectors like\n * `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n * an epic entrance animation when element first appears in the DOM using\n * [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n * simply use `fade-enter-done` for defining both cases.\n *\n * Each individual classNames can also be specified independently like:\n *\n * ```js\n * classNames={{\n * appear: 'my-appear',\n * appearActive: 'my-active-appear',\n * appearDone: 'my-done-appear',\n * enter: 'my-enter',\n * enterActive: 'my-active-enter',\n * enterDone: 'my-done-enter',\n * exit: 'my-exit',\n * exitActive: 'my-active-exit',\n * exitDone: 'my-done-exit',\n * }}\n * ```\n *\n * If you want to set these classes using CSS Modules:\n *\n * ```js\n * import styles from './styles.css';\n * ```\n *\n * you might want to use camelCase in your CSS file, that way could simply\n * spread them instead of listing them one by one:\n *\n * ```js\n * classNames={{ ...styles }}\n * ```\n *\n * @type {string | {\n * appear?: string,\n * appearActive?: string,\n * appearDone?: string,\n * enter?: string,\n * enterActive?: string,\n * enterDone?: string,\n * exit?: string,\n * exitActive?: string,\n * exitDone?: string,\n * }}\n */\n classNames: classNamesShape,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEnter: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter-active' or\n * 'appear-active' class is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntering: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'enter' or\n * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n *\n * @type Function(node: HtmlElement, isAppearing: bool)\n */\n onEntered: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' class is\n * applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExit: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExiting: PropTypes.func,\n\n /**\n * A `<Transition>` callback fired immediately after the 'exit' classes\n * are **removed** and the `exit-done` class is added to the DOM node.\n *\n * **Note**: when `nodeRef` prop is passed, `node` is not passed\n *\n * @type Function(node: HtmlElement)\n */\n onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\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\n return self;\n}","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n var mapper = function mapper(child) {\n return mapFn && isValidElement(child) ? mapFn(child) : child;\n };\n\n var result = Object.create(null);\n if (children) Children.map(children, function (c) {\n return c;\n }).forEach(function (child) {\n // run the map function here instead so that the key is the computed one\n result[child.key] = mapper(child);\n });\n return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n prev = prev || {};\n next = next || {};\n\n function getValueForKey(key) {\n return key in next ? next[key] : prev[key];\n } // For each key of `next`, the list of keys to insert before that key in\n // the combined list\n\n\n var nextKeysPending = Object.create(null);\n var pendingKeys = [];\n\n for (var prevKey in prev) {\n if (prevKey in next) {\n if (pendingKeys.length) {\n nextKeysPending[prevKey] = pendingKeys;\n pendingKeys = [];\n }\n } else {\n pendingKeys.push(prevKey);\n }\n }\n\n var i;\n var childMapping = {};\n\n for (var nextKey in next) {\n if (nextKeysPending[nextKey]) {\n for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n var pendingNextKey = nextKeysPending[nextKey][i];\n childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n }\n }\n\n childMapping[nextKey] = getValueForKey(nextKey);\n } // Finally, add the keys which didn't appear before any key in `next`\n\n\n for (i = 0; i < pendingKeys.length; i++) {\n childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n }\n\n return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n return getChildMapping(props.children, function (child) {\n return cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n appear: getProp(child, 'appear', props),\n enter: getProp(child, 'enter', props),\n exit: getProp(child, 'exit', props)\n });\n });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n var nextChildMapping = getChildMapping(nextProps.children);\n var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n Object.keys(children).forEach(function (key) {\n var child = children[key];\n if (!isValidElement(child)) return;\n var hasPrev = (key in prevChildMapping);\n var hasNext = (key in nextChildMapping);\n var prevChild = prevChildMapping[key];\n var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n if (hasNext && (!hasPrev || isLeaving)) {\n // console.log('entering', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: true,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n } else if (!hasNext && hasPrev && !isLeaving) {\n // item is old (exiting)\n // console.log('leaving', key)\n children[key] = cloneElement(child, {\n in: false\n });\n } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n // item hasn't changed transition states\n // copy over the last transition props;\n // console.log('unchanged', key)\n children[key] = cloneElement(child, {\n onExited: onExited.bind(null, child),\n in: prevChild.props.in,\n exit: getProp(child, 'exit', nextProps),\n enter: getProp(child, 'enter', nextProps)\n });\n }\n });\n return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n return Object.keys(obj).map(function (k) {\n return obj[k];\n });\n};\n\nvar defaultProps = {\n component: 'div',\n childFactory: function childFactory(child) {\n return child;\n }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>` does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n _inheritsLoose(TransitionGroup, _React$Component);\n\n function TransitionGroup(props, context) {\n var _this;\n\n _this = _React$Component.call(this, props, context) || this;\n\n var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n _this.state = {\n contextValue: {\n isMounting: true\n },\n handleExited: handleExited,\n firstRender: true\n };\n return _this;\n }\n\n var _proto = TransitionGroup.prototype;\n\n _proto.componentDidMount = function componentDidMount() {\n this.mounted = true;\n this.setState({\n contextValue: {\n isMounting: false\n }\n });\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n this.mounted = false;\n };\n\n TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n var prevChildMapping = _ref.children,\n handleExited = _ref.handleExited,\n firstRender = _ref.firstRender;\n return {\n children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n firstRender: false\n };\n } // node is `undefined` when user provided `nodeRef` prop\n ;\n\n _proto.handleExited = function handleExited(child, node) {\n var currentChildMapping = getChildMapping(this.props.children);\n if (child.key in currentChildMapping) return;\n\n if (child.props.onExited) {\n child.props.onExited(node);\n }\n\n if (this.mounted) {\n this.setState(function (state) {\n var children = _extends({}, state.children);\n\n delete children[child.key];\n return {\n children: children\n };\n });\n }\n };\n\n _proto.render = function render() {\n var _this$props = this.props,\n Component = _this$props.component,\n childFactory = _this$props.childFactory,\n props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n var contextValue = this.state.contextValue;\n var children = values(this.state.children).map(childFactory);\n delete props.appear;\n delete props.enter;\n delete props.exit;\n\n if (Component === null) {\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, children);\n }\n\n return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n value: contextValue\n }, /*#__PURE__*/React.createElement(Component, props, children));\n };\n\n return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n /**\n * `<TransitionGroup>` renders a `<div>` by default. You can change this\n * behavior by providing a `component` prop.\n * If you use React v16+ and would like to avoid a wrapping `<div>` element\n * you can pass in `component={null}`. This is useful if the wrapping div\n * borks your css styles.\n */\n component: PropTypes.any,\n\n /**\n * A set of `<Transition>` components, that are toggled `in` and out as they\n * leave. the `<TransitionGroup>` will inject specific transition props, so\n * remember to spread them through if you are wrapping the `<Transition>` as\n * with our `<Fade>` example.\n *\n * While this component is meant for multiple `Transition` or `CSSTransition`\n * children, sometimes you may want to have a single transition child with\n * content that you want to be transitioned out and in when you change it\n * (e.g. routes, images etc.) In that case you can change the `key` prop of\n * the transition child as you change its content, this will cause\n * `TransitionGroup` to transition the child out and back in.\n */\n children: PropTypes.node,\n\n /**\n * A convenience prop that enables or disables appear animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n appear: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables enter animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n enter: PropTypes.bool,\n\n /**\n * A convenience prop that enables or disables exit animations\n * for all children. Note that specifying this will override any defaults set\n * on individual children Transitions.\n */\n exit: PropTypes.bool,\n\n /**\n * You may need to apply reactive updates to a child as it is exiting.\n * This is generally done by using `cloneElement` however in the case of an exiting\n * child the element has already been removed and not accessible to the consumer.\n *\n * If you do need to update a child as it leaves you can provide a `childFactory`\n * to wrap every child, even the ones that are leaving.\n *\n * @type Function(child: ReactElement) -> ReactElement\n */\n childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","export default function _taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n\n strings.raw = raw;\n return strings;\n}","function toVal(mix) {\n\tvar k, y, str='';\n\n\tif (typeof mix === 'string' || typeof mix === 'number') {\n\t\tstr += mix;\n\t} else if (typeof mix === 'object') {\n\t\tif (Array.isArray(mix)) {\n\t\t\tfor (k=0; k < mix.length; k++) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tif (y = toVal(mix[k])) {\n\t\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\t\tstr += y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (k in mix) {\n\t\t\t\tif (mix[k]) {\n\t\t\t\t\tstr && (str += ' ');\n\t\t\t\t\tstr += k;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn str;\n}\n\nexport default function () {\n\tvar i=0, tmp, x, str='';\n\twhile (i < arguments.length) {\n\t\tif (tmp = arguments[i++]) {\n\t\t\tif (x = toVal(tmp)) {\n\t\t\t\tstr && (str += ' ');\n\t\t\t\tstr += x\n\t\t\t}\n\t\t}\n\t}\n\treturn str;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport React from 'react';\n\n// During SSR, React emits a warning when calling useLayoutEffect.\n// Since neither useLayoutEffect nor useEffect run on the server,\n// we can suppress this by replace it with a noop on the server.\nexport const useLayoutEffect = typeof window !== 'undefined'\n ? React.useLayoutEffect\n : () => {};\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useSSRSafeId} from '@react-aria/ssr';\nimport {useValueEffect} from './';\n\nlet idsUpdaterMap: Map<string, (v: string) => void> = new Map();\n\n/**\n * If a default is not provided, generate an id.\n * @param defaultId - Default component id.\n */\nexport function useId(defaultId?: string): string {\n let isRendering = useRef(true);\n isRendering.current = true;\n let [value, setValue] = useState(defaultId);\n let nextId = useRef(null);\n\n let res = useSSRSafeId(value);\n\n // don't memo this, we want it new each render so that the Effects always run\n let updateValue = (val) => {\n if (!isRendering.current) {\n setValue(val);\n } else {\n nextId.current = val;\n }\n };\n\n idsUpdaterMap.set(res, updateValue);\n\n useLayoutEffect(() => {\n isRendering.current = false;\n }, [updateValue]);\n\n useLayoutEffect(() => {\n let r = res;\n return () => {\n idsUpdaterMap.delete(r);\n };\n }, [res]);\n\n useEffect(() => {\n let newId = nextId.current;\n if (newId) {\n setValue(newId);\n nextId.current = null;\n }\n }, [setValue, updateValue]);\n return res;\n}\n\n/**\n * Merges two ids.\n * Different ids will trigger a side-effect and re-render components hooked up with `useId`.\n */\nexport function mergeIds(idA: string, idB: string): string {\n if (idA === idB) {\n return idA;\n }\n\n let setIdA = idsUpdaterMap.get(idA);\n if (setIdA) {\n setIdA(idB);\n return idB;\n }\n\n let setIdB = idsUpdaterMap.get(idB);\n if (setIdB) {\n setIdB(idA);\n return idA;\n }\n\n return idB;\n}\n\n/**\n * Used to generate an id, and after render, check if that id is rendered so we know\n * if we can use it in places such as labelledby.\n * @param depArray - When to recalculate if the id is in the DOM.\n */\nexport function useSlotId(depArray: ReadonlyArray<any> = []): string {\n let id = useId();\n let [resolvedId, setResolvedId] = useValueEffect(id);\n let updateId = useCallback(() => {\n setResolvedId(function *() {\n yield id;\n\n yield document.getElementById(id) ? id : null;\n });\n }, [id, setResolvedId]);\n\n useLayoutEffect(updateId, [id, updateId, ...depArray]);\n\n return resolvedId;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/**\n * Calls all functions in the order they were chained with the same arguments.\n */\nexport function chain(...callbacks: any[]): (...args: any[]) => void {\n return (...args: any[]) => {\n for (let callback of callbacks) {\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {chain} from './chain';\nimport clsx from 'clsx';\nimport {mergeIds} from './useId';\n\ninterface Props {\n [key: string]: any\n}\n\n// taken from: https://stackoverflow.com/questions/51603250/typescript-3-parameter-list-intersection-type/51604379#51604379\ntype TupleTypes<T> = { [P in keyof T]: T[P] } extends { [key: number]: infer V } ? V : never;\n// eslint-disable-next-line no-undef, @typescript-eslint/no-unused-vars\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n/**\n * Merges multiple props objects together. Event handlers are chained,\n * classNames are combined, and ids are deduplicated - different ids\n * will trigger a side-effect and re-render components hooked up with `useId`.\n * For all other props, the last prop object overrides all previous ones.\n * @param args - Multiple sets of props to merge together.\n */\nexport function mergeProps<T extends Props[]>(...args: T): UnionToIntersection<TupleTypes<T>> {\n // Start with a base clone of the first argument. This is a lot faster than starting\n // with an empty object and adding properties as we go.\n let result: Props = {...args[0]};\n for (let i = 1; i < args.length; i++) {\n let props = args[i];\n for (let key in props) {\n let a = result[key];\n let b = props[key];\n\n // Chain events\n if (\n typeof a === 'function' &&\n typeof b === 'function' &&\n // This is a lot faster than a regex.\n key[0] === 'o' &&\n key[1] === 'n' &&\n key.charCodeAt(2) >= /* 'A' */ 65 &&\n key.charCodeAt(2) <= /* 'Z' */ 90\n ) {\n result[key] = chain(a, b);\n\n // Merge classnames, sometimes classNames are empty string which eval to false, so we just need to do a type check\n } else if (\n (key === 'className' || key === 'UNSAFE_className') &&\n typeof a === 'string' &&\n typeof b === 'string'\n ) {\n result[key] = clsx(a, b);\n } else if (key === 'id' && a && b) {\n result.id = mergeIds(a, b);\n // Override others\n } else {\n result[key] = b !== undefined ? b : a;\n }\n }\n }\n\n return result as UnionToIntersection<TupleTypes<T>>;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps} from '@react-types/shared';\nimport {HTMLAttributes} from 'react';\n\nconst DOMPropNames = new Set([\n 'id'\n]);\n\nconst labelablePropNames = new Set([\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n 'aria-details'\n]);\n\ninterface Options {\n /**\n * If labelling associated aria properties should be included in the filter.\n */\n labelable?: boolean,\n /**\n * A Set of other property names that should be included in the filter.\n */\n propNames?: Set<string>\n}\n\nconst propRe = /^(data-.*)$/;\n\n/**\n * Filters out all props that aren't valid DOM props or defined via override prop obj.\n * @param props - The component props to be filtered.\n * @param opts - Props to override.\n */\nexport function filterDOMProps(props: DOMProps & AriaLabelingProps, opts: Options = {}): DOMProps & AriaLabelingProps {\n let {labelable, propNames} = opts;\n let filteredProps: HTMLAttributes<HTMLElement> = {};\n\n for (const prop in props) {\n if (\n Object.prototype.hasOwnProperty.call(props, prop) && (\n DOMPropNames.has(prop) ||\n (labelable && labelablePropNames.has(prop)) ||\n propNames?.has(prop) ||\n propRe.test(prop)\n )\n ) {\n filteredProps[prop] = props[prop];\n }\n }\n\n return filteredProps;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// This is a polyfill for element.focus({preventScroll: true});\n// Currently necessary for Safari and old Edge:\n// https://caniuse.com/#feat=mdn-api_htmlelement_focus_preventscroll_option\n// See https://bugs.webkit.org/show_bug.cgi?id=178583\n//\n\n// Original licensing for the following methods can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/calvellido/focus-options-polyfill\n\ninterface ScrollableElement {\n element: HTMLElement,\n scrollTop: number,\n scrollLeft: number\n}\n\nexport function focusWithoutScrolling(element: HTMLElement) {\n if (supportsPreventScroll()) {\n element.focus({preventScroll: true});\n } else {\n let scrollableElements = getScrollableElements(element);\n element.focus();\n restoreScrollPosition(scrollableElements);\n }\n}\n\nlet supportsPreventScrollCached: boolean = null;\nfunction supportsPreventScroll() {\n if (supportsPreventScrollCached == null) {\n supportsPreventScrollCached = false;\n try {\n var focusElem = document.createElement('div');\n focusElem.focus({\n get preventScroll() {\n supportsPreventScrollCached = true;\n return true;\n }\n });\n } catch (e) {\n // Ignore\n }\n }\n\n return supportsPreventScrollCached;\n}\n\nfunction getScrollableElements(element: HTMLElement): ScrollableElement[] {\n var parent = element.parentNode;\n var scrollableElements: ScrollableElement[] = [];\n var rootScrollingElement = document.scrollingElement || document.documentElement;\n\n while (parent instanceof HTMLElement && parent !== rootScrollingElement) {\n if (\n parent.offsetHeight < parent.scrollHeight ||\n parent.offsetWidth < parent.scrollWidth\n ) {\n scrollableElements.push({\n element: parent,\n scrollTop: parent.scrollTop,\n scrollLeft: parent.scrollLeft\n });\n }\n parent = parent.parentNode;\n }\n\n if (rootScrollingElement instanceof HTMLElement) {\n scrollableElements.push({\n element: rootScrollingElement,\n scrollTop: rootScrollingElement.scrollTop,\n scrollLeft: rootScrollingElement.scrollLeft\n });\n }\n\n return scrollableElements;\n}\n\nfunction restoreScrollPosition(scrollableElements: ScrollableElement[]) {\n for (let {element, scrollTop, scrollLeft} of scrollableElements) {\n element.scrollTop = scrollTop;\n element.scrollLeft = scrollLeft;\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet transitionsByElement = new Map<EventTarget, Set<string>>();\n\n// A list of callbacks to call once there are no transitioning elements.\nlet transitionCallbacks = new Set<() => void>();\n\nfunction setupGlobalEvents() {\n if (typeof window === 'undefined') {\n return;\n }\n\n let onTransitionStart = (e: TransitionEvent) => {\n // Add the transitioning property to the list for this element.\n let transitions = transitionsByElement.get(e.target);\n if (!transitions) {\n transitions = new Set();\n transitionsByElement.set(e.target, transitions);\n\n // The transitioncancel event must be registered on the element itself, rather than as a global\n // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n e.target.addEventListener('transitioncancel', onTransitionEnd);\n }\n\n transitions.add(e.propertyName);\n };\n\n let onTransitionEnd = (e: TransitionEvent) => {\n // Remove property from list of transitioning properties.\n let properties = transitionsByElement.get(e.target);\n if (!properties) {\n return;\n }\n\n properties.delete(e.propertyName);\n\n // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n if (properties.size === 0) {\n e.target.removeEventListener('transitioncancel', onTransitionEnd);\n transitionsByElement.delete(e.target);\n }\n\n // If no transitioning elements, call all of the queued callbacks.\n if (transitionsByElement.size === 0) {\n for (let cb of transitionCallbacks) {\n cb();\n }\n\n transitionCallbacks.clear();\n }\n };\n\n document.body.addEventListener('transitionrun', onTransitionStart);\n document.body.addEventListener('transitionend', onTransitionEnd);\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState !== 'loading') {\n setupGlobalEvents();\n } else {\n document.addEventListener('DOMContentLoaded', setupGlobalEvents);\n }\n}\n\nexport function runAfterTransition(fn: () => void) {\n // Wait one frame to see if an animation starts, e.g. a transition on mount.\n requestAnimationFrame(() => {\n // If no transitions are running, call the function immediately.\n // Otherwise, add it to a list of callbacks to run at the end of the animation.\n if (transitionsByElement.size === 0) {\n fn();\n } else {\n transitionCallbacks.add(fn);\n }\n });\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {MutableRefObject, RefObject} from 'react';\nimport {useLayoutEffect} from './';\n\ninterface ContextValue<T> {\n ref?: MutableRefObject<T>\n}\n\n// Syncs ref from context with ref passed to hook\nexport function useSyncRef<T>(context: ContextValue<T>, ref: RefObject<T>) {\n useLayoutEffect(() => {\n if (context && context.ref && ref) {\n context.ref.current = ref.current;\n return () => {\n context.ref.current = null;\n };\n }\n }, [context, ref]);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useEffect, useState} from 'react';\n\ninterface ViewportSize {\n width: number,\n height: number\n}\n\n// @ts-ignore\nlet visualViewport = typeof window !== 'undefined' && window.visualViewport;\n\nexport function useViewportSize(): ViewportSize {\n let [size, setSize] = useState(() => getViewportSize());\n\n useEffect(() => {\n // Use visualViewport api to track available height even on iOS virtual keyboard opening\n let onResize = () => {\n setSize(size => {\n let newSize = getViewportSize();\n if (newSize.width === size.width && newSize.height === size.height) {\n return size;\n }\n return newSize;\n });\n };\n\n if (!visualViewport) {\n window.addEventListener('resize', onResize);\n } else {\n visualViewport.addEventListener('resize', onResize);\n }\n\n return () => {\n if (!visualViewport) {\n window.removeEventListener('resize', onResize);\n } else {\n visualViewport.removeEventListener('resize', onResize);\n }\n };\n }, []);\n\n return size;\n}\n\nfunction getViewportSize(): ViewportSize {\n return {\n width: visualViewport?.width || window.innerWidth,\n height: visualViewport?.height || window.innerHeight\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps} from '@react-types/shared';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useState} from 'react';\n\nlet descriptionId = 0;\nconst descriptionNodes = new Map<string, {refCount: number, element: HTMLElement}>();\n\nexport function useDescription(description: string): AriaLabelingProps {\n let [id, setId] = useState(null);\n\n useLayoutEffect(() => {\n if (!description) {\n return;\n }\n\n let desc = descriptionNodes.get(description);\n if (!desc) {\n let id = `react-aria-description-${descriptionId++}`;\n setId(id);\n\n let node = document.createElement('div');\n node.id = id;\n node.style.display = 'none';\n node.textContent = description;\n document.body.appendChild(node);\n desc = {refCount: 0, element: node};\n descriptionNodes.set(description, desc);\n } else {\n setId(desc.element.id);\n }\n\n desc.refCount++;\n return () => {\n if (--desc.refCount === 0) {\n desc.element.remove();\n descriptionNodes.delete(description);\n }\n };\n }, [description]);\n\n return {\n 'aria-describedby': description ? id : undefined\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nfunction testUserAgent(re: RegExp) {\n return typeof window !== 'undefined' && window.navigator != null\n ? re.test(window.navigator.userAgent)\n : false;\n}\n\nfunction testPlatform(re: RegExp) {\n return typeof window !== 'undefined' && window.navigator != null\n ? re.test(window.navigator.platform)\n : false;\n}\n\nexport function isMac() {\n return testPlatform(/^Mac/);\n}\n\nexport function isIPhone() {\n return testPlatform(/^iPhone/);\n}\n\nexport function isIPad() {\n return testPlatform(/^iPad/) ||\n // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n (isMac() && navigator.maxTouchPoints > 1);\n}\n\nexport function isIOS() {\n return isIPhone() || isIPad();\n}\n\nexport function isAppleDevice() {\n return isMac() || isIOS();\n}\n\nexport function isWebKit() {\n return testUserAgent(/AppleWebKit/) && !isChrome();\n}\n\nexport function isChrome() {\n return testUserAgent(/Chrome/);\n}\n\nexport function isAndroid() {\n return testUserAgent(/Android/);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {isIOS, runAfterTransition} from '@react-aria/utils';\n\n// Safari on iOS starts selecting text on long press. The only way to avoid this, it seems,\n// is to add user-select: none to the entire page. Adding it to the pressable element prevents\n// that element from being selected, but nearby elements may still receive selection. We add\n// user-select: none on touch start, and remove it again on touch end to prevent this.\n// This must be implemented using global state to avoid race conditions between multiple elements.\n\n// There are three possible states due to the delay before removing user-select: none after\n// pointer up. The 'default' state always transitions to the 'disabled' state, which transitions\n// to 'restoring'. The 'restoring' state can either transition back to 'disabled' or 'default'.\n\n// For non-iOS devices, we apply user-select: none to the pressed element instead to avoid possible\n// performance issues that arise from applying and removing user-select: none to the entire page\n// (see https://github.com/adobe/react-spectrum/issues/1609).\ntype State = 'default' | 'disabled' | 'restoring';\n\n// Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element\n// rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually\nlet state: State = 'default';\nlet savedUserSelect = '';\nlet modifiedElementMap = new WeakMap<HTMLElement, string>();\n\nexport function disableTextSelection(target?: HTMLElement) {\n if (isIOS()) {\n if (state === 'default') {\n savedUserSelect = document.documentElement.style.webkitUserSelect;\n document.documentElement.style.webkitUserSelect = 'none';\n }\n\n state = 'disabled';\n } else if (target) {\n // If not iOS, store the target's original user-select and change to user-select: none\n // Ignore state since it doesn't apply for non iOS\n modifiedElementMap.set(target, target.style.userSelect);\n target.style.userSelect = 'none';\n }\n}\n\nexport function restoreTextSelection(target?: HTMLElement) {\n if (isIOS()) {\n // If the state is already default, there's nothing to do.\n // If it is restoring, then there's no need to queue a second restore.\n if (state !== 'disabled') {\n return;\n }\n\n state = 'restoring';\n\n // There appears to be a delay on iOS where selection still might occur\n // after pointer up, so wait a bit before removing user-select.\n setTimeout(() => {\n // Wait for any CSS transitions to complete so we don't recompute style\n // for the whole page in the middle of the animation and cause jank.\n runAfterTransition(() => {\n // Avoid race conditions\n if (state === 'restoring') {\n if (document.documentElement.style.webkitUserSelect === 'none') {\n document.documentElement.style.webkitUserSelect = savedUserSelect || '';\n }\n\n savedUserSelect = '';\n state = 'default';\n }\n });\n }, 300);\n } else {\n // If not iOS, restore the target's original user-select if any\n // Ignore state since it doesn't apply for non iOS\n if (target && modifiedElementMap.has(target)) {\n let targetOldUserSelect = modifiedElementMap.get(target);\n\n if (target.style.userSelect === 'none') {\n target.style.userSelect = targetOldUserSelect;\n }\n\n if (target.getAttribute('style') === '') {\n target.removeAttribute('style');\n }\n modifiedElementMap.delete(target);\n }\n }\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Original licensing for the following method can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/blob/3c713d513195a53788b3f8bb4b70279d68b15bcc/packages/react-interactions/events/src/dom/shared/index.js#L74-L87\n\n// Keyboards, Assistive Technologies, and element.click() all produce a \"virtual\"\n// click event. This is a method of inferring such clicks. Every browser except\n// IE 11 only sets a zero value of \"detail\" for click events that are \"virtual\".\n// However, IE 11 uses a zero value for all click events. For IE 11 we rely on\n// the quirk that it produces click events that are of type PointerEvent, and\n// where only the \"virtual\" click lacks a pointerType field.\n\nexport function isVirtualClick(event: MouseEvent | PointerEvent): boolean {\n // JAWS/NVDA with Firefox.\n if ((event as any).mozInputSource === 0 && event.isTrusted) {\n return true;\n }\n\n return event.detail === 0 && !(event as PointerEvent).pointerType;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {PressProps} from './usePress';\nimport React, {MutableRefObject} from 'react';\n\ninterface IPressResponderContext extends PressProps {\n register(): void,\n ref?: MutableRefObject<HTMLElement>\n}\n\nexport const PressResponderContext = React.createContext<IPressResponderContext>(null);\nPressResponderContext.displayName = 'PressResponderContext';\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {disableTextSelection, restoreTextSelection} from './textSelection';\nimport {focusWithoutScrolling, mergeProps, useGlobalListeners, useSyncRef} from '@react-aria/utils';\nimport {HTMLAttributes, RefObject, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {isVirtualClick} from './utils';\nimport {PointerType, PressEvents} from '@react-types/shared';\nimport {PressResponderContext} from './context';\n\nexport interface PressProps extends PressEvents {\n /** Whether the target is in a controlled press state (e.g. an overlay it triggers is open). */\n isPressed?: boolean,\n /** Whether the press events should be disabled. */\n isDisabled?: boolean,\n /** Whether the target should not receive focus on press. */\n preventFocusOnPress?: boolean,\n /**\n * Whether press events should be canceled when the pointer leaves the target while pressed.\n * By default, this is `false`, which means if the pointer returns back over the target while\n * still pressed, onPressStart will be fired again. If set to `true`, the press is canceled\n * when the pointer leaves the target and onPressStart will not be fired if the pointer returns.\n */\n shouldCancelOnPointerExit?: boolean,\n /** Whether text selection should be enabled on the pressable element. */\n allowTextSelectionOnPress?: boolean\n}\n\nexport interface PressHookProps extends PressProps {\n /** A ref to the target element. */\n ref?: RefObject<HTMLElement>\n}\n\ninterface PressState {\n isPressed: boolean,\n ignoreEmulatedMouseEvents: boolean,\n ignoreClickAfterPress: boolean,\n didFirePressStart: boolean,\n activePointerId: any,\n target: HTMLElement | null,\n isOverTarget: boolean,\n pointerType: PointerType,\n userSelect?: string\n}\n\ninterface EventBase {\n currentTarget: EventTarget,\n shiftKey: boolean,\n ctrlKey: boolean,\n metaKey: boolean,\n altKey: boolean\n}\n\nexport interface PressResult {\n /** Whether the target is currently pressed. */\n isPressed: boolean,\n /** Props to spread on the target element. */\n pressProps: HTMLAttributes<HTMLElement>\n}\n\nfunction usePressResponderContext(props: PressHookProps): PressHookProps {\n // Consume context from <PressResponder> and merge with props.\n let context = useContext(PressResponderContext);\n if (context) {\n let {register, ...contextProps} = context;\n props = mergeProps(contextProps, props) as PressHookProps;\n register();\n }\n useSyncRef(context, props.ref);\n\n return props;\n}\n\n/**\n * Handles press interactions across mouse, touch, keyboard, and screen readers.\n * It normalizes behavior across browsers and platforms, and handles many nuances\n * of dealing with pointer and keyboard events.\n */\nexport function usePress(props: PressHookProps): PressResult {\n let {\n onPress,\n onPressChange,\n onPressStart,\n onPressEnd,\n onPressUp,\n isDisabled,\n isPressed: isPressedProp,\n preventFocusOnPress,\n shouldCancelOnPointerExit,\n allowTextSelectionOnPress,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ref: _, // Removing `ref` from `domProps` because TypeScript is dumb,\n ...domProps\n } = usePressResponderContext(props);\n let propsRef = useRef<PressHookProps>(null);\n propsRef.current = {onPress, onPressChange, onPressStart, onPressEnd, onPressUp, isDisabled, shouldCancelOnPointerExit};\n\n let [isPressed, setPressed] = useState(false);\n let ref = useRef<PressState>({\n isPressed: false,\n ignoreEmulatedMouseEvents: false,\n ignoreClickAfterPress: false,\n didFirePressStart: false,\n activePointerId: null,\n target: null,\n isOverTarget: false,\n pointerType: null\n });\n\n let {addGlobalListener, removeAllGlobalListeners} = useGlobalListeners();\n\n let pressProps = useMemo(() => {\n let state = ref.current;\n let triggerPressStart = (originalEvent: EventBase, pointerType: PointerType) => {\n let {onPressStart, onPressChange, isDisabled} = propsRef.current;\n if (isDisabled || state.didFirePressStart) {\n return;\n }\n\n if (onPressStart) {\n onPressStart({\n type: 'pressstart',\n pointerType,\n target: originalEvent.currentTarget as HTMLElement,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey\n });\n }\n\n if (onPressChange) {\n onPressChange(true);\n }\n\n state.didFirePressStart = true;\n setPressed(true);\n };\n\n let triggerPressEnd = (originalEvent: EventBase, pointerType: PointerType, wasPressed = true) => {\n let {onPressEnd, onPressChange, onPress, isDisabled} = propsRef.current;\n if (!state.didFirePressStart) {\n return;\n }\n\n state.ignoreClickAfterPress = true;\n state.didFirePressStart = false;\n\n if (onPressEnd) {\n onPressEnd({\n type: 'pressend',\n pointerType,\n target: originalEvent.currentTarget as HTMLElement,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey\n });\n }\n\n if (onPressChange) {\n onPressChange(false);\n }\n\n setPressed(false);\n\n if (onPress && wasPressed && !isDisabled) {\n onPress({\n type: 'press',\n pointerType,\n target: originalEvent.currentTarget as HTMLElement,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey\n });\n }\n };\n\n let triggerPressUp = (originalEvent: EventBase, pointerType: PointerType) => {\n let {onPressUp, isDisabled} = propsRef.current;\n if (isDisabled) {\n return;\n }\n\n if (onPressUp) {\n onPressUp({\n type: 'pressup',\n pointerType,\n target: originalEvent.currentTarget as HTMLElement,\n shiftKey: originalEvent.shiftKey,\n metaKey: originalEvent.metaKey,\n ctrlKey: originalEvent.ctrlKey,\n altKey: originalEvent.altKey\n });\n }\n };\n\n let cancel = (e: EventBase) => {\n if (state.isPressed) {\n if (state.isOverTarget) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n }\n state.isPressed = false;\n state.isOverTarget = false;\n state.activePointerId = null;\n state.pointerType = null;\n removeAllGlobalListeners();\n if (!allowTextSelectionOnPress) {\n restoreTextSelection(state.target);\n }\n }\n };\n\n let pressProps: HTMLAttributes<HTMLElement> = {\n onKeyDown(e) {\n if (isValidKeyboardEvent(e.nativeEvent) && e.currentTarget.contains(e.target as HTMLElement)) {\n e.preventDefault();\n e.stopPropagation();\n\n // If the event is repeating, it may have started on a different element\n // after which focus moved to the current element. Ignore these events and\n // only handle the first key down event.\n if (!state.isPressed && !e.repeat) {\n state.target = e.currentTarget as HTMLElement;\n state.isPressed = true;\n triggerPressStart(e, 'keyboard');\n\n // Focus may move before the key up event, so register the event on the document\n // instead of the same element where the key down event occurred.\n addGlobalListener(document, 'keyup', onKeyUp, false);\n }\n }\n },\n onKeyUp(e) {\n if (isValidKeyboardEvent(e.nativeEvent) && !e.repeat && e.currentTarget.contains(e.target as HTMLElement)) {\n triggerPressUp(createEvent(state.target, e), 'keyboard');\n }\n },\n onClick(e) {\n if (e && !e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n if (e && e.button === 0) {\n e.stopPropagation();\n if (isDisabled) {\n e.preventDefault();\n }\n\n // If triggered from a screen reader or by using element.click(),\n // trigger as if it were a keyboard click.\n if (!state.ignoreClickAfterPress && !state.ignoreEmulatedMouseEvents && (state.pointerType === 'virtual' || isVirtualClick(e.nativeEvent))) {\n // Ensure the element receives focus (VoiceOver on iOS does not do this)\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n triggerPressStart(e, 'virtual');\n triggerPressUp(e, 'virtual');\n triggerPressEnd(e, 'virtual');\n }\n\n state.ignoreEmulatedMouseEvents = false;\n state.ignoreClickAfterPress = false;\n }\n }\n };\n\n let onKeyUp = (e: KeyboardEvent) => {\n if (state.isPressed && isValidKeyboardEvent(e)) {\n e.preventDefault();\n e.stopPropagation();\n\n state.isPressed = false;\n let target = e.target as HTMLElement;\n triggerPressEnd(createEvent(state.target, e), 'keyboard', state.target.contains(target));\n removeAllGlobalListeners();\n\n // If the target is a link, trigger the click method to open the URL,\n // but defer triggering pressEnd until onClick event handler.\n if (state.target.contains(target) && isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') {\n state.target.click();\n }\n }\n };\n\n if (typeof PointerEvent !== 'undefined') {\n pressProps.onPointerDown = (e) => {\n // Only handle left clicks, and ignore events that bubbled through portals.\n if (e.button !== 0 || !e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.\n // Ignore and let the onClick handler take care of it instead.\n // https://bugs.webkit.org/show_bug.cgi?id=222627\n // https://bugs.webkit.org/show_bug.cgi?id=223202\n if (isVirtualPointerEvent(e.nativeEvent)) {\n state.pointerType = 'virtual';\n return;\n }\n\n // Due to browser inconsistencies, especially on mobile browsers, we prevent\n // default on pointer down and handle focusing the pressable element ourselves.\n if (shouldPreventDefault(e.target as Element)) {\n e.preventDefault();\n }\n\n state.pointerType = e.pointerType;\n\n e.stopPropagation();\n if (!state.isPressed) {\n state.isPressed = true;\n state.isOverTarget = true;\n state.activePointerId = e.pointerId;\n state.target = e.currentTarget;\n\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n if (!allowTextSelectionOnPress) {\n disableTextSelection(state.target);\n }\n\n triggerPressStart(e, state.pointerType);\n\n addGlobalListener(document, 'pointermove', onPointerMove, false);\n addGlobalListener(document, 'pointerup', onPointerUp, false);\n addGlobalListener(document, 'pointercancel', onPointerCancel, false);\n }\n };\n\n pressProps.onMouseDown = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n if (e.button === 0) {\n // Chrome and Firefox on touch Windows devices require mouse down events\n // to be canceled in addition to pointer events, or an extra asynchronous\n // focus event will be fired.\n if (shouldPreventDefault(e.target as Element)) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n }\n };\n\n pressProps.onPointerUp = (e) => {\n // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.\n if (!e.currentTarget.contains(e.target as HTMLElement) || state.pointerType === 'virtual') {\n return;\n }\n\n // Only handle left clicks\n // Safari on iOS sometimes fires pointerup events, even\n // when the touch isn't over the target, so double check.\n if (e.button === 0 && isOverTarget(e, e.currentTarget)) {\n triggerPressUp(e, state.pointerType || e.pointerType);\n }\n };\n\n // Safari on iOS < 13.2 does not implement pointerenter/pointerleave events correctly.\n // Use pointer move events instead to implement our own hit testing.\n // See https://bugs.webkit.org/show_bug.cgi?id=199803\n let onPointerMove = (e: PointerEvent) => {\n if (e.pointerId !== state.activePointerId) {\n return;\n }\n\n if (isOverTarget(e, state.target)) {\n if (!state.isOverTarget) {\n state.isOverTarget = true;\n triggerPressStart(createEvent(state.target, e), state.pointerType);\n }\n } else if (state.isOverTarget) {\n state.isOverTarget = false;\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n if (propsRef.current.shouldCancelOnPointerExit) {\n cancel(e);\n }\n }\n };\n\n let onPointerUp = (e: PointerEvent) => {\n if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0) {\n if (isOverTarget(e, state.target)) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType);\n } else if (state.isOverTarget) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n }\n\n state.isPressed = false;\n state.isOverTarget = false;\n state.activePointerId = null;\n state.pointerType = null;\n removeAllGlobalListeners();\n if (!allowTextSelectionOnPress) {\n restoreTextSelection(state.target);\n }\n }\n };\n\n let onPointerCancel = (e: PointerEvent) => {\n cancel(e);\n };\n\n pressProps.onDragStart = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.\n cancel(e);\n };\n } else {\n pressProps.onMouseDown = (e) => {\n // Only handle left clicks\n if (e.button !== 0 || !e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n // Due to browser inconsistencies, especially on mobile browsers, we prevent\n // default on mouse down and handle focusing the pressable element ourselves.\n if (shouldPreventDefault(e.target as Element)) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n if (state.ignoreEmulatedMouseEvents) {\n return;\n }\n\n state.isPressed = true;\n state.isOverTarget = true;\n state.target = e.currentTarget;\n state.pointerType = isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse';\n\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n triggerPressStart(e, state.pointerType);\n\n addGlobalListener(document, 'mouseup', onMouseUp, false);\n };\n\n pressProps.onMouseEnter = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n e.stopPropagation();\n if (state.isPressed && !state.ignoreEmulatedMouseEvents) {\n state.isOverTarget = true;\n triggerPressStart(e, state.pointerType);\n }\n };\n\n pressProps.onMouseLeave = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n e.stopPropagation();\n if (state.isPressed && !state.ignoreEmulatedMouseEvents) {\n state.isOverTarget = false;\n triggerPressEnd(e, state.pointerType, false);\n if (propsRef.current.shouldCancelOnPointerExit) {\n cancel(e);\n }\n }\n };\n\n pressProps.onMouseUp = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n if (!state.ignoreEmulatedMouseEvents && e.button === 0) {\n triggerPressUp(e, state.pointerType);\n }\n };\n\n let onMouseUp = (e: MouseEvent) => {\n // Only handle left clicks\n if (e.button !== 0) {\n return;\n }\n\n state.isPressed = false;\n removeAllGlobalListeners();\n\n if (state.ignoreEmulatedMouseEvents) {\n state.ignoreEmulatedMouseEvents = false;\n return;\n }\n\n if (isOverTarget(e, state.target)) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType);\n } else if (state.isOverTarget) {\n triggerPressEnd(createEvent(state.target, e), state.pointerType, false);\n }\n\n state.isOverTarget = false;\n };\n\n pressProps.onTouchStart = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n e.stopPropagation();\n let touch = getTouchFromEvent(e.nativeEvent);\n if (!touch) {\n return;\n }\n state.activePointerId = touch.identifier;\n state.ignoreEmulatedMouseEvents = true;\n state.isOverTarget = true;\n state.isPressed = true;\n state.target = e.currentTarget;\n state.pointerType = 'touch';\n\n // Due to browser inconsistencies, especially on mobile browsers, we prevent default\n // on the emulated mouse event and handle focusing the pressable element ourselves.\n if (!isDisabled && !preventFocusOnPress) {\n focusWithoutScrolling(e.currentTarget);\n }\n\n if (!allowTextSelectionOnPress) {\n disableTextSelection(state.target);\n }\n\n triggerPressStart(e, state.pointerType);\n\n addGlobalListener(window, 'scroll', onScroll, true);\n };\n\n pressProps.onTouchMove = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n e.stopPropagation();\n if (!state.isPressed) {\n return;\n }\n\n let touch = getTouchById(e.nativeEvent, state.activePointerId);\n if (touch && isOverTarget(touch, e.currentTarget)) {\n if (!state.isOverTarget) {\n state.isOverTarget = true;\n triggerPressStart(e, state.pointerType);\n }\n } else if (state.isOverTarget) {\n state.isOverTarget = false;\n triggerPressEnd(e, state.pointerType, false);\n if (propsRef.current.shouldCancelOnPointerExit) {\n cancel(e);\n }\n }\n };\n\n pressProps.onTouchEnd = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n e.stopPropagation();\n if (!state.isPressed) {\n return;\n }\n\n let touch = getTouchById(e.nativeEvent, state.activePointerId);\n if (touch && isOverTarget(touch, e.currentTarget)) {\n triggerPressUp(e, state.pointerType);\n triggerPressEnd(e, state.pointerType);\n } else if (state.isOverTarget) {\n triggerPressEnd(e, state.pointerType, false);\n }\n\n state.isPressed = false;\n state.activePointerId = null;\n state.isOverTarget = false;\n state.ignoreEmulatedMouseEvents = true;\n if (!allowTextSelectionOnPress) {\n restoreTextSelection(state.target);\n }\n removeAllGlobalListeners();\n };\n\n pressProps.onTouchCancel = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n e.stopPropagation();\n if (state.isPressed) {\n cancel(e);\n }\n };\n\n let onScroll = (e: Event) => {\n if (state.isPressed && (e.target as HTMLElement).contains(state.target)) {\n cancel({\n currentTarget: state.target,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false,\n altKey: false\n });\n }\n };\n\n pressProps.onDragStart = (e) => {\n if (!e.currentTarget.contains(e.target as HTMLElement)) {\n return;\n }\n\n cancel(e);\n };\n }\n\n return pressProps;\n }, [addGlobalListener, isDisabled, preventFocusOnPress, removeAllGlobalListeners, allowTextSelectionOnPress]);\n\n // Remove user-select: none in case component unmounts immediately after pressStart\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return () => {\n if (!allowTextSelectionOnPress) {\n restoreTextSelection(ref.current.target);\n }\n };\n }, [allowTextSelectionOnPress]);\n\n return {\n isPressed: isPressedProp || isPressed,\n pressProps: mergeProps(domProps, pressProps)\n };\n}\n\nfunction isHTMLAnchorLink(target: HTMLElement): boolean {\n return target.tagName === 'A' && target.hasAttribute('href');\n}\n\nfunction isValidKeyboardEvent(event: KeyboardEvent): boolean {\n const {key, code, target} = event;\n const element = target as HTMLElement;\n const {tagName, isContentEditable} = element;\n const role = element.getAttribute('role');\n // Accessibility for keyboards. Space and Enter only.\n // \"Spacebar\" is for IE 11\n return (\n (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') &&\n (tagName !== 'INPUT' &&\n tagName !== 'TEXTAREA' &&\n isContentEditable !== true) &&\n // A link with a valid href should be handled natively,\n // unless it also has role='button' and was triggered using Space.\n (!isHTMLAnchorLink(element) || (role === 'button' && key !== 'Enter')) &&\n // An element with role='link' should only trigger with Enter key\n !(role === 'link' && key !== 'Enter')\n );\n}\n\nfunction getTouchFromEvent(event: TouchEvent): Touch | null {\n const {targetTouches} = event;\n if (targetTouches.length > 0) {\n return targetTouches[0];\n }\n return null;\n}\n\nfunction getTouchById(\n event: TouchEvent,\n pointerId: null | number\n): null | Touch {\n const changedTouches = event.changedTouches;\n for (let i = 0; i < changedTouches.length; i++) {\n const touch = changedTouches[i];\n if (touch.identifier === pointerId) {\n return touch;\n }\n }\n return null;\n}\n\nfunction createEvent(target: HTMLElement, e: EventBase): EventBase {\n return {\n currentTarget: target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey\n };\n}\n\ninterface Rect {\n top: number,\n right: number,\n bottom: number,\n left: number\n}\n\ninterface EventPoint {\n clientX: number,\n clientY: number,\n width?: number,\n height?: number,\n radiusX?: number,\n radiusY?: number\n}\n\nfunction getPointClientRect(point: EventPoint): Rect {\n let offsetX = (point.width / 2) || point.radiusX || 0;\n let offsetY = (point.height / 2) || point.radiusY || 0;\n\n return {\n top: point.clientY - offsetY,\n right: point.clientX + offsetX,\n bottom: point.clientY + offsetY,\n left: point.clientX - offsetX\n };\n}\n\nfunction areRectanglesOverlapping(a: Rect, b: Rect) {\n // check if they cannot overlap on x axis\n if (a.left > b.right || b.left > a.right) {\n return false;\n }\n // check if they cannot overlap on y axis\n if (a.top > b.bottom || b.top > a.bottom) {\n return false;\n }\n return true;\n}\n\nfunction isOverTarget(point: EventPoint, target: HTMLElement) {\n let rect = target.getBoundingClientRect();\n let pointRect = getPointClientRect(point);\n return areRectanglesOverlapping(rect, pointRect);\n}\n\nfunction shouldPreventDefault(target: Element) {\n // We cannot prevent default if the target is inside a draggable element.\n return !target.closest('[draggable=\"true\"]');\n}\n\nfunction isVirtualPointerEvent(event: PointerEvent) {\n // If the pointer size is zero, then we assume it's from a screen reader.\n // Android TalkBack double tap will sometimes return a event with width and height of 1\n // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216\n return (\n (event.width === 0 && event.height === 0) ||\n (event.width === 1 &&\n event.height === 1 &&\n event.pressure === 0 &&\n event.detail === 0\n )\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef} from 'react';\n\ninterface GlobalListeners {\n addGlobalListener<K extends keyof DocumentEventMap>(el: EventTarget, type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void,\n addGlobalListener(el: EventTarget, type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void,\n removeGlobalListener<K extends keyof DocumentEventMap>(el: EventTarget, type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void,\n removeGlobalListener(el: EventTarget, type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void,\n removeAllGlobalListeners(): void\n}\n\nexport function useGlobalListeners(): GlobalListeners {\n let globalListeners = useRef(new Map());\n let addGlobalListener = useCallback((eventTarget, type, listener, options) => {\n // Make sure we remove the listener after it is called with the `once` option.\n let fn = options?.once ? (...args) => {\n globalListeners.current.delete(listener);\n listener(...args);\n } : listener;\n globalListeners.current.set(listener, {type, eventTarget, fn, options});\n eventTarget.addEventListener(type, listener, options);\n }, []);\n let removeGlobalListener = useCallback((eventTarget, type, listener, options) => {\n let fn = globalListeners.current.get(listener)?.fn || listener;\n eventTarget.removeEventListener(type, fn, options);\n globalListeners.current.delete(listener);\n }, []);\n let removeAllGlobalListeners = useCallback(() => {\n globalListeners.current.forEach((value, key) => {\n removeGlobalListener(value.eventTarget, value.type, key, value.options);\n });\n }, [removeGlobalListener]);\n\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return removeAllGlobalListeners;\n }, [removeAllGlobalListeners]);\n\n return {addGlobalListener, removeGlobalListener, removeAllGlobalListeners};\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {isMac} from '@react-aria/utils';\nimport {isVirtualClick} from './utils';\nimport {useEffect, useState} from 'react';\n\ntype Modality = 'keyboard' | 'pointer' | 'virtual';\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\ntype FocusVisibleHandler = (isFocusVisible: boolean) => void;\ninterface FocusVisibleProps {\n /** Whether the element is a text input. */\n isTextInput?: boolean,\n /** Whether the element will be auto focused. */\n autoFocus?: boolean\n}\n\ninterface FocusVisibleResult {\n /** Whether keyboard focus is visible globally. */\n isFocusVisible: boolean\n}\n\nlet currentModality = null;\nlet changeHandlers = new Set<Handler>();\nlet hasSetupGlobalListeners = false;\nlet hasEventBeforeFocus = false;\nlet hasBlurredWindowRecently = false;\n\n// Only Tab or Esc keys will make focus visible on text input elements\nconst FOCUS_VISIBLE_INPUT_KEYS = {\n Tab: true,\n Escape: true\n};\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n for (let handler of changeHandlers) {\n handler(modality, e);\n }\n}\n\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */\nfunction isValidKey(e: KeyboardEvent) {\n // Control and Shift keys trigger when navigating back to the tab with keyboard.\n return !(e.metaKey || (!isMac() && e.altKey) || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\n\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n hasEventBeforeFocus = true;\n if (isValidKey(e)) {\n currentModality = 'keyboard';\n triggerChangeHandlers('keyboard', e);\n }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n currentModality = 'pointer';\n if (e.type === 'mousedown' || e.type === 'pointerdown') {\n hasEventBeforeFocus = true;\n triggerChangeHandlers('pointer', e);\n }\n}\n\nfunction handleClickEvent(e: MouseEvent) {\n if (isVirtualClick(e)) {\n hasEventBeforeFocus = true;\n currentModality = 'virtual';\n }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n // Firefox fires two extra focus events when the user first clicks into an iframe:\n // first on the window, then on the document. We ignore these events so they don't\n // cause keyboard focus rings to appear.\n if (e.target === window || e.target === document) {\n return;\n }\n\n // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {\n currentModality = 'virtual';\n triggerChangeHandlers('virtual', e);\n }\n\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = false;\n}\n\nfunction handleWindowBlur() {\n // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n // for example, since a subsequent focus event won't be fired.\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = true;\n}\n\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */\nfunction setupGlobalFocusEvents() {\n if (typeof window === 'undefined' || hasSetupGlobalListeners) {\n return;\n }\n\n // Programmatic focus() calls shouldn't affect the current input modality.\n // However, we need to detect other cases when a focus event occurs without\n // a preceding user event (e.g. screen reader focus). Overriding the focus\n // method on HTMLElement.prototype is a bit hacky, but works.\n let focus = HTMLElement.prototype.focus;\n HTMLElement.prototype.focus = function () {\n hasEventBeforeFocus = true;\n focus.apply(this, arguments);\n };\n\n document.addEventListener('keydown', handleKeyboardEvent, true);\n document.addEventListener('keyup', handleKeyboardEvent, true);\n document.addEventListener('click', handleClickEvent, true);\n\n // Register focus events on the window so they are sure to happen\n // before React's event listeners (registered on the document).\n window.addEventListener('focus', handleFocusEvent, true);\n window.addEventListener('blur', handleWindowBlur, false);\n\n if (typeof PointerEvent !== 'undefined') {\n document.addEventListener('pointerdown', handlePointerEvent, true);\n document.addEventListener('pointermove', handlePointerEvent, true);\n document.addEventListener('pointerup', handlePointerEvent, true);\n } else {\n document.addEventListener('mousedown', handlePointerEvent, true);\n document.addEventListener('mousemove', handlePointerEvent, true);\n document.addEventListener('mouseup', handlePointerEvent, true);\n }\n\n hasSetupGlobalListeners = true;\n}\n\nif (typeof document !== 'undefined') {\n if (document.readyState !== 'loading') {\n setupGlobalFocusEvents();\n } else {\n document.addEventListener('DOMContentLoaded', setupGlobalFocusEvents);\n }\n}\n\n/**\n * If true, keyboard focus is visible.\n */\nexport function isFocusVisible(): boolean {\n return currentModality !== 'pointer';\n}\n\nexport function getInteractionModality(): Modality {\n return currentModality;\n}\n\nexport function setInteractionModality(modality: Modality) {\n currentModality = modality;\n triggerChangeHandlers(modality, null);\n}\n\n/**\n * Keeps state of the current modality.\n */\nexport function useInteractionModality(): Modality {\n setupGlobalFocusEvents();\n\n let [modality, setModality] = useState(currentModality);\n useEffect(() => {\n let handler = () => {\n setModality(currentModality);\n };\n\n changeHandlers.add(handler);\n return () => {\n changeHandlers.delete(handler);\n };\n }, []);\n\n return modality;\n}\n\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */\nfunction isKeyboardFocusEvent(isTextInput: boolean, modality: Modality, e: HandlerEvent) {\n return !(isTextInput && modality === 'keyboard' && e instanceof KeyboardEvent && !FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\n\n/**\n * Manages focus visible state for the page, and subscribes individual components for updates.\n */\nexport function useFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResult {\n let {isTextInput, autoFocus} = props;\n let [isFocusVisibleState, setFocusVisible] = useState(autoFocus || isFocusVisible());\n useFocusVisibleListener((isFocusVisible) => {\n setFocusVisible(isFocusVisible);\n }, [isTextInput], {isTextInput});\n\n return {isFocusVisible: isFocusVisibleState};\n}\n\n/**\n * Listens for trigger change and reports if focus is visible (i.e., modality is not pointer).\n */\nexport function useFocusVisibleListener(fn: FocusVisibleHandler, deps: ReadonlyArray<any>, opts?: {isTextInput?: boolean}): void {\n setupGlobalFocusEvents();\n\n useEffect(() => {\n let handler = (modality: Modality, e: HandlerEvent) => {\n if (!isKeyboardFocusEvent(opts?.isTextInput, modality, e)) {\n return;\n }\n fn(isFocusVisible());\n };\n changeHandlers.add(handler);\n return () => changeHandlers.delete(handler);\n }, deps);\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {BaseEvent} from '@react-types/shared';\nimport {SyntheticEvent} from 'react';\n\n/**\n * This function wraps a React event handler to make stopPropagation the default, and support continuePropagation instead.\n */\nexport function createEventHandler<T extends SyntheticEvent>(handler: (e: BaseEvent<T>) => void): (e: T) => void {\n if (!handler) {\n return;\n }\n\n let shouldStopPropagation = true;\n return (e: T) => {\n let event: BaseEvent<T> = {\n ...e,\n preventDefault() {\n e.preventDefault();\n },\n isDefaultPrevented() {\n return e.isDefaultPrevented();\n },\n stopPropagation() {\n console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');\n },\n continuePropagation() {\n shouldStopPropagation = false;\n }\n };\n\n handler(event);\n\n if (shouldStopPropagation) {\n e.stopPropagation();\n }\n };\n}\n","import { useRef, useCallback } from 'react';\n\nvar updateRef = function updateRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n return;\n }\n ref.current = value;\n};\n\nvar useComposedRef = function useComposedRef(libRef, userRef) {\n var prevUserRef = useRef();\n return useCallback(function (instance) {\n libRef.current = instance;\n\n if (prevUserRef.current) {\n updateRef(prevUserRef.current, null);\n }\n\n prevUserRef.current = userRef;\n\n if (!userRef) {\n return;\n }\n\n updateRef(userRef, instance);\n }, [userRef]);\n};\n\nexport default useComposedRef;\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport default index;\n","import { useRef } from 'react';\nimport useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\n\nvar useLatest = function useLatest(value) {\n var ref = useRef(value);\n useIsomorphicLayoutEffect(function () {\n ref.current = value;\n });\n return ref;\n};\n\nexport default useLatest;\n","import { useEffect } from 'react';\nimport arePassiveEventsSupported from 'are-passive-events-supported';\nimport useLatest from 'use-latest';\n\nvar MOUSEDOWN = 'mousedown';\nvar TOUCHSTART = 'touchstart';\nvar events = [MOUSEDOWN, TOUCHSTART];\n\nvar getAddOptions = function getAddOptions(event) {\n if (event === TOUCHSTART && arePassiveEventsSupported()) {\n return {\n passive: true\n };\n }\n};\n\nvar currentDocument = document ;\nfunction useOnClickOutside(ref, handler, _temp) {\n var _ref = _temp === void 0 ? {} : _temp,\n _ref$document = _ref.document,\n document = _ref$document === void 0 ? currentDocument : _ref$document;\n\n var handlerRef = useLatest(handler);\n useEffect(function () {\n if (!handler) {\n return;\n }\n\n var listener = function listener(event) {\n if (!ref.current || !handlerRef.current || ref.current.contains(event.target)) {\n return;\n }\n\n handlerRef.current(event);\n };\n\n events.forEach(function (event) {\n document.addEventListener(event, listener, getAddOptions(event));\n });\n return function () {\n events.forEach(function (event) {\n document.removeEventListener(event, listener);\n });\n };\n }, [!handler]);\n}\n\nexport default useOnClickOutside;\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport default index;\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/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(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\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n 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;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import { __assign } from 'tslib';\n\nvar clamp = function (min, max) { return function (v) {\r\n return Math.max(Math.min(v, max), min);\r\n}; };\r\nvar sanitize = function (v) { return (v % 1 ? Number(v.toFixed(5)) : v); };\r\nvar floatRegex = /(-)?(\\d[\\d\\.]*)/g;\r\nvar colorRegex = /(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2,3}\\s*\\/*\\s*[\\d\\.]+%?\\))/gi;\r\nvar singleColorRegex = /^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2,3}\\s*\\/*\\s*[\\d\\.]+%?\\))$/i;\n\nvar number = {\r\n test: function (v) { return typeof v === 'number'; },\r\n parse: parseFloat,\r\n transform: function (v) { return v; }\r\n};\r\nvar alpha = __assign(__assign({}, number), { transform: clamp(0, 1) });\r\nvar scale = __assign(__assign({}, number), { default: 1 });\n\nvar createUnitType = function (unit) { return ({\r\n test: function (v) {\r\n return typeof v === 'string' && v.endsWith(unit) && v.split(' ').length === 1;\r\n },\r\n parse: parseFloat,\r\n transform: function (v) { return \"\" + v + unit; }\r\n}); };\r\nvar degrees = createUnitType('deg');\r\nvar percent = createUnitType('%');\r\nvar px = createUnitType('px');\r\nvar vh = createUnitType('vh');\r\nvar vw = createUnitType('vw');\r\nvar progressPercentage = __assign(__assign({}, percent), { parse: function (v) { return percent.parse(v) / 100; }, transform: function (v) { return percent.transform(v * 100); } });\n\nvar getValueFromFunctionString = function (value) {\r\n return value.substring(value.indexOf('(') + 1, value.lastIndexOf(')'));\r\n};\r\nvar clampRgbUnit = clamp(0, 255);\r\nvar isRgba = function (v) { return v.red !== undefined; };\r\nvar isHsla = function (v) { return v.hue !== undefined; };\r\nfunction getValuesAsArray(value) {\r\n return getValueFromFunctionString(value)\r\n .replace(/(,|\\/)/g, ' ')\r\n .split(/ \\s*/);\r\n}\r\nvar splitColorValues = function (terms) {\r\n return function (v) {\r\n if (typeof v !== 'string')\r\n return v;\r\n var values = {};\r\n var valuesArray = getValuesAsArray(v);\r\n for (var i = 0; i < 4; i++) {\r\n values[terms[i]] =\r\n valuesArray[i] !== undefined ? parseFloat(valuesArray[i]) : 1;\r\n }\r\n return values;\r\n };\r\n};\r\nvar rgbaTemplate = function (_a) {\r\n var red = _a.red, green = _a.green, blue = _a.blue, _b = _a.alpha, alpha = _b === void 0 ? 1 : _b;\r\n return \"rgba(\" + red + \", \" + green + \", \" + blue + \", \" + alpha + \")\";\r\n};\r\nvar hslaTemplate = function (_a) {\r\n var hue = _a.hue, saturation = _a.saturation, lightness = _a.lightness, _b = _a.alpha, alpha = _b === void 0 ? 1 : _b;\r\n return \"hsla(\" + hue + \", \" + saturation + \", \" + lightness + \", \" + alpha + \")\";\r\n};\r\nvar rgbUnit = __assign(__assign({}, number), { transform: function (v) { return Math.round(clampRgbUnit(v)); } });\r\nfunction isColorString(color, colorType) {\r\n return color.startsWith(colorType) && singleColorRegex.test(color);\r\n}\r\nvar rgba = {\r\n test: function (v) { return (typeof v === 'string' ? isColorString(v, 'rgb') : isRgba(v)); },\r\n parse: splitColorValues(['red', 'green', 'blue', 'alpha']),\r\n transform: function (_a) {\r\n var red = _a.red, green = _a.green, blue = _a.blue, _b = _a.alpha, alpha$1 = _b === void 0 ? 1 : _b;\r\n return rgbaTemplate({\r\n red: rgbUnit.transform(red),\r\n green: rgbUnit.transform(green),\r\n blue: rgbUnit.transform(blue),\r\n alpha: sanitize(alpha.transform(alpha$1))\r\n });\r\n }\r\n};\r\nvar hsla = {\r\n test: function (v) { return (typeof v === 'string' ? isColorString(v, 'hsl') : isHsla(v)); },\r\n parse: splitColorValues(['hue', 'saturation', 'lightness', 'alpha']),\r\n transform: function (_a) {\r\n var hue = _a.hue, saturation = _a.saturation, lightness = _a.lightness, _b = _a.alpha, alpha$1 = _b === void 0 ? 1 : _b;\r\n return hslaTemplate({\r\n hue: Math.round(hue),\r\n saturation: percent.transform(sanitize(saturation)),\r\n lightness: percent.transform(sanitize(lightness)),\r\n alpha: sanitize(alpha.transform(alpha$1))\r\n });\r\n }\r\n};\r\nvar hex = __assign(__assign({}, rgba), { test: function (v) { return typeof v === 'string' && isColorString(v, '#'); }, parse: function (v) {\r\n var r = '';\r\n var g = '';\r\n var b = '';\r\n if (v.length > 4) {\r\n r = v.substr(1, 2);\r\n g = v.substr(3, 2);\r\n b = v.substr(5, 2);\r\n }\r\n else {\r\n r = v.substr(1, 1);\r\n g = v.substr(2, 1);\r\n b = v.substr(3, 1);\r\n r += r;\r\n g += g;\r\n b += b;\r\n }\r\n return {\r\n red: parseInt(r, 16),\r\n green: parseInt(g, 16),\r\n blue: parseInt(b, 16),\r\n alpha: 1\r\n };\r\n } });\r\nvar color = {\r\n test: function (v) {\r\n return (typeof v === 'string' && singleColorRegex.test(v)) ||\r\n isRgba(v) ||\r\n isHsla(v);\r\n },\r\n parse: function (v) {\r\n if (rgba.test(v)) {\r\n return rgba.parse(v);\r\n }\r\n else if (hsla.test(v)) {\r\n return hsla.parse(v);\r\n }\r\n else if (hex.test(v)) {\r\n return hex.parse(v);\r\n }\r\n return v;\r\n },\r\n transform: function (v) {\r\n if (isRgba(v)) {\r\n return rgba.transform(v);\r\n }\r\n else if (isHsla(v)) {\r\n return hsla.transform(v);\r\n }\r\n return v;\r\n }\r\n};\n\nvar COLOR_TOKEN = '${c}';\r\nvar NUMBER_TOKEN = '${n}';\r\nvar convertNumbersToZero = function (v) {\r\n return typeof v === 'number' ? 0 : v;\r\n};\r\nvar complex = {\r\n test: function (v) {\r\n if (typeof v !== 'string' || !isNaN(v))\r\n return false;\r\n var numValues = 0;\r\n var foundNumbers = v.match(floatRegex);\r\n var foundColors = v.match(colorRegex);\r\n if (foundNumbers)\r\n numValues += foundNumbers.length;\r\n if (foundColors)\r\n numValues += foundColors.length;\r\n return numValues > 0;\r\n },\r\n parse: function (v) {\r\n var input = v;\r\n var parsed = [];\r\n var foundColors = input.match(colorRegex);\r\n if (foundColors) {\r\n input = input.replace(colorRegex, COLOR_TOKEN);\r\n parsed.push.apply(parsed, foundColors.map(color.parse));\r\n }\r\n var foundNumbers = input.match(floatRegex);\r\n if (foundNumbers) {\r\n parsed.push.apply(parsed, foundNumbers.map(number.parse));\r\n }\r\n return parsed;\r\n },\r\n createTransformer: function (prop) {\r\n var template = prop;\r\n var token = 0;\r\n var foundColors = prop.match(colorRegex);\r\n var numColors = foundColors ? foundColors.length : 0;\r\n if (foundColors) {\r\n for (var i = 0; i < numColors; i++) {\r\n template = template.replace(foundColors[i], COLOR_TOKEN);\r\n token++;\r\n }\r\n }\r\n var foundNumbers = template.match(floatRegex);\r\n var numNumbers = foundNumbers ? foundNumbers.length : 0;\r\n if (foundNumbers) {\r\n for (var i = 0; i < numNumbers; i++) {\r\n template = template.replace(foundNumbers[i], NUMBER_TOKEN);\r\n token++;\r\n }\r\n }\r\n return function (v) {\r\n var output = template;\r\n for (var i = 0; i < token; i++) {\r\n output = output.replace(i < numColors ? COLOR_TOKEN : NUMBER_TOKEN, i < numColors ? color.transform(v[i]) : sanitize(v[i]));\r\n }\r\n return output;\r\n };\r\n },\r\n getAnimatableNone: function (target) {\r\n var parsedTarget = complex.parse(target);\r\n var targetTransformer = complex.createTransformer(target);\r\n return targetTransformer(parsedTarget.map(convertNumbersToZero));\r\n }\r\n};\n\nexport { alpha, color, complex, degrees, hex, hsla, number, percent, progressPercentage, px, rgbUnit, rgba, scale, vh, vw };\n","import { invariant } from 'hey-listen';\n\nvar prevTime = 0;\nvar onNextFrame = typeof window !== 'undefined' && window.requestAnimationFrame !== undefined ? function (callback) {\n return window.requestAnimationFrame(callback);\n} : function (callback) {\n var timestamp = Date.now();\n var timeToCall = Math.max(0, 16.7 - (timestamp - prevTime));\n prevTime = timestamp + timeToCall;\n setTimeout(function () {\n return callback(prevTime);\n }, timeToCall);\n};\n\nvar createStep = function (setRunNextFrame) {\n var processToRun = [];\n var processToRunNextFrame = [];\n var numThisFrame = 0;\n var isProcessing = false;\n var i = 0;\n var cancelled = new WeakSet();\n var toKeepAlive = new WeakSet();\n var renderStep = {\n cancel: function (process) {\n var indexOfCallback = processToRunNextFrame.indexOf(process);\n cancelled.add(process);\n if (indexOfCallback !== -1) {\n processToRunNextFrame.splice(indexOfCallback, 1);\n }\n },\n process: function (frame) {\n var _a;\n isProcessing = true;\n _a = [processToRunNextFrame, processToRun], processToRun = _a[0], processToRunNextFrame = _a[1];\n processToRunNextFrame.length = 0;\n numThisFrame = processToRun.length;\n if (numThisFrame) {\n var process_1;\n for (i = 0; i < numThisFrame; i++) {\n process_1 = processToRun[i];\n process_1(frame);\n if (toKeepAlive.has(process_1) === true && !cancelled.has(process_1)) {\n renderStep.schedule(process_1);\n setRunNextFrame(true);\n }\n }\n }\n isProcessing = false;\n },\n schedule: function (process, keepAlive, immediate) {\n if (keepAlive === void 0) {\n keepAlive = false;\n }\n if (immediate === void 0) {\n immediate = false;\n }\n invariant(typeof process === \"function\", \"Argument must be a function\");\n var addToCurrentBuffer = immediate && isProcessing;\n var buffer = addToCurrentBuffer ? processToRun : processToRunNextFrame;\n cancelled.delete(process);\n if (keepAlive) toKeepAlive.add(process);\n if (buffer.indexOf(process) === -1) {\n buffer.push(process);\n if (addToCurrentBuffer) numThisFrame = processToRun.length;\n }\n }\n };\n return renderStep;\n};\n\nvar maxElapsed = 40;\nvar defaultElapsed = 1 / 60 * 1000;\nvar useDefaultElapsed = true;\nvar willRunNextFrame = false;\nvar isProcessing = false;\nvar frame = {\n delta: 0,\n timestamp: 0\n};\nvar stepsOrder = [\"read\", \"update\", \"preRender\", \"render\", \"postRender\"];\nvar setWillRunNextFrame = function (willRun) {\n return willRunNextFrame = willRun;\n};\nvar steps = /*#__PURE__*/stepsOrder.reduce(function (acc, key) {\n acc[key] = createStep(setWillRunNextFrame);\n return acc;\n}, {});\nvar sync = /*#__PURE__*/stepsOrder.reduce(function (acc, key) {\n var step = steps[key];\n acc[key] = function (process, keepAlive, immediate) {\n if (keepAlive === void 0) {\n keepAlive = false;\n }\n if (immediate === void 0) {\n immediate = false;\n }\n if (!willRunNextFrame) startLoop();\n step.schedule(process, keepAlive, immediate);\n return process;\n };\n return acc;\n}, {});\nvar cancelSync = /*#__PURE__*/stepsOrder.reduce(function (acc, key) {\n acc[key] = steps[key].cancel;\n return acc;\n}, {});\nvar processStep = function (stepId) {\n return steps[stepId].process(frame);\n};\nvar processFrame = function (timestamp) {\n willRunNextFrame = false;\n frame.delta = useDefaultElapsed ? defaultElapsed : Math.max(Math.min(timestamp - frame.timestamp, maxElapsed), 1);\n if (!useDefaultElapsed) defaultElapsed = frame.delta;\n frame.timestamp = timestamp;\n isProcessing = true;\n stepsOrder.forEach(processStep);\n isProcessing = false;\n if (willRunNextFrame) {\n useDefaultElapsed = false;\n onNextFrame(processFrame);\n }\n};\nvar startLoop = function () {\n willRunNextFrame = true;\n useDefaultElapsed = true;\n if (!isProcessing) onNextFrame(processFrame);\n};\nvar getFrameData = function () {\n return frame;\n};\n\nexport default sync;\nexport { cancelSync, getFrameData };\n","import { hsla, rgba, hex, color, complex } from 'style-value-types';\nimport { invariant } from 'hey-listen';\nimport { getFrameData } from 'framesync';\nimport { createAnticipateEasing, createBackIn, createExpoIn, cubicBezier, linear, easeIn, easeOut, easeInOut, circIn, circOut, circInOut, backIn, backOut, backInOut, anticipate, reversed, mirrored } from '@popmotion/easing';\nexport { createAnticipateEasing, createBackIn, createExpoIn, cubicBezier, linear, easeIn, easeOut, easeInOut, circIn, circOut, circInOut, backIn, backOut, backInOut, anticipate, reversed, mirrored } from '@popmotion/easing';\n\nvar zeroPoint = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n};\r\nvar isNum = function (v) { return typeof v === 'number'; };\n\nvar radiansToDegrees = (function (radians) { return (radians * 180) / Math.PI; });\n\nvar angle = (function (a, b) {\r\n if (b === void 0) { b = zeroPoint; }\r\n return radiansToDegrees(Math.atan2(b.y - a.y, b.x - a.x));\r\n});\n\nvar applyOffset = (function (from, to) {\r\n var hasReceivedFrom = true;\r\n if (to === undefined) {\r\n to = from;\r\n hasReceivedFrom = false;\r\n }\r\n return function (v) {\r\n if (hasReceivedFrom) {\r\n return v - from + to;\r\n }\r\n else {\r\n from = v;\r\n hasReceivedFrom = true;\r\n return to;\r\n }\r\n };\r\n});\n\nvar curryRange = (function (func) { return function (min, max, v) { return (v !== undefined ? func(min, max, v) : function (cv) { return func(min, max, cv); }); }; });\n\nvar clamp = function (min, max, v) {\r\n return Math.min(Math.max(v, min), max);\r\n};\r\nvar clamp$1 = curryRange(clamp);\n\nvar conditional = (function (check, apply) { return function (v) {\r\n return check(v) ? apply(v) : v;\r\n}; });\n\nvar degreesToRadians = (function (degrees) { return (degrees * Math.PI) / 180; });\n\nvar isPoint = (function (point) {\r\n return point.hasOwnProperty('x') && point.hasOwnProperty('y');\r\n});\n\nvar isPoint3D = (function (point) {\r\n return isPoint(point) && point.hasOwnProperty('z');\r\n});\n\nvar distance1D = function (a, b) { return Math.abs(a - b); };\r\nvar distance = (function (a, b) {\r\n if (b === void 0) { b = zeroPoint; }\r\n if (isNum(a) && isNum(b)) {\r\n return distance1D(a, b);\r\n }\r\n else if (isPoint(a) && isPoint(b)) {\r\n var xDelta = distance1D(a.x, b.x);\r\n var yDelta = distance1D(a.y, b.y);\r\n var zDelta = isPoint3D(a) && isPoint3D(b) ? distance1D(a.z, b.z) : 0;\r\n return Math.sqrt(Math.pow(xDelta, 2) + Math.pow(yDelta, 2) + Math.pow(zDelta, 2));\r\n }\r\n return 0;\r\n});\n\nvar progress = (function (from, to, value) {\r\n var toFromDifference = to - from;\r\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\r\n});\n\nvar mix = (function (from, to, progress) {\r\n return -progress * from + progress * to + from;\r\n});\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar mixLinearColor = function (from, to, v) {\r\n var fromExpo = from * from;\r\n var toExpo = to * to;\r\n return Math.sqrt(Math.max(0, v * (toExpo - fromExpo) + fromExpo));\r\n};\r\nvar colorTypes = [hex, rgba, hsla];\r\nvar getColorType = function (v) {\r\n return colorTypes.find(function (type) { return type.test(v); });\r\n};\r\nvar notAnimatable = function (color$$1) {\r\n return \"'\" + color$$1 + \"' is not an animatable color. Use the equivalent color code instead.\";\r\n};\r\nvar mixColor = (function (from, to) {\r\n var fromColorType = getColorType(from);\r\n var toColorType = getColorType(to);\r\n invariant(!!fromColorType, notAnimatable(from));\r\n invariant(!!toColorType, notAnimatable(to));\r\n invariant(fromColorType.transform === toColorType.transform, 'Both colors must be hex/RGBA, OR both must be HSLA.');\r\n var fromColor = fromColorType.parse(from);\r\n var toColor = toColorType.parse(to);\r\n var blended = __assign({}, fromColor);\r\n var mixFunc = fromColorType === hsla ? mix : mixLinearColor;\r\n return function (v) {\r\n for (var key in blended) {\r\n if (key !== 'alpha') {\r\n blended[key] = mixFunc(fromColor[key], toColor[key], v);\r\n }\r\n }\r\n blended.alpha = mix(fromColor.alpha, toColor.alpha, v);\r\n return fromColorType.transform(blended);\r\n };\r\n});\n\nvar combineFunctions = function (a, b) { return function (v) { return b(a(v)); }; };\r\nvar pipe = (function () {\r\n var transformers = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n transformers[_i] = arguments[_i];\r\n }\r\n return transformers.reduce(combineFunctions);\r\n});\n\nvar mixArray = function (from, to) {\r\n var output = from.slice();\r\n var numValues = output.length;\r\n var blendValue = from.map(function (fromThis, i) {\r\n var toThis = to[i];\r\n if (isNum(fromThis)) {\r\n return function (v) { return mix(fromThis, toThis, v); };\r\n }\r\n else if (color.test(fromThis)) {\r\n return mixColor(fromThis, toThis);\r\n }\r\n else {\r\n return mixComplex(fromThis, toThis);\r\n }\r\n });\r\n return function (v) {\r\n for (var i = 0; i < numValues; i++) {\r\n output[i] = blendValue[i](v);\r\n }\r\n return output;\r\n };\r\n};\r\nvar mixComplex = function (from, to) {\r\n var template = complex.createTransformer(from);\r\n var parsedFrom = complex.parse(from);\r\n invariant(from === complex.createTransformer(to)(parsedFrom), \"Complex values '\" + from + \"' and '\" + to + \"' are of different format.\");\r\n return pipe(mixArray(parsedFrom, complex.parse(to)), template);\r\n};\n\nvar mixNumber = function (from, to) { return function (p) { return mix(from, to, p); }; };\r\nfunction detectMixerFactory(v) {\r\n if (typeof v === 'number') {\r\n return mixNumber;\r\n }\r\n if (color.test(v)) {\r\n return mixColor;\r\n }\r\n else {\r\n return mixComplex;\r\n }\r\n}\r\nfunction createMixers(output, ease, customMixer) {\r\n var mixers = [];\r\n var mixerFactory = customMixer || detectMixerFactory(output[0]);\r\n var numMixers = output.length - 1;\r\n for (var i = 0; i < numMixers; i++) {\r\n var mixer = mixerFactory(output[i], output[i + 1]);\r\n if (ease) {\r\n var easingFunction = Array.isArray(ease) ? ease[i] : ease;\r\n mixer = pipe(easingFunction, mixer);\r\n }\r\n mixers.push(mixer);\r\n }\r\n return mixers;\r\n}\r\nfunction fastInterpolate(_a, _b) {\r\n var from = _a[0], to = _a[1];\r\n var mixer = _b[0];\r\n return function (v) { return mixer(progress(from, to, v)); };\r\n}\r\nfunction slowInterpolate(input, mixers) {\r\n var inputLength = input.length;\r\n var lastInputIndex = inputLength - 1;\r\n return function (v) {\r\n var mixerIndex = 0;\r\n var foundMixerIndex = false;\r\n if (v <= input[0]) {\r\n foundMixerIndex = true;\r\n }\r\n else if (v >= input[lastInputIndex]) {\r\n mixerIndex = lastInputIndex - 1;\r\n foundMixerIndex = true;\r\n }\r\n if (!foundMixerIndex) {\r\n var i = 1;\r\n for (; i < inputLength; i++) {\r\n if (input[i] > v || i === lastInputIndex) {\r\n break;\r\n }\r\n }\r\n mixerIndex = i - 1;\r\n }\r\n var progressInRange = progress(input[mixerIndex], input[mixerIndex + 1], v);\r\n return mixers[mixerIndex](progressInRange);\r\n };\r\n}\r\nfunction interpolate(input, output, _a) {\r\n var _b = _a === void 0 ? {} : _a, _c = _b.clamp, clamp = _c === void 0 ? true : _c, ease = _b.ease, mixer = _b.mixer;\r\n var inputLength = input.length;\r\n invariant(inputLength === output.length, 'Both input and output ranges must be the same length');\r\n invariant(!ease || !Array.isArray(ease) || ease.length === inputLength - 1, 'Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values.');\r\n if (input[0] > input[inputLength - 1]) {\r\n input = [].concat(input);\r\n output = [].concat(output);\r\n input.reverse();\r\n output.reverse();\r\n }\r\n var mixers = createMixers(output, ease, mixer);\r\n var interpolator = inputLength === 2\r\n ? fastInterpolate(input, mixers)\r\n : slowInterpolate(input, mixers);\r\n return clamp\r\n ? pipe(clamp$1(input[0], input[inputLength - 1]), interpolator)\r\n : interpolator;\r\n}\n\nvar pointFromVector = (function (origin, angle, distance) {\r\n angle = degreesToRadians(angle);\r\n return {\r\n x: distance * Math.cos(angle) + origin.x,\r\n y: distance * Math.sin(angle) + origin.y\r\n };\r\n});\n\nvar toDecimal = (function (num, precision) {\r\n if (precision === void 0) { precision = 2; }\r\n precision = Math.pow(10, precision);\r\n return Math.round(num * precision) / precision;\r\n});\n\nvar smoothFrame = (function (prevValue, nextValue, duration, smoothing) {\r\n if (smoothing === void 0) { smoothing = 0; }\r\n return toDecimal(prevValue +\r\n (duration * (nextValue - prevValue)) / Math.max(smoothing, duration));\r\n});\n\nvar smooth = (function (strength) {\r\n if (strength === void 0) { strength = 50; }\r\n var previousValue = 0;\r\n var lastUpdated = 0;\r\n return function (v) {\r\n var currentFramestamp = getFrameData().timestamp;\r\n var timeDelta = currentFramestamp !== lastUpdated ? currentFramestamp - lastUpdated : 0;\r\n var newValue = timeDelta\r\n ? smoothFrame(previousValue, v, timeDelta, strength)\r\n : previousValue;\r\n lastUpdated = currentFramestamp;\r\n previousValue = newValue;\r\n return newValue;\r\n };\r\n});\n\nvar snap = (function (points) {\r\n if (typeof points === 'number') {\r\n return function (v) { return Math.round(v / points) * points; };\r\n }\r\n else {\r\n var i_1 = 0;\r\n var numPoints_1 = points.length;\r\n return function (v) {\r\n var lastDistance = Math.abs(points[0] - v);\r\n for (i_1 = 1; i_1 < numPoints_1; i_1++) {\r\n var point = points[i_1];\r\n var distance = Math.abs(point - v);\r\n if (distance === 0)\r\n return point;\r\n if (distance > lastDistance)\r\n return points[i_1 - 1];\r\n if (i_1 === numPoints_1 - 1)\r\n return point;\r\n lastDistance = distance;\r\n }\r\n };\r\n }\r\n});\n\nvar identity = function (v) { return v; };\r\nvar springForce = function (alterDisplacement) {\r\n if (alterDisplacement === void 0) { alterDisplacement = identity; }\r\n return curryRange(function (constant, origin, v) {\r\n var displacement = origin - v;\r\n var springModifiedDisplacement = -(0 - constant + 1) * (0 - alterDisplacement(Math.abs(displacement)));\r\n return displacement <= 0\r\n ? origin + springModifiedDisplacement\r\n : origin - springModifiedDisplacement;\r\n });\r\n};\r\nvar springForceLinear = springForce();\r\nvar springForceExpo = springForce(Math.sqrt);\n\nvar velocityPerFrame = (function (xps, frameDuration) {\r\n return isNum(xps) ? xps / (1000 / frameDuration) : 0;\r\n});\n\nvar velocityPerSecond = (function (velocity, frameDuration) {\r\n return frameDuration ? velocity * (1000 / frameDuration) : 0;\r\n});\n\nvar wrap = function (min, max, v) {\r\n var rangeSize = max - min;\r\n return ((((v - min) % rangeSize) + rangeSize) % rangeSize) + min;\r\n};\r\nvar wrap$1 = curryRange(wrap);\n\nvar clampProgress = clamp$1(0, 1);\r\nvar steps = (function (steps, direction) {\r\n if (direction === void 0) { direction = 'end'; }\r\n return function (progress) {\r\n progress =\r\n direction === 'end' ? Math.min(progress, 0.999) : Math.max(progress, 0.001);\r\n var expanded = progress * steps;\r\n var rounded = direction === 'end' ? Math.floor(expanded) : Math.ceil(expanded);\r\n return clampProgress(rounded / steps);\r\n };\r\n});\n\nexport { angle, applyOffset, clamp$1 as clamp, conditional, degreesToRadians, distance, interpolate, isPoint, isPoint3D, mix, mixArray, mixColor, mixComplex, pipe, pointFromVector, progress, radiansToDegrees, smooth, smoothFrame, snap, springForce, springForceExpo, springForceLinear, steps, toDecimal, velocityPerFrame, velocityPerSecond, wrap$1 as wrap };\n","import { forOwn, pick, hasOwn, sum, findIndex } from '@livechat/data-utils';\nimport { tabbable as tabbable$1 } from 'tabbable';\nexport * from 'tabbable';\n\nvar applyStyle = (function (style, element) {\n forOwn(function (value, key) {\n element.style[key] = value;\n }, style);\n});\n\nvar applyElementSpec = (function (attributes, element) {\n var iteratee = function iteratee(value, key) {\n if (key === 'style') {\n applyStyle(value, element);\n return;\n }\n\n element.setAttribute(key, value);\n };\n\n forOwn(iteratee, attributes);\n});\n\nvar isIE = !!document.documentElement.currentStyle;\n\nvar getComputedStyle = function getComputedStyle(props, element) {\n var styles = window.getComputedStyle(element);\n var borderBox = styles.boxSizing === 'border-box';\n var picked = pick(props, styles);\n\n if (isIE && borderBox && hasOwn('width', picked) && picked.width !== null) {\n var widths = [picked.width, styles.paddingLeft, styles.paddingRight, styles.borderLeftWidth, styles.borderRightWidth];\n picked.width = sum(widths.map(parseFloat)) + 'px';\n }\n\n if (isIE && borderBox && hasOwn('height', picked) && picked.height !== null) {\n var heights = [picked.height, styles.paddingTop, styles.paddingBottom, styles.borderTopWidth, styles.borderBottomWidth];\n picked.height = sum(heights.map(parseFloat)) + 'px';\n }\n\n return picked;\n};\n\nfunction getNextTabbable(element, container) {\n if (container === void 0) {\n container = document.body;\n }\n\n var tabbables = tabbable$1(container);\n var elementIndex = findIndex(function (el) {\n return el === element;\n }, tabbables);\n var isElementLast = elementIndex === tabbables.length - 1;\n return tabbables[isElementLast ? 0 : elementIndex + 1];\n}\n\nfunction getRoot() {\n return new Promise(function (resolve) {\n var next = function next() {\n if (!document.body) {\n setTimeout(next, 100);\n return;\n }\n\n resolve(document.body);\n };\n\n next();\n });\n}\n\nfunction getScrollOffset(source, target) {\n var sourceRect = source.getBoundingClientRect();\n var targetRect = target.getBoundingClientRect();\n return {\n top: sourceRect.top + target.scrollTop - targetRect.top,\n left: sourceRect.left + target.scrollLeft - targetRect.left\n };\n}\n\nvar cachedRTLOffsetType = null; // https://github.com/bvaughn/react-window/blob/c035eee067ea89029c89ecffd9eade1fc2ecb2dd/src/domHelpers.js#L31-L36\n\nvar getRTLOffsetType = function getRTLOffsetType() {\n if (cachedRTLOffsetType) {\n return cachedRTLOffsetType;\n }\n\n var outerDiv = document.createElement('div');\n var outerStyle = outerDiv.style;\n outerStyle.width = '50px';\n outerStyle.height = '50px';\n outerStyle.overflow = 'scroll';\n outerStyle.direction = 'rtl';\n var innerDiv = document.createElement('div');\n var innerStyle = innerDiv.style;\n innerStyle.width = '100px';\n innerStyle.height = '50px';\n outerDiv.appendChild(innerDiv);\n document.body.appendChild(outerDiv);\n\n if (outerDiv.scrollLeft > 0) {\n // Chrome 😩\n // it renders initially with max scrollLeft and to shift it to the left we need to subtract the distance\n cachedRTLOffsetType = 'positive-descending';\n } else {\n outerDiv.scrollLeft = 1;\n\n if (outerDiv.scrollLeft === 0) {\n // spec-compliant\n // it renders initially with 0 and to shift it to the left we need to subtract the distance\n cachedRTLOffsetType = 'negative';\n } else {\n // non-chromium Edge 🤦‍♂️\n // it renders initially with 0 and to shift it to the left we need to add the distance\n cachedRTLOffsetType = 'positive-ascending';\n }\n }\n\n document.body.removeChild(outerDiv);\n return cachedRTLOffsetType;\n};\n\nfunction isScrollOnBottom(node, threshold) {\n if (threshold === void 0) {\n threshold = 0;\n }\n\n return Math.abs(node.scrollTop + node.clientHeight - node.scrollHeight) <= threshold;\n}\n\nfunction isScrollOnTop(node, threshold) {\n if (threshold === void 0) {\n threshold = 0;\n }\n\n return node.scrollTop <= threshold;\n}\n\nfunction prependChild(parentElement, newElement) {\n parentElement.insertBefore(newElement, parentElement.children[0]);\n}\n\nfunction scrollToBottom(node) {\n node.scrollTop = node.scrollHeight;\n}\n\nfunction scrollToTop(node) {\n node.scrollTop = 0;\n}\n\nfunction removeNode(node) {\n var parentNode = node.parentNode;\n\n if (parentNode) {\n parentNode.removeChild(node);\n }\n}\n\nvar createElement = function createElement(tagName, spec) {\n var element = document.createElement(tagName);\n applyElementSpec(spec, element);\n return element;\n};\n\nexport { applyElementSpec, applyStyle, createElement, getComputedStyle, getNextTabbable, getRTLOffsetType, getRoot, getScrollOffset, isScrollOnBottom, isScrollOnTop, prependChild, removeNode, scrollToBottom, scrollToTop };\n","import useConstant from 'use-constant';\nexport { default as useConstant } from 'use-constant';\nexport { default as useComposedRef } from 'use-composed-ref';\nimport useLatest from 'use-latest';\nexport { default as useLatest } from 'use-latest';\nexport { default as useOnClickOutside } from 'use-onclickoutside';\nimport usePrevious from 'use-previous';\nexport { default as usePrevious } from 'use-previous';\nimport useSmoothScroll from 'use-smooth-scroll';\nexport { default as useSmoothScroll } from 'use-smooth-scroll';\nimport { useSubscription } from 'use-subscription';\nexport { useSubscription } from 'use-subscription';\nimport { useEffect, useCallback, useState, useMemo, useRef, useContext, createContext } from 'react';\nimport { includes, toArray, last, noop } from '@livechat/data-utils';\nimport { isScrollOnTop, isScrollOnBottom } from '@livechat/dom-utils';\nimport { useFocusWithin } from '@react-aria/interactions';\n\n/**\n * Runs React.useEffect with empty deps to call effect only on mount.\n */\n\nfunction useOnMount(effect) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect, []);\n}\n\nfunction clamp(min, max, value) {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction sign(value) {\n return value < 0 ? -1 : 1;\n}\n\nfunction handleDeltaValue(newValue, currentValue) {\n var increment = currentValue + newValue / 100;\n return clamp(0, 1, increment);\n}\n\nfunction useAnimatedScrollDelta(scrollingDeltaSource, callback) {\n var callbackRef = useLatest(callback);\n useOnMount(function () {\n var valueX = 0;\n var valueY = 0;\n var directionX = 1;\n var directionY = 1;\n var wheelTimeoutX = 0;\n var wheelTimeoutY = 0;\n var autoAnimateRaf = 0;\n\n var tick = function tick(x, y) {\n valueX = handleDeltaValue(x, valueX);\n valueY = handleDeltaValue(y, valueY);\n callbackRef.current({\n x: valueX,\n y: valueY\n });\n };\n\n var autoAnimate = function autoAnimate(axis) {\n var updateX = (axis === 'x' || axis === 'xy') && valueX > 0 && valueX < 1;\n var updateY = (axis === 'y' || axis === 'xy') && valueY > 0 && valueY < 1;\n\n if (updateX || updateY) {\n var x = updateX ? 5 * directionX : 0;\n var y = updateY ? 5 * directionY : 0;\n tick(x, y);\n autoAnimateRaf = requestAnimationFrame(function () {\n return autoAnimate(axis);\n });\n }\n };\n\n var handleScrollDelta = function handleScrollDelta(_ref) {\n var deltaX = _ref.deltaX,\n deltaY = _ref.deltaY;\n\n if (Math.abs(deltaX) > 8) {\n tick(deltaX, 0);\n directionX = sign(deltaX);\n clearTimeout(wheelTimeoutX);\n wheelTimeoutX = window.setTimeout(function () {\n return autoAnimate('x');\n }, 50);\n }\n\n if (Math.abs(deltaY) > 8) {\n tick(0, deltaY);\n directionY = sign(deltaY);\n clearTimeout(wheelTimeoutY);\n wheelTimeoutY = window.setTimeout(function () {\n return autoAnimate('y');\n }, 50);\n }\n };\n\n var unsubscribeDeltaSource = scrollingDeltaSource.subscribe(handleScrollDelta);\n return function () {\n unsubscribeDeltaSource();\n clearTimeout(wheelTimeoutX);\n clearTimeout(wheelTimeoutY);\n cancelAnimationFrame(autoAnimateRaf);\n };\n });\n}\n\nvar getAncestors = function getAncestors(node, ownerDocument) {\n var ancestors = new Set();\n var current = node;\n\n while (current = current.parentElement) {\n if (ownerDocument.body === current) {\n return ancestors;\n }\n\n ancestors.add(current);\n }\n\n return ancestors;\n};\n\nvar ariaHide = function ariaHide(elements, options) {\n elements.forEach(function (element) {\n if (element === options.modalElement) {\n return;\n }\n\n if (!options.ancestors.has(element)) {\n var originalValue = element.getAttribute('aria-hidden');\n options.originalValues.set(element, originalValue);\n element.setAttribute('aria-hidden', 'true');\n return;\n }\n\n if (!element.children) {\n // IE11 doesn't support .children on SVG elements\n return;\n }\n\n ariaHide([].slice.call(element.children), options);\n });\n};\n\nvar useAriaIsolation = function useAriaIsolation(ref) {\n useEffect(function () {\n if (!ref) {\n return;\n }\n\n var modalElement = ref.current;\n var ownerDocument = modalElement.ownerDocument || document;\n var ancestors = getAncestors(modalElement, ownerDocument);\n var originalValues = new Map();\n ariaHide([].slice.call(ownerDocument.body.children), {\n ancestors: ancestors,\n originalValues: originalValues,\n modalElement: modalElement\n });\n return function () {\n originalValues.forEach(function (originalValue, element) {\n if (originalValue === null) {\n element.removeAttribute('aria-hidden');\n return;\n }\n\n element.setAttribute('aria-hidden', originalValue);\n });\n };\n }, [ref]);\n};\n\nfunction useDocumentEvent(type, listener, options) {\n useEffect(function () {\n document.addEventListener(type, listener, options);\n return function () {\n return document.removeEventListener(type, listener, options);\n };\n }, [type, listener, options]);\n}\n\nvar useEventPreventDefault = function useEventPreventDefault(type, elemRef) {\n useEffect(function () {\n var elem = elemRef.current;\n\n if (elem) {\n var handleTouchMove = function handleTouchMove(event) {\n event.preventDefault();\n };\n\n elem.addEventListener(type, handleTouchMove, {\n passive: false\n });\n return function () {\n return elem.removeEventListener('touchmove', handleTouchMove);\n };\n }\n }, [type, elemRef]);\n};\n\nvar consumersCount = 0;\nvar focusType = null;\n\nvar setKeyboardType = function setKeyboardType() {\n focusType = 'keyboard';\n};\n\nvar setClickType = function setClickType() {\n focusType = 'click';\n};\n\nvar useFocusTypeTracking = function useFocusTypeTracking(IframeContext) {\n var contextDocument = (IframeContext == null ? void 0 : IframeContext.document) || document;\n useEffect(function () {\n if (consumersCount === 0) {\n contextDocument.addEventListener('keydown', setKeyboardType, true);\n contextDocument.addEventListener('mousedown', setClickType, true);\n contextDocument.addEventListener('touchstart', setClickType, true);\n }\n\n consumersCount++;\n return function () {\n consumersCount--;\n\n if (consumersCount > 0) {\n return;\n }\n\n focusType = null;\n contextDocument.removeEventListener('keydown', setKeyboardType, true);\n contextDocument.removeEventListener('mousedown', setClickType, true);\n contextDocument.removeEventListener('touchstart', setClickType, true);\n };\n }, [contextDocument]);\n return useCallback(function () {\n return focusType;\n }, []);\n};\n\nvar useHover = function useHover(initialValue) {\n if (initialValue === void 0) {\n initialValue = false;\n }\n\n var _React$useState = useState(initialValue),\n isHovered = _React$useState[0],\n setIsHovered = _React$useState[1];\n\n var hoverProps = useMemo(function () {\n return {\n onMouseEnter: function onMouseEnter() {\n return setIsHovered(true);\n },\n onMouseLeave: function onMouseLeave() {\n return setIsHovered(false);\n }\n };\n }, []);\n return [isHovered, hoverProps];\n};\n\nfunction useHTMLElementEvent(element, type, listener, options) {\n useEffect(function () {\n element.addEventListener(type, listener, options);\n return function () {\n return element.removeEventListener(type, listener, options);\n };\n }, [element, type, listener, options]);\n}\n\nvar useKeyboardTriggeredClick = function useKeyboardTriggeredClick(onClick) {\n var handleKeyPress = useCallback(function (_ref) {\n var key = _ref.key;\n\n if (key === 'Enter' || key === ' ') {\n onClick();\n }\n }, [onClick]);\n return {\n onKeyPress: handleKeyPress\n };\n};\n\nfunction useOnGlobalKeydown(keyCode, handler) {\n var handlerRef = useLatest(handler);\n var hasHandler = !!handler;\n useEffect(function () {\n if (!hasHandler) {\n return;\n }\n\n var listener = function listener(event) {\n if (event.keyCode !== keyCode || !handlerRef.current) {\n return;\n }\n\n handlerRef.current(event);\n };\n\n document.addEventListener('keydown', listener);\n return function () {\n return document.removeEventListener('keydown', listener);\n };\n }, [keyCode, hasHandler, handlerRef]);\n}\n\n/**\n * Runs React.useEffect with empty deps to call effect only on unmount.\n */\n\nfunction useOnUnmount(effect) {\n var effectRef = useLatest(effect);\n useEffect(function () {\n return function () {\n return effectRef.current();\n };\n }, [effectRef]);\n}\n\nvar useOnUpdate = function useOnUpdate(callback, inputs) {\n var isMounted = useRef(false);\n useEffect(function () {\n if (!isMounted.current) {\n isMounted.current = true;\n return;\n }\n\n callback(); // eslint-disable-next-line react-hooks/exhaustive-deps\n }, inputs);\n};\n\nvar usePostponedToUpdateCallback = function usePostponedToUpdateCallback(callback) {\n var scheduledRef = useRef(false);\n var latestCallbackRef = useLatest(callback);\n useEffect(function () {\n if (scheduledRef.current) {\n scheduledRef.current = false;\n latestCallbackRef.current();\n }\n });\n return useCallback(function () {\n scheduledRef.current = true;\n }, []);\n};\n\nvar isBrowser = typeof document !== 'undefined';\nvar supportsPassiveEvents;\n\nfunction arePassiveEventsSupported() {\n if (supportsPassiveEvents !== undefined) {\n return supportsPassiveEvents;\n }\n\n if (!isBrowser) {\n supportsPassiveEvents = false;\n return false;\n }\n\n var passive = false;\n var options = {\n // @ts-ignore: this is a temporary object, it doesn't have to return anything\n get passive() {\n passive = true;\n }\n\n };\n\n var noop = function noop() {};\n\n window.addEventListener('t', noop, options);\n window.removeEventListener('t', noop, options);\n supportsPassiveEvents = passive;\n return passive;\n}\n\n/* eslint-disable react-hooks/exhaustive-deps */\nvar DURATION_ZERO = {\n duration: 0\n};\nvar ARE_PASSIVE_EVENTS_SUPPORTED = arePassiveEventsSupported();\nvar SCROLL_KEY_CODES = ['End', 'Home', 'Space', 'PageUp', 'PageDown', 'ArrowUp', 'ArrowDown']; // Currently this hook is not handling resize of scrollable list container.\n// It will be nice improvement for the future to observe list resize and recalculate scroll deps.\n\nfunction useScrollableChatList(listRef, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n firstItemKey = _options.firstItemKey,\n lastItemKey = _options.lastItemKey,\n _options$topThreshold = _options.topThreshold,\n topThreshold = _options$topThreshold === void 0 ? 20 : _options$topThreshold,\n _options$bottomThresh = _options.bottomThreshold,\n bottomThreshold = _options$bottomThresh === void 0 ? 20 : _options$bottomThresh,\n initialScrollTop = _options.initialScrollTop,\n onIsUserScrollingChanged = _options.onIsUserScrollingChanged,\n onIsScrolledToTopChanged = _options.onIsScrolledToTopChanged,\n onIsScrolledToBottomChanged = _options.onIsScrolledToBottomChanged,\n onScrollDeltaChanged = _options.onScrollDeltaChanged,\n _options$isScrollingC = _options.isScrollingChangedTimeout,\n isScrollingChangedTimeout = _options$isScrollingC === void 0 ? 300 : _options$isScrollingC;\n var prevScrollTopRef = useRef(0);\n var prevScrollHeightRef = useRef(0);\n var isInitializedRef = useRef(false);\n var isOnTopRef = useRef(false);\n var isOnBottomRef = useRef(false);\n var isProgramaticScrollingRef = useRef(false);\n var scrollTargetNode = useRef(null);\n var isUserScrollingRef = useRef({\n timeout: 0,\n value: false\n });\n var lastScrollToBottomRef = useRef('none');\n\n var _scrollTo = useSmoothScroll('y', listRef);\n\n var scrollTo = useCallback(function () {\n isProgramaticScrollingRef.current = true;\n\n _scrollTo.apply(void 0, arguments);\n }, [_scrollTo]);\n var prevFirstItemKey = usePrevious(firstItemKey);\n var prevLastItemKey = usePrevious(lastItemKey);\n var handleUserScroll = useCallback(function () {\n isProgramaticScrollingRef.current = false;\n }, []);\n var getIsOnTop = useCallback(function () {\n return isOnTopRef.current;\n }, []);\n var getIsOnBottom = useCallback(function () {\n return isOnBottomRef.current;\n }, []);\n var scrollToTop = useCallback(function (options) {\n return scrollTo(0, options);\n }, [_scrollTo]);\n var scrollToBottom = useCallback(function (options) {\n if (listRef.current) {\n var _listRef$current = listRef.current,\n scrollHeight = _listRef$current.scrollHeight,\n clientHeight = _listRef$current.clientHeight;\n scrollTo(scrollHeight - clientHeight, options);\n lastScrollToBottomRef.current = options && options.duration === 0 ? 'instant' : 'animated';\n }\n }, [listRef, scrollTo]);\n var setScrollTargetNode = useCallback(function (node) {\n return scrollTargetNode.current = node;\n }, []);\n var getIsScrollable = useCallback(function () {\n return !!listRef.current && listRef.current.scrollHeight > listRef.current.clientHeight;\n }, [listRef]);\n var updateIsUserScrolling = useCallback(function () {\n if (!isUserScrollingRef.current.value) {\n isUserScrollingRef.current.value = true;\n onIsUserScrollingChanged && onIsUserScrollingChanged(isUserScrollingRef.current.value);\n }\n\n clearTimeout(isUserScrollingRef.current.timeout);\n isUserScrollingRef.current.timeout = window.setTimeout(function () {\n if (isUserScrollingRef.current.value) {\n isUserScrollingRef.current.value = false;\n onIsUserScrollingChanged && onIsUserScrollingChanged(isUserScrollingRef.current.value);\n }\n }, isScrollingChangedTimeout);\n }, [isScrollingChangedTimeout]);\n var handleScroll = useCallback(function () {\n var node = listRef.current;\n var scrollTop = node.scrollTop,\n scrollHeight = node.scrollHeight;\n var isScrollingUp = prevScrollTopRef.current > scrollTop;\n var isScrollingDown = prevScrollTopRef.current < scrollTop;\n var isNotScrolling = prevScrollTopRef.current === scrollTop;\n var gotDownsized = scrollHeight < prevScrollHeightRef.current;\n var gotUpsized = scrollHeight > prevScrollHeightRef.current;\n var scrollDelta = prevScrollTopRef.current - scrollTop;\n var isMinimalScrollHeightForAnimation = scrollHeight > window.innerHeight * 1.5;\n prevScrollTopRef.current = scrollTop;\n prevScrollHeightRef.current = scrollHeight;\n\n if (getIsScrollable() && !isProgramaticScrollingRef.current) {\n updateIsUserScrolling();\n }\n\n if (isNotScrolling && isInitializedRef.current) {\n return;\n }\n\n if (lastScrollToBottomRef.current === 'instant' || lastScrollToBottomRef.current === 'animated' && isOnBottomRef.current) {\n requestAnimationFrame(function () {\n scrollToBottom({\n duration: 0\n });\n lastScrollToBottomRef.current = 'none';\n });\n }\n\n var keepIsOnTop = isOnTopRef.current && isScrollingUp;\n var keepIsOnBottom = isOnBottomRef.current && (isScrollingDown || gotDownsized || gotUpsized);\n var isOnTop = keepIsOnTop || isScrollOnTop(node, topThreshold);\n var isOnBottom = keepIsOnBottom || isScrollOnBottom(node, bottomThreshold);\n\n if (onIsScrolledToTopChanged) {\n if (!isOnTopRef.current && isOnTop) {\n onIsScrolledToTopChanged(true);\n } else if (isOnTopRef.current && !isOnTop) {\n onIsScrolledToTopChanged(false);\n }\n }\n\n if (onIsScrolledToBottomChanged) {\n if (!isOnBottomRef.current && isOnBottom) {\n onIsScrolledToBottomChanged(true);\n } else if (isOnBottomRef.current && !isOnBottom) {\n onIsScrolledToBottomChanged(false);\n }\n }\n\n isOnTopRef.current = isOnTop;\n isOnBottomRef.current = isOnBottom;\n\n if (!gotUpsized && !isOnTopRef.current && onScrollDeltaChanged && !isOnBottomRef.current && isInitializedRef.current && isUserScrollingRef.current && ARE_PASSIVE_EVENTS_SUPPORTED && !isProgramaticScrollingRef.current && isMinimalScrollHeightForAnimation) {\n onScrollDeltaChanged({\n deltaX: 0,\n deltaY: scrollDelta / 2\n });\n }\n }, [onIsScrolledToTopChanged, onIsScrolledToBottomChanged, updateIsUserScrolling]);\n var handleKeydown = useCallback(function (event) {\n if (includes(event.key, SCROLL_KEY_CODES)) {\n handleUserScroll();\n }\n }, [handleUserScroll]);\n\n var handleScrollTargetNode = function handleScrollTargetNode() {\n scrollTo(scrollTargetNode.current.offsetTop, DURATION_ZERO);\n scrollTargetNode.current = null;\n };\n\n var handleFirstItemKeyChanged = function handleFirstItemKeyChanged() {\n var _ref = listRef.current,\n scrollHeight = _ref.scrollHeight;\n var prevDistanceFromBottom = prevScrollHeightRef.current - prevScrollTopRef.current;\n var preservedScrollTarget = scrollHeight - prevDistanceFromBottom;\n scrollTo(preservedScrollTarget, DURATION_ZERO);\n };\n\n var handleLastItemKeyChanged = function handleLastItemKeyChanged() {\n if (isOnBottomRef.current) {\n scrollToBottom();\n }\n };\n\n var handleMount = function handleMount() {\n if (scrollTargetNode.current) {\n handleScrollTargetNode();\n } else if (typeof initialScrollTop === 'number') {\n scrollTo(initialScrollTop, DURATION_ZERO);\n } else {\n scrollTo(listRef.current.scrollHeight, DURATION_ZERO);\n }\n\n handleScroll();\n isInitializedRef.current = true;\n };\n\n var handleUpdate = function handleUpdate() {\n if (scrollTargetNode.current) {\n handleScrollTargetNode();\n } else {\n if (prevFirstItemKey !== firstItemKey) {\n handleFirstItemKeyChanged();\n }\n\n if (prevLastItemKey !== lastItemKey) {\n handleLastItemKeyChanged();\n }\n }\n };\n\n useDocumentEvent('keydown', handleKeydown);\n useEffect(function () {\n if (isInitializedRef.current === false) {\n handleMount();\n } else {\n handleUpdate();\n }\n });\n useEffect(function () {\n if (listRef.current) {\n var list = listRef.current;\n list.addEventListener('scroll', handleScroll, ARE_PASSIVE_EVENTS_SUPPORTED ? {\n passive: true\n } : undefined);\n return function () {\n return list.removeEventListener('scroll', handleScroll);\n };\n }\n }, [listRef, handleScroll]);\n return {\n scrollTo: scrollTo,\n scrollToTop: scrollToTop,\n scrollToBottom: scrollToBottom,\n getIsOnTop: getIsOnTop,\n getIsOnBottom: getIsOnBottom,\n getIsScrollable: getIsScrollable,\n setScrollTargetNode: setScrollTargetNode,\n onWheel: handleUserScroll,\n onTouchStart: handleUserScroll\n };\n}\n\nvar useStreamState = function useStreamState(stream) {\n return useSubscription({\n getCurrentValue: stream.get,\n subscribe: stream.subscribe\n });\n};\n\nvar useStreamValue = function useStreamValue(initialValue) {\n return useConstant(function () {\n var value = initialValue;\n var subscribed = [];\n return {\n subscribe: function subscribe(callback) {\n subscribed.push(callback);\n return function () {\n subscribed.splice(subscribed.indexOf(callback), 1);\n };\n },\n next: function next(_value) {\n value = _value;\n subscribed.forEach(function (cb) {\n return cb(_value);\n });\n },\n get: function get() {\n return value;\n }\n };\n });\n};\n\nvar useTimeout = function useTimeout(callback, timeout) {\n useEffect(function () {\n var id = setTimeout(callback, timeout);\n return function () {\n return clearTimeout(id);\n };\n }, [callback, timeout]);\n};\n\nfunction useToggle(initialValue) {\n var _React$useState = useState(initialValue),\n value = _React$useState[0],\n setValue = _React$useState[1];\n\n var toggle = useCallback(function () {\n setValue(function (v) {\n return !v;\n });\n }, []);\n return [value, toggle];\n}\n\nvar cache = new Map();\nvar Context = createContext(cache);\nvar MemoryCacheProvider = Context.Provider;\nfunction useInMemoryCache(id) {\n var ctx = useContext(Context);\n\n if (ctx.has(id)) {\n return ctx.get(id);\n }\n\n var ref = {};\n var entry = {\n get: function get() {\n return ref.value;\n },\n set: function set(value) {\n return ref.value = value;\n },\n clear: function clear() {\n return delete ref.value;\n },\n destroy: function destroy() {\n return ctx[\"delete\"](id);\n }\n };\n ctx.set(id, entry);\n return entry;\n}\n\nvar ROLE_ROW_SELECTOR = '[role=\"row\"]';\nvar ROLE_GRID_CELL_SELECTOR = '[role=\"gridcell\"]';\nvar FOCUSABLE_ELEMENTS_SELECTOR = 'a, button, input, textarea, select';\n\nvar stopArrowKeysKeydownPropagation = function stopArrowKeysKeydownPropagation(event) {\n var _target$attributes$ty, _target$attributes$ty2;\n\n if (!event.target || !includes(event.key, ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight'])) {\n return;\n }\n\n var target = event.target;\n\n switch (true) {\n case target.tagName === 'TEXTAREA':\n case target.tagName === 'INPUT' && ((_target$attributes$ty = target.attributes['type']) == null ? void 0 : _target$attributes$ty.value) === 'text':\n case target.tagName === 'INPUT' && ((_target$attributes$ty2 = target.attributes['type']) == null ? void 0 : _target$attributes$ty2.value) === 'email':\n event.stopPropagation();\n }\n};\n\nvar MutationObserverConstructor = window.MutationObserver || window['WebKitMutationObserver'];\nfunction useRovingTabIndex(_ref) {\n var mainElementRef = _ref.mainElementRef,\n itemsCount = _ref.itemsCount,\n _ref$tableEdgeReached = _ref.tableEdgeReached,\n tableEdgeReached = _ref$tableEdgeReached === void 0 ? noop : _ref$tableEdgeReached;\n\n var _React$useState = useState(itemsCount),\n defferedItemsCount = _React$useState[0],\n setDefferedItemsCount = _React$useState[1];\n\n var trapRef = useRef(false);\n var isCellActiveRef = useRef(false);\n var lastTopElementRef = useRef(null);\n var lastRowRef = useRef(null);\n var lastCellRef = useRef(null);\n useDocumentEvent('keydown', function (event) {\n if (event.key === 'Tab') {\n trapRef.current = true;\n }\n });\n useDocumentEvent('keyup', function (event) {\n if (event.key === 'Tab') {\n trapRef.current = false;\n }\n });\n\n var getAllFocusableElements = function getAllFocusableElements(element) {\n return element ? toArray(element.querySelectorAll(FOCUSABLE_ELEMENTS_SELECTOR)) : [];\n };\n\n var setupRovingTabIndex = useCallback(function () {\n var mutationObserver = new MutationObserverConstructor(function () {\n if (!isCellActiveRef.current && !lastCellRef.current.contains(document.activeElement)) {\n return;\n }\n\n unselectCell(lastCellRef.current);\n var elements = getAllFocusableElements(lastCellRef.current);\n elements.forEach(function (element) {\n element.tabIndex = 0;\n element.addEventListener('blur', handleElementBlur);\n element.addEventListener('keydown', stopArrowKeysKeydownPropagation);\n });\n selectCell(lastCellRef.current, false);\n\n if (elements.length && !lastCellRef.current.contains(document.activeElement)) {\n elements[0].focus();\n }\n });\n\n var handleElementBlur = function handleElementBlur(event) {\n var isLastCellATarget = event.target === lastCellRef.current;\n var isLastCellARelatedTarget = event.relatedTarget === lastCellRef.current;\n var containsEventTarget = lastCellRef.current.contains(event.target);\n var containsEventRelatedTarget = lastCellRef.current.contains(event.relatedTarget);\n\n if (trapRef.current && event.relatedTarget && !isLastCellATarget && (!containsEventRelatedTarget || isLastCellARelatedTarget)) {\n event.preventDefault();\n requestAnimationFrame(function () {\n return event.target.focus();\n });\n return;\n }\n\n if (!containsEventTarget || containsEventRelatedTarget) {\n return;\n }\n\n getOutOfCell();\n };\n\n var getOutOfCell = function getOutOfCell() {\n var elements = getAllFocusableElements(lastCellRef.current);\n elements.forEach(function (element) {\n element.tabIndex = -1;\n element.removeEventListener('blur', handleElementBlur);\n element.removeEventListener('keydown', stopArrowKeysKeydownPropagation);\n });\n };\n\n var getIntoCell = function getIntoCell() {\n var elements = getAllFocusableElements(lastCellRef.current).filter(function (element) {\n return !element['disabled'];\n });\n elements.forEach(function (element) {\n element.tabIndex = 0;\n element.addEventListener('blur', handleElementBlur);\n element.addEventListener('keydown', stopArrowKeysKeydownPropagation);\n });\n\n if (elements.length) {\n elements[0].focus();\n }\n\n isCellActiveRef.current = true;\n };\n\n var handleCellKeydown = function handleCellKeydown(event) {\n if (event.key === ' ' && event.target === lastCellRef.current) {\n event.preventDefault();\n }\n };\n\n var handleCellKeyup = function handleCellKeyup(event) {\n switch (event.key) {\n case ' ': // space\n\n case 'Enter':\n if (event.target === lastCellRef.current) {\n event.preventDefault();\n getIntoCell();\n }\n\n return;\n\n case 'Escape':\n event.preventDefault();\n getOutOfCell();\n requestAnimationFrame(function () {\n return lastCellRef.current.focus();\n });\n return;\n }\n };\n\n var selectCell = function selectCell(cell, focus) {\n if (focus === void 0) {\n focus = true;\n }\n\n cell.tabIndex = 0;\n\n if (focus) {\n cell.focus();\n }\n\n cell.addEventListener('keyup', handleCellKeyup);\n cell.addEventListener('keydown', handleCellKeydown);\n cell.addEventListener('blur', handleElementBlur);\n mutationObserver.observe(cell, {\n childList: true,\n subtree: true\n });\n };\n\n var unselectCell = function unselectCell(cell) {\n cell.tabIndex = -1;\n cell.removeEventListener('keyup', handleCellKeyup);\n cell.removeEventListener('keydown', handleCellKeydown);\n cell.removeEventListener('blur', handleElementBlur);\n mutationObserver.disconnect();\n };\n\n var findCell = function findCell(direction) {\n var siblingPropName = direction + \"ElementSibling\";\n\n if (!lastRowRef.current || !lastTopElementRef.current || !lastRowRef.current[siblingPropName] && !lastTopElementRef.current[siblingPropName]) {\n tableEdgeReached(direction);\n return;\n }\n\n var currentCell = null;\n var currentRow = lastRowRef.current;\n var currentTopElement = lastTopElementRef.current;\n\n while (!currentCell) {\n if (currentRow && currentRow[siblingPropName]) {\n currentRow = currentRow[siblingPropName];\n currentCell = currentRow.querySelector(ROLE_GRID_CELL_SELECTOR);\n } else if (currentTopElement && currentTopElement[siblingPropName]) {\n currentTopElement = currentTopElement[siblingPropName];\n\n if (currentTopElement.attributes['role'] && currentTopElement.attributes['role'].value === 'row') {\n currentRow = currentTopElement;\n } else {\n var rows = currentTopElement.querySelectorAll(ROLE_ROW_SELECTOR);\n currentRow = direction === 'previous' ? last(rows) : rows[0];\n }\n\n currentCell = currentRow ? currentRow.querySelector(ROLE_GRID_CELL_SELECTOR) : null;\n } else {\n tableEdgeReached(direction);\n return;\n }\n }\n\n if (currentTopElement !== lastTopElementRef.current) {\n lastTopElementRef.current = currentTopElement;\n }\n\n if (currentRow !== lastRowRef.current) {\n lastRowRef.current = currentRow;\n }\n\n if (currentCell !== lastCellRef.current) {\n unselectCell(lastCellRef.current);\n selectCell(currentCell);\n lastCellRef.current = currentCell;\n }\n };\n\n var handleMainElementKeydown = function handleMainElementKeydown(event) {\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n findCell('previous');\n return;\n\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n findCell('next');\n return;\n\n default:\n return;\n }\n };\n\n if (lastCellRef.current) {\n selectCell(lastCellRef.current, false);\n }\n\n var mainElement = mainElementRef.current;\n mainElement.addEventListener('keydown', handleMainElementKeydown);\n return function () {\n mutationObserver.disconnect();\n mainElement.removeEventListener('keydown', handleMainElementKeydown);\n };\n }, [lastCellRef, mainElementRef, lastRowRef, lastTopElementRef, tableEdgeReached]);\n useEffect(function () {\n var timeout = setTimeout(function () {\n return setDefferedItemsCount(itemsCount);\n }, 100);\n return function () {\n return clearTimeout(timeout);\n };\n }, [itemsCount]);\n useEffect(function () {\n if (!mainElementRef.current || !mainElementRef.current.children.length) {\n return;\n }\n\n mainElementRef.current.tabIndex = -1;\n var isIndexActive = mainElementRef.current.contains(document.activeElement);\n var allFocusableElements = getAllFocusableElements(mainElementRef.current);\n allFocusableElements.forEach(function (element) {\n element.tabIndex = -1;\n element.addEventListener('keydown', stopArrowKeysKeydownPropagation);\n });\n toArray(mainElementRef.current.querySelectorAll(ROLE_GRID_CELL_SELECTOR)).forEach(function (element) {\n if (!isIndexActive || element !== lastCellRef.current) {\n element.tabIndex = -1;\n }\n });\n var lastChild = last(toArray(mainElementRef.current.children));\n var lastChildCell = lastChild ? lastChild.querySelector(ROLE_GRID_CELL_SELECTOR) : null;\n var lastChildFocusableElements = getAllFocusableElements(lastChildCell);\n var hasLastChildCellAutofocus = lastChildCell && lastChildCell !== document.activeElement && lastChildCell.contains(document.activeElement);\n\n var unlockLastChildFocusableElements = function unlockLastChildFocusableElements() {\n return lastChildFocusableElements.forEach(function (element) {\n element.tabIndex = 0;\n element.addEventListener('keydown', stopArrowKeysKeydownPropagation);\n });\n };\n\n if (hasLastChildCellAutofocus) {\n unlockLastChildFocusableElements();\n } else {\n lastChildFocusableElements.forEach(function (element) {\n element.addEventListener('focus', unlockLastChildFocusableElements);\n });\n }\n\n if (!isIndexActive || hasLastChildCellAutofocus) {\n lastTopElementRef.current = last(toArray(mainElementRef.current.children));\n\n if (!lastTopElementRef.current) {\n return;\n }\n\n var roleAttribute = lastTopElementRef.current.attributes['role'];\n lastRowRef.current = roleAttribute && roleAttribute.value === 'row' ? lastTopElementRef.current : last(toArray(lastTopElementRef.current.querySelectorAll(ROLE_ROW_SELECTOR)));\n\n if (lastTopElementRef.current.attributes['role'] && lastTopElementRef.current.attributes['role'].value === 'row') {\n lastRowRef.current = lastTopElementRef.current;\n } else {\n lastRowRef.current = last(toArray(lastTopElementRef.current.querySelectorAll(ROLE_ROW_SELECTOR)));\n }\n\n if (!lastRowRef.current) {\n return;\n }\n\n lastCellRef.current = lastRowRef.current.querySelector(ROLE_GRID_CELL_SELECTOR);\n\n if (!lastCellRef.current) {\n return;\n }\n }\n\n var cleanupRovingTabIndex = setupRovingTabIndex();\n return function () {\n cleanupRovingTabIndex();\n lastChildFocusableElements.forEach(function (element) {\n element.removeEventListener('keydown', stopArrowKeysKeydownPropagation);\n element.removeEventListener('focus', unlockLastChildFocusableElements);\n });\n allFocusableElements.filter(Boolean).forEach(function (element) {\n element.removeEventListener('keydown', stopArrowKeysKeydownPropagation);\n });\n };\n }, [lastCellRef, lastRowRef, lastTopElementRef, mainElementRef, setupRovingTabIndex, defferedItemsCount]);\n}\n\nvar useDefferedBeforeUnloadingState = function useDefferedBeforeUnloadingState(preventDefault, timeout) {\n if (preventDefault === void 0) {\n preventDefault = false;\n }\n\n if (timeout === void 0) {\n timeout = 1000;\n }\n\n var _React$useState = useState(false),\n isUnloading = _React$useState[0],\n setIsUnloading = _React$useState[1];\n\n useEffect(function () {\n var cleanUpTimeout;\n\n var onBeforeUnloadHandler = function onBeforeUnloadHandler() {\n if (preventDefault) {\n return;\n }\n\n setIsUnloading(true);\n cleanUpTimeout = window.setTimeout(function () {\n // if we actually stay on page, revert changes\n // 1 second is safe boundary that shouldn't execute in between beforeUnload and actual unload\n setIsUnloading(false);\n }, timeout);\n };\n\n window.addEventListener('beforeunload', onBeforeUnloadHandler);\n return function () {\n window.removeEventListener('beforeunload', onBeforeUnloadHandler);\n\n if (cleanUpTimeout) {\n window.clearTimeout(cleanUpTimeout);\n }\n };\n }, [preventDefault, timeout]);\n return isUnloading;\n};\n\nfunction useDialogFocusWithdrawal(isVisible, onClose) {\n var _React$useState = useState(isVisible),\n deferredIsVisible = _React$useState[0],\n setdeferredIsVisible = _React$useState[1];\n\n var triggerRef = useRef(null);\n\n var handleClose = function handleClose() {\n onClose();\n\n if (triggerRef.current instanceof HTMLElement) {\n triggerRef.current.focus();\n }\n };\n\n useEffect(function () {\n triggerRef.current = isVisible ? document.activeElement : null;\n setdeferredIsVisible(isVisible);\n }, [isVisible, triggerRef]);\n return [deferredIsVisible, handleClose];\n}\n\nvar useIsFocusWithin = function useIsFocusWithin(initialValue) {\n if (initialValue === void 0) {\n initialValue = false;\n }\n\n var _React$useState = useState(initialValue),\n isFocusWithin = _React$useState[0],\n setIsFocusWithin = _React$useState[1];\n\n var _useFocusWithin = useFocusWithin({\n onFocusWithin: function onFocusWithin() {\n setIsFocusWithin(true);\n },\n onBlurWithin: function onBlurWithin() {\n setIsFocusWithin(false);\n }\n }),\n focusWithinProps = _useFocusWithin.focusWithinProps;\n\n return [isFocusWithin, focusWithinProps];\n};\n\nexport { MemoryCacheProvider, useAnimatedScrollDelta, useAriaIsolation, useDefferedBeforeUnloadingState, useDialogFocusWithdrawal, useDocumentEvent, useEventPreventDefault, useFocusTypeTracking, useHTMLElementEvent, useHover, useInMemoryCache, useIsFocusWithin, useKeyboardTriggeredClick, useOnGlobalKeydown, useOnMount, useOnUnmount, useOnUpdate, usePostponedToUpdateCallback, useRovingTabIndex, useScrollableChatList, useStreamState, useStreamValue, useTimeout, useToggle };\n","export default function _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}","export 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\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct.js\";\nexport default function _construct(Parent, args, Class) {\n if (isNativeReflectConstruct()) {\n _construct = Reflect.construct;\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\n return _construct.apply(null, arguments);\n}","import 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\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return construct(Class, arguments, getPrototypeOf(this).constructor);\n }\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\n return _wrapNativeSuper(Class);\n}","export default function _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _assertThisInitialized from '@babel/runtime/helpers/esm/assertThisInitialized';\nimport _inheritsLoose from '@babel/runtime/helpers/esm/inheritsLoose';\nimport _wrapNativeSuper from '@babel/runtime/helpers/esm/wrapNativeSuper';\nimport _taggedTemplateLiteralLoose from '@babel/runtime/helpers/esm/taggedTemplateLiteralLoose';\n\nfunction last() {\n var _ref;\n\n return _ref = arguments.length - 1, _ref < 0 || arguments.length <= _ref ? undefined : arguments[_ref];\n}\n\nfunction negation(a) {\n return -a;\n}\n\nfunction addition(a, b) {\n return a + b;\n}\n\nfunction subtraction(a, b) {\n return a - b;\n}\n\nfunction multiplication(a, b) {\n return a * b;\n}\n\nfunction division(a, b) {\n return a / b;\n}\n\nfunction factorial(a) {\n if (a % 1 || !(+a >= 0)) return NaN;\n if (a > 170) return Infinity;else if (a === 0) return 1;else {\n return a * factorial(a - 1);\n }\n}\n\nfunction power(a, b) {\n return Math.pow(a, b);\n}\n\nfunction sqrt(a) {\n return Math.sqrt(a);\n}\n\nfunction max() {\n return Math.max.apply(Math, arguments);\n}\n\nfunction min() {\n return Math.min.apply(Math, arguments);\n}\n\nfunction comma() {\n return Array.of.apply(Array, arguments);\n}\n\nvar defaultMathSymbols = {\n symbols: {\n '!': {\n postfix: {\n symbol: '!',\n f: factorial,\n notation: 'postfix',\n precedence: 6,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '!',\n regSymbol: '!'\n },\n '^': {\n infix: {\n symbol: '^',\n f: power,\n notation: 'infix',\n precedence: 5,\n rightToLeft: 1,\n argCount: 2\n },\n symbol: '^',\n regSymbol: '\\\\^'\n },\n '*': {\n infix: {\n symbol: '*',\n f: multiplication,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '*',\n regSymbol: '\\\\*'\n },\n '/': {\n infix: {\n symbol: '/',\n f: division,\n notation: 'infix',\n precedence: 4,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: '/',\n regSymbol: '/'\n },\n '+': {\n infix: {\n symbol: '+',\n f: addition,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '+',\n f: last,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '+',\n regSymbol: '\\\\+'\n },\n '-': {\n infix: {\n symbol: '-',\n f: subtraction,\n notation: 'infix',\n precedence: 2,\n rightToLeft: 0,\n argCount: 2\n },\n prefix: {\n symbol: '-',\n f: negation,\n notation: 'prefix',\n precedence: 3,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '-',\n regSymbol: '-'\n },\n ',': {\n infix: {\n symbol: ',',\n f: comma,\n notation: 'infix',\n precedence: 1,\n rightToLeft: 0,\n argCount: 2\n },\n symbol: ',',\n regSymbol: ','\n },\n '(': {\n prefix: {\n symbol: '(',\n f: last,\n notation: 'prefix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: '(',\n regSymbol: '\\\\('\n },\n ')': {\n postfix: {\n symbol: ')',\n f: undefined,\n notation: 'postfix',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: ')',\n regSymbol: '\\\\)'\n },\n min: {\n func: {\n symbol: 'min',\n f: min,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'min',\n regSymbol: 'min\\\\b'\n },\n max: {\n func: {\n symbol: 'max',\n f: max,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'max',\n regSymbol: 'max\\\\b'\n },\n sqrt: {\n func: {\n symbol: 'sqrt',\n f: sqrt,\n notation: 'func',\n precedence: 0,\n rightToLeft: 0,\n argCount: 1\n },\n symbol: 'sqrt',\n regSymbol: 'sqrt\\\\b'\n }\n }\n};\n\n// based on https://github.com/styled-components/styled-components/blob/fcf6f3804c57a14dd7984dfab7bc06ee2edca044/src/utils/error.js\n\n/**\n * Parse errors.md and turn it into a simple hash of code: message\n * @private\n */\nvar ERRORS = {\n \"1\": \"Passed invalid arguments to hsl, please pass multiple numbers e.g. hsl(360, 0.75, 0.4) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75 }).\\n\\n\",\n \"2\": \"Passed invalid arguments to hsla, please pass multiple numbers e.g. hsla(360, 0.75, 0.4, 0.7) or an object e.g. rgb({ hue: 255, saturation: 0.4, lightness: 0.75, alpha: 0.7 }).\\n\\n\",\n \"3\": \"Passed an incorrect argument to a color function, please pass a string representation of a color.\\n\\n\",\n \"4\": \"Couldn't generate valid rgb string from %s, it returned %s.\\n\\n\",\n \"5\": \"Couldn't parse the color string. Please provide the color as a string in hex, rgb, rgba, hsl or hsla notation.\\n\\n\",\n \"6\": \"Passed invalid arguments to rgb, please pass multiple numbers e.g. rgb(255, 205, 100) or an object e.g. rgb({ red: 255, green: 205, blue: 100 }).\\n\\n\",\n \"7\": \"Passed invalid arguments to rgba, please pass multiple numbers e.g. rgb(255, 205, 100, 0.75) or an object e.g. rgb({ red: 255, green: 205, blue: 100, alpha: 0.75 }).\\n\\n\",\n \"8\": \"Passed invalid argument to toColorString, please pass a RgbColor, RgbaColor, HslColor or HslaColor object.\\n\\n\",\n \"9\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"10\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"11\": \"Invalid value passed as base to modularScale, expected number or em string but got \\\"%s\\\"\\n\\n\",\n \"12\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"13\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got \\\"%s\\\" instead.\\n\\n\",\n \"14\": \"Passed invalid pixel value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"15\": \"Passed invalid base value (\\\"%s\\\") to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"16\": \"You must provide a template to this method.\\n\\n\",\n \"17\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"18\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"19\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"20\": \"expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"21\": \"expects the objects in the first argument array to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"22\": \"expects the first argument object to have the properties `prop`, `fromSize`, and `toSize`.\\n\\n\",\n \"23\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"24\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"25\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"26\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"27\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"28\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"29\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"30\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"31\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"32\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s')\\n\\n\",\n \"33\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation\\n\\n\",\n \"34\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"35\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"36\": \"Property must be a string value.\\n\\n\",\n \"37\": \"Syntax Error at %s.\\n\\n\",\n \"38\": \"Formula contains a function that needs parentheses at %s.\\n\\n\",\n \"39\": \"Formula is missing closing parenthesis at %s.\\n\\n\",\n \"40\": \"Formula has too many closing parentheses at %s.\\n\\n\",\n \"41\": \"All values in a formula must have the same unit or be unitless.\\n\\n\",\n \"42\": \"Please provide a number of steps to the modularScale helper.\\n\\n\",\n \"43\": \"Please pass a number or one of the predefined scales to the modularScale helper as the ratio.\\n\\n\",\n \"44\": \"Invalid value passed as base to modularScale, expected number or em/rem string but got %s.\\n\\n\",\n \"45\": \"Passed invalid argument to hslToColorString, please pass a HslColor or HslaColor object.\\n\\n\",\n \"46\": \"Passed invalid argument to rgbToColorString, please pass a RgbColor or RgbaColor object.\\n\\n\",\n \"47\": \"minScreen and maxScreen must be provided as stringified numbers with the same units.\\n\\n\",\n \"48\": \"fromSize and toSize must be provided as stringified numbers with the same units.\\n\\n\",\n \"49\": \"Expects either an array of objects or a single object with the properties prop, fromSize, and toSize.\\n\\n\",\n \"50\": \"Expects the objects in the first argument array to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"51\": \"Expects the first argument object to have the properties prop, fromSize, and toSize.\\n\\n\",\n \"52\": \"fontFace expects either the path to the font file(s) or a name of a local copy.\\n\\n\",\n \"53\": \"fontFace expects localFonts to be an array.\\n\\n\",\n \"54\": \"fontFace expects fileFormats to be an array.\\n\\n\",\n \"55\": \"fontFace expects a name of a font-family.\\n\\n\",\n \"56\": \"linearGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"57\": \"radialGradient requries at least 2 color-stops to properly render.\\n\\n\",\n \"58\": \"Please supply a filename to retinaImage() as the first argument.\\n\\n\",\n \"59\": \"Passed invalid argument to triangle, please pass correct pointingDirection e.g. 'right'.\\n\\n\",\n \"60\": \"Passed an invalid value to `height` or `width`. Please provide a pixel based unit.\\n\\n\",\n \"61\": \"Property must be a string value.\\n\\n\",\n \"62\": \"borderRadius expects a radius value as a string or number as the second argument.\\n\\n\",\n \"63\": \"borderRadius expects one of \\\"top\\\", \\\"bottom\\\", \\\"left\\\" or \\\"right\\\" as the first argument.\\n\\n\",\n \"64\": \"The animation shorthand only takes 8 arguments. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"65\": \"To pass multiple animations please supply them in arrays, e.g. animation(['rotate', '2s'], ['move', '1s'])\\\\nTo pass a single animation please supply them in simple values, e.g. animation('rotate', '2s').\\n\\n\",\n \"66\": \"The animation shorthand arrays can only have 8 elements. See the specification for more information: http://mdn.io/animation.\\n\\n\",\n \"67\": \"You must provide a template to this method.\\n\\n\",\n \"68\": \"You passed an unsupported selector state to this method.\\n\\n\",\n \"69\": \"Expected a string ending in \\\"px\\\" or a number passed as the first argument to %s(), got %s instead.\\n\\n\",\n \"70\": \"Expected a string ending in \\\"px\\\" or a number passed as the second argument to %s(), got %s instead.\\n\\n\",\n \"71\": \"Passed invalid pixel value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"72\": \"Passed invalid base value %s to %s(), please pass a value like \\\"12px\\\" or 12.\\n\\n\",\n \"73\": \"Please provide a valid CSS variable.\\n\\n\",\n \"74\": \"CSS variable not found.\\n\\n\",\n \"75\": \"fromSize and toSize must be provided as stringified numbers with the same units as minScreen and maxScreen.\\n\"\n};\n/**\n * super basic version of sprintf\n * @private\n */\n\nfunction format() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var a = args[0];\n var b = [];\n var c;\n\n for (c = 1; c < args.length; c += 1) {\n b.push(args[c]);\n }\n\n b.forEach(function (d) {\n a = a.replace(/%[a-z]/, d);\n });\n return a;\n}\n/**\n * Create an error file out of errors.md for development and a simple web link to the full errors\n * in production mode.\n * @private\n */\n\n\nvar PolishedError = /*#__PURE__*/function (_Error) {\n _inheritsLoose(PolishedError, _Error);\n\n function PolishedError(code) {\n var _this;\n\n if (process.env.NODE_ENV === 'production') {\n _this = _Error.call(this, \"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#\" + code + \" for more information.\") || this;\n } else {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n _this = _Error.call(this, format.apply(void 0, [ERRORS[code]].concat(args))) || this;\n }\n\n return _assertThisInitialized(_this);\n }\n\n return PolishedError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nvar unitRegExp = /((?!\\w)a|na|hc|mc|dg|me[r]?|xe|ni(?![a-zA-Z])|mm|cp|tp|xp|q(?!s)|hv|xamv|nimv|wv|sm|s(?!\\D|$)|ged|darg?|nrut)/g; // Merges additional math functionality into the defaults.\n\nfunction mergeSymbolMaps(additionalSymbols) {\n var symbolMap = {};\n symbolMap.symbols = additionalSymbols ? _extends({}, defaultMathSymbols.symbols, additionalSymbols.symbols) : _extends({}, defaultMathSymbols.symbols);\n return symbolMap;\n}\n\nfunction exec(operators, values) {\n var _ref;\n\n var op = operators.pop();\n values.push(op.f.apply(op, (_ref = []).concat.apply(_ref, values.splice(-op.argCount))));\n return op.precedence;\n}\n\nfunction calculate(expression, additionalSymbols) {\n var symbolMap = mergeSymbolMaps(additionalSymbols);\n var match;\n var operators = [symbolMap.symbols['('].prefix];\n var values = [];\n var pattern = new RegExp( // Pattern for numbers\n \"\\\\d+(?:\\\\.\\\\d+)?|\" + // ...and patterns for individual operators/function names\n Object.keys(symbolMap.symbols).map(function (key) {\n return symbolMap.symbols[key];\n }) // longer symbols should be listed first\n // $FlowFixMe\n .sort(function (a, b) {\n return b.symbol.length - a.symbol.length;\n }) // $FlowFixMe\n .map(function (val) {\n return val.regSymbol;\n }).join('|') + \"|(\\\\S)\", 'g');\n pattern.lastIndex = 0; // Reset regular expression object\n\n var afterValue = false;\n\n do {\n match = pattern.exec(expression);\n\n var _ref2 = match || [')', undefined],\n token = _ref2[0],\n bad = _ref2[1];\n\n var notNumber = symbolMap.symbols[token];\n var notNewValue = notNumber && !notNumber.prefix && !notNumber.func;\n var notAfterValue = !notNumber || !notNumber.postfix && !notNumber.infix; // Check for syntax errors:\n\n if (bad || (afterValue ? notAfterValue : notNewValue)) {\n throw new PolishedError(37, match ? match.index : expression.length, expression);\n }\n\n if (afterValue) {\n // We either have an infix or postfix operator (they should be mutually exclusive)\n var curr = notNumber.postfix || notNumber.infix;\n\n do {\n var prev = operators[operators.length - 1];\n if ((curr.precedence - prev.precedence || prev.rightToLeft) > 0) break; // Apply previous operator, since it has precedence over current one\n } while (exec(operators, values)); // Exit loop after executing an opening parenthesis or function\n\n\n afterValue = curr.notation === 'postfix';\n\n if (curr.symbol !== ')') {\n operators.push(curr); // Postfix always has precedence over any operator that follows after it\n\n if (afterValue) exec(operators, values);\n }\n } else if (notNumber) {\n // prefix operator or function\n operators.push(notNumber.prefix || notNumber.func);\n\n if (notNumber.func) {\n // Require an opening parenthesis\n match = pattern.exec(expression);\n\n if (!match || match[0] !== '(') {\n throw new PolishedError(38, match ? match.index : expression.length, expression);\n }\n }\n } else {\n // number\n values.push(+token);\n afterValue = true;\n }\n } while (match && operators.length);\n\n if (operators.length) {\n throw new PolishedError(39, match ? match.index : expression.length, expression);\n } else if (match) {\n throw new PolishedError(40, match ? match.index : expression.length, expression);\n } else {\n return values.pop();\n }\n}\n\nfunction reverseString(str) {\n return str.split('').reverse().join('');\n}\n/**\n * Helper for doing math with CSS Units. Accepts a formula as a string. All values in the formula must have the same unit (or be unitless). Supports complex formulas utliziing addition, subtraction, multiplication, division, square root, powers, factorial, min, max, as well as parentheses for order of operation.\n *\n *In cases where you need to do calculations with mixed units where one unit is a [relative length unit](https://developer.mozilla.org/en-US/docs/Web/CSS/length#Relative_length_units), you will want to use [CSS Calc](https://developer.mozilla.org/en-US/docs/Web/CSS/calc).\n *\n * *warning* While we've done everything possible to ensure math safely evalutes formulas expressed as strings, you should always use extreme caution when passing `math` user provided values.\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: math('12rem + 8rem'),\n * fontSize: math('(12px + 2px) * 3'),\n * fontSize: math('3px^2 + sqrt(4)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${math('12rem + 8rem')};\n * fontSize: ${math('(12px + 2px) * 3')};\n * fontSize: ${math('3px^2 + sqrt(4)')};\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * fontSize: '20rem',\n * fontSize: '42px',\n * fontSize: '11px',\n * }\n */\n\n\nfunction math(formula, additionalSymbols) {\n var reversedFormula = reverseString(formula);\n var formulaMatch = reversedFormula.match(unitRegExp); // Check that all units are the same\n\n if (formulaMatch && !formulaMatch.every(function (unit) {\n return unit === formulaMatch[0];\n })) {\n throw new PolishedError(41);\n }\n\n var cleanFormula = reverseString(reversedFormula.replace(unitRegExp, ''));\n return \"\" + calculate(cleanFormula, additionalSymbols) + (formulaMatch ? reverseString(formulaMatch[0]) : '');\n}\n\nvar cssVariableRegex = /--[\\S]*/g;\n/**\n * Fetches the value of a passed CSS Variable.\n *\n * Passthrough can be enabled (off by default) for when you are unsure of the input and want non-variable values to be returned instead of an error.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'background': cssVar('--background-color'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${cssVar('--background-color')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'background': 'red'\n * }\n */\n\nfunction cssVar(cssVariable, passThrough) {\n if (!cssVariable || !cssVariable.match(cssVariableRegex)) {\n if (passThrough) return cssVariable;\n throw new PolishedError(73);\n }\n\n var variableValue;\n /* eslint-disable */\n\n /* istanbul ignore next */\n\n if (typeof document !== 'undefined' && document.documentElement !== null) {\n variableValue = getComputedStyle(document.documentElement).getPropertyValue(cssVariable);\n }\n /* eslint-enable */\n\n\n if (variableValue) {\n return variableValue.trim();\n } else {\n throw new PolishedError(74);\n }\n}\n\n// @private\nfunction capitalizeString(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nvar positionMap = ['Top', 'Right', 'Bottom', 'Left'];\n\nfunction generateProperty(property, position) {\n if (!property) return position.toLowerCase();\n var splitProperty = property.split('-');\n\n if (splitProperty.length > 1) {\n splitProperty.splice(1, 0, position);\n return splitProperty.reduce(function (acc, val) {\n return \"\" + acc + capitalizeString(val);\n });\n }\n\n var joinedProperty = property.replace(/([a-z])([A-Z])/g, \"$1\" + position + \"$2\");\n return property === joinedProperty ? \"\" + property + position : joinedProperty;\n}\n\nfunction generateStyles(property, valuesWithDefaults) {\n var styles = {};\n\n for (var i = 0; i < valuesWithDefaults.length; i += 1) {\n if (valuesWithDefaults[i] || valuesWithDefaults[i] === 0) {\n styles[generateProperty(property, positionMap[i])] = valuesWithDefaults[i];\n }\n }\n\n return styles;\n}\n/**\n * Enables shorthand for direction-based properties. It accepts a property (hyphenated or camelCased) and up to four values that map to top, right, bottom, and left, respectively. You can optionally pass an empty string to get only the directional values as properties. You can also optionally pass a null argument for a directional value to ignore it.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...directionalProperty('padding', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${directionalProperty('padding', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\n\n\nfunction directionalProperty(property) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n // prettier-ignore\n var firstValue = values[0],\n _values$ = values[1],\n secondValue = _values$ === void 0 ? firstValue : _values$,\n _values$2 = values[2],\n thirdValue = _values$2 === void 0 ? firstValue : _values$2,\n _values$3 = values[3],\n fourthValue = _values$3 === void 0 ? secondValue : _values$3;\n var valuesWithDefaults = [firstValue, secondValue, thirdValue, fourthValue];\n return generateStyles(property, valuesWithDefaults);\n}\n\n/**\n * Check if a string ends with something\n * @private\n */\nfunction endsWith(string, suffix) {\n return string.substr(-suffix.length) === suffix;\n}\n\nvar cssRegex = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value minus its unit of measure.\n *\n * @deprecated - stripUnit's unitReturn functionality has been marked for deprecation in polished 4.0. It's functionality has been been moved to getValueAndUnit.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': stripUnit('100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${stripUnit('100px')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100\n * }\n */\n\nfunction stripUnit(value, unitReturn) {\n if (typeof value !== 'string') return unitReturn ? [value, undefined] : value;\n var matchedValue = value.match(cssRegex);\n\n if (unitReturn) {\n // eslint-disable-next-line no-console\n console.warn(\"stripUnit's unitReturn functionality has been marked for deprecation in polished 4.0. It's functionality has been been moved to getValueAndUnit.\");\n if (matchedValue) return [parseFloat(value), matchedValue[2]];\n return [value, undefined];\n }\n\n if (matchedValue) return parseFloat(value);\n return value;\n}\n\n/**\n * Factory function that creates pixel-to-x converters\n * @private\n */\n\nvar pxtoFactory = function pxtoFactory(to) {\n return function (pxval, base) {\n if (base === void 0) {\n base = '16px';\n }\n\n var newPxval = pxval;\n var newBase = base;\n\n if (typeof pxval === 'string') {\n if (!endsWith(pxval, 'px')) {\n throw new PolishedError(69, to, pxval);\n }\n\n newPxval = stripUnit(pxval);\n }\n\n if (typeof base === 'string') {\n if (!endsWith(base, 'px')) {\n throw new PolishedError(70, to, base);\n }\n\n newBase = stripUnit(base);\n }\n\n if (typeof newPxval === 'string') {\n throw new PolishedError(71, pxval, to);\n }\n\n if (typeof newBase === 'string') {\n throw new PolishedError(72, base, to);\n }\n\n return \"\" + newPxval / newBase + to;\n };\n};\n\n/**\n * Convert pixel value to ems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': em('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${em('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1em'\n * }\n */\n\nvar em = /*#__PURE__*/pxtoFactory('em');\n\nvar cssRegex$1 = /^([+-]?(?:\\d+|\\d*\\.\\d+))([a-z]*|%)$/;\n/**\n * Returns a given CSS value and its unit as elements of an array.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * '--dimension': getValueAndUnit('100px')[0],\n * '--unit': getValueAndUnit('100px')[1],\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * --dimension: ${getValueAndUnit('100px')[0]};\n * --unit: ${getValueAndUnit('100px')[1]};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * '--dimension': 100,\n * '--unit': 'px',\n * }\n */\n\nfunction getValueAndUnit(value) {\n if (typeof value !== 'string') return [value, ''];\n var matchedValue = value.match(cssRegex$1);\n if (matchedValue) return [parseFloat(value), matchedValue[2]];\n return [value, undefined];\n}\n\nvar ratioNames = {\n minorSecond: 1.067,\n majorSecond: 1.125,\n minorThird: 1.2,\n majorThird: 1.25,\n perfectFourth: 1.333,\n augFourth: 1.414,\n perfectFifth: 1.5,\n minorSixth: 1.6,\n goldenSection: 1.618,\n majorSixth: 1.667,\n minorSeventh: 1.778,\n majorSeventh: 1.875,\n octave: 2,\n majorTenth: 2.5,\n majorEleventh: 2.667,\n majorTwelfth: 3,\n doubleOctave: 4\n};\n\nfunction getRatio(ratioName) {\n return ratioNames[ratioName];\n}\n/**\n * Establish consistent measurements and spacial relationships throughout your projects by incrementing an em or rem value up or down a defined scale. We provide a list of commonly used scales as pre-defined variables.\n * @example\n * // Styles as object usage\n * const styles = {\n * // Increment two steps up the default scale\n * 'fontSize': modularScale(2)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * // Increment two steps up the default scale\n * fontSize: ${modularScale(2)}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'fontSize': '1.77689em'\n * }\n */\n\n\nfunction modularScale(steps, base, ratio) {\n if (base === void 0) {\n base = '1em';\n }\n\n if (ratio === void 0) {\n ratio = 1.333;\n }\n\n if (typeof steps !== 'number') {\n throw new PolishedError(42);\n }\n\n if (typeof ratio === 'string' && !ratioNames[ratio]) {\n throw new PolishedError(43);\n }\n\n var _ref = typeof base === 'string' ? getValueAndUnit(base) : [base, ''],\n realBase = _ref[0],\n unit = _ref[1];\n\n var realRatio = typeof ratio === 'string' ? getRatio(ratio) : ratio;\n\n if (typeof realBase === 'string') {\n throw new PolishedError(44, base);\n }\n\n return \"\" + realBase * Math.pow(realRatio, steps) + (unit || '');\n}\n\n/**\n * Convert pixel value to rems. The default base value is 16px, but can be changed by passing a\n * second argument to the function.\n * @function\n * @param {string|number} pxval\n * @param {string|number} [base='16px']\n * @example\n * // Styles as object usage\n * const styles = {\n * 'height': rem('16px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * height: ${rem('16px')}\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * 'height': '1rem'\n * }\n */\n\nvar rem = /*#__PURE__*/pxtoFactory('rem');\n\n/**\n * Returns a CSS calc formula for linear interpolation of a property between two values. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px').\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * fontSize: between('20px', '100px', '400px', '1000px'),\n * fontSize: between('20px', '100px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * fontSize: ${between('20px', '100px', '400px', '1000px')};\n * fontSize: ${between('20px', '100px')}\n * `\n *\n * // CSS as JS Output\n *\n * h1: {\n * 'fontSize': 'calc(-33.33333333333334px + 13.333333333333334vw)',\n * 'fontSize': 'calc(-9.090909090909093px + 9.090909090909092vw)'\n * }\n */\n\nfunction between(fromSize, toSize, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n var _getValueAndUnit = getValueAndUnit(fromSize),\n unitlessFromSize = _getValueAndUnit[0],\n fromSizeUnit = _getValueAndUnit[1];\n\n var _getValueAndUnit2 = getValueAndUnit(toSize),\n unitlessToSize = _getValueAndUnit2[0],\n toSizeUnit = _getValueAndUnit2[1];\n\n var _getValueAndUnit3 = getValueAndUnit(minScreen),\n unitlessMinScreen = _getValueAndUnit3[0],\n minScreenUnit = _getValueAndUnit3[1];\n\n var _getValueAndUnit4 = getValueAndUnit(maxScreen),\n unitlessMaxScreen = _getValueAndUnit4[0],\n maxScreenUnit = _getValueAndUnit4[1];\n\n if (typeof unitlessMinScreen !== 'number' || typeof unitlessMaxScreen !== 'number' || !minScreenUnit || !maxScreenUnit || minScreenUnit !== maxScreenUnit) {\n throw new PolishedError(47);\n }\n\n if (typeof unitlessFromSize !== 'number' || typeof unitlessToSize !== 'number' || fromSizeUnit !== toSizeUnit) {\n throw new PolishedError(48);\n }\n\n if (fromSizeUnit !== minScreenUnit || toSizeUnit !== maxScreenUnit) {\n throw new PolishedError(75);\n }\n\n var slope = (unitlessFromSize - unitlessToSize) / (unitlessMinScreen - unitlessMaxScreen);\n var base = unitlessToSize - slope * unitlessMaxScreen;\n return \"calc(\" + base.toFixed(2) + (fromSizeUnit || '') + \" + \" + (100 * slope).toFixed(2) + \"vw)\";\n}\n\n/**\n * CSS to contain a float (credit to CSSMojo).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...clearFix(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${clearFix()}\n * `\n *\n * // CSS as JS Output\n *\n * '&::after': {\n * 'clear': 'both',\n * 'content': '\"\"',\n * 'display': 'table'\n * }\n */\nfunction clearFix(parent) {\n var _ref;\n\n if (parent === void 0) {\n parent = '&';\n }\n\n var pseudoSelector = parent + \"::after\";\n return _ref = {}, _ref[pseudoSelector] = {\n clear: 'both',\n content: '\"\"',\n display: 'table'\n }, _ref;\n}\n\n/**\n * CSS to fully cover an area. Can optionally be passed an offset to act as a \"padding\".\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...cover()\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${cover()}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'position': 'absolute',\n * 'top': '0',\n * 'right: '0',\n * 'bottom': '0',\n * 'left: '0'\n * }\n */\nfunction cover(offset) {\n if (offset === void 0) {\n offset = 0;\n }\n\n return {\n position: 'absolute',\n top: offset,\n right: offset,\n bottom: offset,\n left: offset\n };\n}\n\n/**\n * CSS to represent truncated text with an ellipsis.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...ellipsis('250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${ellipsis('250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * 'display': 'inline-block',\n * 'maxWidth': '250px',\n * 'overflow': 'hidden',\n * 'textOverflow': 'ellipsis',\n * 'whiteSpace': 'nowrap',\n * 'wordWrap': 'normal'\n * }\n */\nfunction ellipsis(width) {\n if (width === void 0) {\n width = '100%';\n }\n\n return {\n display: 'inline-block',\n maxWidth: width,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n wordWrap: 'normal'\n };\n}\n\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/**\n * Returns a set of media queries that resizes a property (or set of properties) between a provided fromSize and toSize. Accepts optional minScreen (defaults to '320px') and maxScreen (defaults to '1200px') to constrain the interpolation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${fluidRange(\n * {\n * prop: 'padding',\n * fromSize: '20px',\n * toSize: '100px',\n * },\n * '400px',\n * '1000px',\n * )}\n * `\n *\n * // CSS as JS Output\n *\n * div: {\n * \"@media (min-width: 1000px)\": Object {\n * \"padding\": \"100px\",\n * },\n * \"@media (min-width: 400px)\": Object {\n * \"padding\": \"calc(-33.33333333333334px + 13.333333333333334vw)\",\n * },\n * \"padding\": \"20px\",\n * }\n */\nfunction fluidRange(cssProp, minScreen, maxScreen) {\n if (minScreen === void 0) {\n minScreen = '320px';\n }\n\n if (maxScreen === void 0) {\n maxScreen = '1200px';\n }\n\n if (!Array.isArray(cssProp) && typeof cssProp !== 'object' || cssProp === null) {\n throw new PolishedError(49);\n }\n\n if (Array.isArray(cssProp)) {\n var mediaQueries = {};\n var fallbacks = {};\n\n for (var _iterator = _createForOfIteratorHelperLoose(cssProp), _step; !(_step = _iterator()).done;) {\n var _extends2, _extends3;\n\n var obj = _step.value;\n\n if (!obj.prop || !obj.fromSize || !obj.toSize) {\n throw new PolishedError(50);\n }\n\n fallbacks[obj.prop] = obj.fromSize;\n mediaQueries[\"@media (min-width: \" + minScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + minScreen + \")\"], (_extends2 = {}, _extends2[obj.prop] = between(obj.fromSize, obj.toSize, minScreen, maxScreen), _extends2));\n mediaQueries[\"@media (min-width: \" + maxScreen + \")\"] = _extends({}, mediaQueries[\"@media (min-width: \" + maxScreen + \")\"], (_extends3 = {}, _extends3[obj.prop] = obj.toSize, _extends3));\n }\n\n return _extends({}, fallbacks, mediaQueries);\n } else {\n var _ref, _ref2, _ref3;\n\n if (!cssProp.prop || !cssProp.fromSize || !cssProp.toSize) {\n throw new PolishedError(51);\n }\n\n return _ref3 = {}, _ref3[cssProp.prop] = cssProp.fromSize, _ref3[\"@media (min-width: \" + minScreen + \")\"] = (_ref = {}, _ref[cssProp.prop] = between(cssProp.fromSize, cssProp.toSize, minScreen, maxScreen), _ref), _ref3[\"@media (min-width: \" + maxScreen + \")\"] = (_ref2 = {}, _ref2[cssProp.prop] = cssProp.toSize, _ref2), _ref3;\n }\n}\n\nvar dataURIRegex = /^\\s*data:([a-z]+\\/[a-z-]+(;[a-z-]+=[a-z-]+)?)?(;charset=[a-z0-9-]+)?(;base64)?,[a-z0-9!$&',()*+,;=\\-._~:@/?%\\s]*\\s*$/i;\nvar formatHintMap = {\n woff: 'woff',\n woff2: 'woff2',\n ttf: 'truetype',\n otf: 'opentype',\n eot: 'embedded-opentype',\n svg: 'svg',\n svgz: 'svg'\n};\n\nfunction generateFormatHint(format, formatHint) {\n if (!formatHint) return '';\n return \" format(\\\"\" + formatHintMap[format] + \"\\\")\";\n}\n\nfunction isDataURI(fontFilePath) {\n return !!fontFilePath.replace(/\\s+/g, ' ').match(dataURIRegex);\n}\n\nfunction generateFileReferences(fontFilePath, fileFormats, formatHint) {\n if (isDataURI(fontFilePath)) {\n return \"url(\\\"\" + fontFilePath + \"\\\")\" + generateFormatHint(fileFormats[0], formatHint);\n }\n\n var fileFontReferences = fileFormats.map(function (format) {\n return \"url(\\\"\" + fontFilePath + \".\" + format + \"\\\")\" + generateFormatHint(format, formatHint);\n });\n return fileFontReferences.join(', ');\n}\n\nfunction generateLocalReferences(localFonts) {\n var localFontReferences = localFonts.map(function (font) {\n return \"local(\\\"\" + font + \"\\\")\";\n });\n return localFontReferences.join(', ');\n}\n\nfunction generateSources(fontFilePath, localFonts, fileFormats, formatHint) {\n var fontReferences = [];\n if (localFonts) fontReferences.push(generateLocalReferences(localFonts));\n\n if (fontFilePath) {\n fontReferences.push(generateFileReferences(fontFilePath, fileFormats, formatHint));\n }\n\n return fontReferences.join(', ');\n}\n/**\n * CSS for a @font-face declaration.\n *\n * @example\n * // Styles as object basic usage\n * const styles = {\n * ...fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * })\n * }\n *\n * // styled-components basic usage\n * const GlobalStyle = createGlobalStyle`${\n * fontFace({\n * 'fontFamily': 'Sans-Pro',\n * 'fontFilePath': 'path/to/file'\n * }\n * )}`\n *\n * // CSS as JS Output\n *\n * '@font-face': {\n * 'fontFamily': 'Sans-Pro',\n * 'src': 'url(\"path/to/file.eot\"), url(\"path/to/file.woff2\"), url(\"path/to/file.woff\"), url(\"path/to/file.ttf\"), url(\"path/to/file.svg\")',\n * }\n */\n\n\nfunction fontFace(_ref) {\n var fontFamily = _ref.fontFamily,\n fontFilePath = _ref.fontFilePath,\n fontStretch = _ref.fontStretch,\n fontStyle = _ref.fontStyle,\n fontVariant = _ref.fontVariant,\n fontWeight = _ref.fontWeight,\n _ref$fileFormats = _ref.fileFormats,\n fileFormats = _ref$fileFormats === void 0 ? ['eot', 'woff2', 'woff', 'ttf', 'svg'] : _ref$fileFormats,\n _ref$formatHint = _ref.formatHint,\n formatHint = _ref$formatHint === void 0 ? false : _ref$formatHint,\n localFonts = _ref.localFonts,\n unicodeRange = _ref.unicodeRange,\n fontDisplay = _ref.fontDisplay,\n fontVariationSettings = _ref.fontVariationSettings,\n fontFeatureSettings = _ref.fontFeatureSettings;\n // Error Handling\n if (!fontFamily) throw new PolishedError(55);\n\n if (!fontFilePath && !localFonts) {\n throw new PolishedError(52);\n }\n\n if (localFonts && !Array.isArray(localFonts)) {\n throw new PolishedError(53);\n }\n\n if (!Array.isArray(fileFormats)) {\n throw new PolishedError(54);\n }\n\n var fontFaceDeclaration = {\n '@font-face': {\n fontFamily: fontFamily,\n src: generateSources(fontFilePath, localFonts, fileFormats, formatHint),\n unicodeRange: unicodeRange,\n fontStretch: fontStretch,\n fontStyle: fontStyle,\n fontVariant: fontVariant,\n fontWeight: fontWeight,\n fontDisplay: fontDisplay,\n fontVariationSettings: fontVariationSettings,\n fontFeatureSettings: fontFeatureSettings\n }\n }; // Removes undefined fields for cleaner css object.\n\n return JSON.parse(JSON.stringify(fontFaceDeclaration));\n}\n\n/**\n * CSS to hide text to show a background image in a SEO-friendly way.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'backgroundImage': 'url(logo.png)',\n * ...hideText(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * backgroundImage: url(logo.png);\n * ${hideText()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'backgroundImage': 'url(logo.png)',\n * 'textIndent': '101%',\n * 'overflow': 'hidden',\n * 'whiteSpace': 'nowrap',\n * }\n */\nfunction hideText() {\n return {\n textIndent: '101%',\n overflow: 'hidden',\n whiteSpace: 'nowrap'\n };\n}\n\n/**\n * CSS to hide content visually but remain accessible to screen readers.\n * from [HTML5 Boilerplate](https://github.com/h5bp/html5-boilerplate/blob/9a176f57af1cfe8ec70300da4621fb9b07e5fa31/src/css/main.css#L121)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...hideVisually(),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hideVisually()};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'border': '0',\n * 'clip': 'rect(0 0 0 0)',\n * 'height': '1px',\n * 'margin': '-1px',\n * 'overflow': 'hidden',\n * 'padding': '0',\n * 'position': 'absolute',\n * 'whiteSpace': 'nowrap',\n * 'width': '1px',\n * }\n */\nfunction hideVisually() {\n return {\n border: '0',\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: '0',\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n };\n}\n\n/**\n * Generates a media query to target HiDPI devices.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * [hiDPI(1.5)]: {\n * width: 200px;\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${hiDPI(1.5)} {\n * width: 200px;\n * }\n * `\n *\n * // CSS as JS Output\n *\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n * only screen and (min--moz-device-pixel-ratio: 1.5),\n * only screen and (-o-min-device-pixel-ratio: 1.5/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * 'width': '200px',\n * }\n */\nfunction hiDPI(ratio) {\n if (ratio === void 0) {\n ratio = 1.3;\n }\n\n return \"\\n @media only screen and (-webkit-min-device-pixel-ratio: \" + ratio + \"),\\n only screen and (min--moz-device-pixel-ratio: \" + ratio + \"),\\n only screen and (-o-min-device-pixel-ratio: \" + ratio + \"/1),\\n only screen and (min-resolution: \" + Math.round(ratio * 96) + \"dpi),\\n only screen and (min-resolution: \" + ratio + \"dppx)\\n \";\n}\n\nfunction constructGradientValue(literals) {\n var template = '';\n\n for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n substitutions[_key - 1] = arguments[_key];\n }\n\n for (var i = 0; i < literals.length; i += 1) {\n template += literals[i];\n\n if (i === substitutions.length - 1 && substitutions[i]) {\n var definedValues = substitutions.filter(function (substitute) {\n return !!substitute;\n }); // Adds leading coma if properties preceed color-stops\n\n if (definedValues.length > 1) {\n template = template.slice(0, -1);\n template += \", \" + substitutions[i]; // No trailing space if color-stops is the only param provided\n } else if (definedValues.length === 1) {\n template += \"\" + substitutions[i];\n }\n } else if (substitutions[i]) {\n template += substitutions[i] + \" \";\n }\n }\n\n return template.trim();\n}\n\nvar _templateObject;\n\n/**\n * CSS for declaring a linear gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${linearGradient({\n colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n toDirection: 'to top right',\n fallback: '#FFF',\n })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#FFF',\n * 'backgroundImage': 'linear-gradient(to top right, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction linearGradient(_ref) {\n var colorStops = _ref.colorStops,\n fallback = _ref.fallback,\n _ref$toDirection = _ref.toDirection,\n toDirection = _ref$toDirection === void 0 ? '' : _ref$toDirection;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(56);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].replace(/,\\s+/g, ',').split(' ')[0].replace(/,(?=\\S)/g, ', '),\n backgroundImage: constructGradientValue(_templateObject || (_templateObject = _taggedTemplateLiteralLoose([\"linear-gradient(\", \"\", \")\"])), toDirection, colorStops.join(', ').replace(/,(?=\\S)/g, ', '))\n };\n}\n\n/**\n * CSS to normalize abnormalities across browsers (normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css)\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...normalize(),\n * }\n *\n * // styled-components usage\n * const GlobalStyle = createGlobalStyle`${normalize()}`\n *\n * // CSS as JS Output\n *\n * html {\n * lineHeight: 1.15,\n * textSizeAdjust: 100%,\n * } ...\n */\nfunction normalize() {\n var _ref;\n\n return [(_ref = {\n html: {\n lineHeight: '1.15',\n textSizeAdjust: '100%'\n },\n body: {\n margin: '0'\n },\n main: {\n display: 'block'\n },\n h1: {\n fontSize: '2em',\n margin: '0.67em 0'\n },\n hr: {\n boxSizing: 'content-box',\n height: '0',\n overflow: 'visible'\n },\n pre: {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n },\n a: {\n backgroundColor: 'transparent'\n },\n 'abbr[title]': {\n borderBottom: 'none',\n textDecoration: 'underline'\n }\n }, _ref[\"b,\\n strong\"] = {\n fontWeight: 'bolder'\n }, _ref[\"code,\\n kbd,\\n samp\"] = {\n fontFamily: 'monospace, monospace',\n fontSize: '1em'\n }, _ref.small = {\n fontSize: '80%'\n }, _ref[\"sub,\\n sup\"] = {\n fontSize: '75%',\n lineHeight: '0',\n position: 'relative',\n verticalAlign: 'baseline'\n }, _ref.sub = {\n bottom: '-0.25em'\n }, _ref.sup = {\n top: '-0.5em'\n }, _ref.img = {\n borderStyle: 'none'\n }, _ref[\"button,\\n input,\\n optgroup,\\n select,\\n textarea\"] = {\n fontFamily: 'inherit',\n fontSize: '100%',\n lineHeight: '1.15',\n margin: '0'\n }, _ref[\"button,\\n input\"] = {\n overflow: 'visible'\n }, _ref[\"button,\\n select\"] = {\n textTransform: 'none'\n }, _ref[\"button,\\n html [type=\\\"button\\\"],\\n [type=\\\"reset\\\"],\\n [type=\\\"submit\\\"]\"] = {\n WebkitAppearance: 'button'\n }, _ref[\"button::-moz-focus-inner,\\n [type=\\\"button\\\"]::-moz-focus-inner,\\n [type=\\\"reset\\\"]::-moz-focus-inner,\\n [type=\\\"submit\\\"]::-moz-focus-inner\"] = {\n borderStyle: 'none',\n padding: '0'\n }, _ref[\"button:-moz-focusring,\\n [type=\\\"button\\\"]:-moz-focusring,\\n [type=\\\"reset\\\"]:-moz-focusring,\\n [type=\\\"submit\\\"]:-moz-focusring\"] = {\n outline: '1px dotted ButtonText'\n }, _ref.fieldset = {\n padding: '0.35em 0.625em 0.75em'\n }, _ref.legend = {\n boxSizing: 'border-box',\n color: 'inherit',\n display: 'table',\n maxWidth: '100%',\n padding: '0',\n whiteSpace: 'normal'\n }, _ref.progress = {\n verticalAlign: 'baseline'\n }, _ref.textarea = {\n overflow: 'auto'\n }, _ref[\"[type=\\\"checkbox\\\"],\\n [type=\\\"radio\\\"]\"] = {\n boxSizing: 'border-box',\n padding: '0'\n }, _ref[\"[type=\\\"number\\\"]::-webkit-inner-spin-button,\\n [type=\\\"number\\\"]::-webkit-outer-spin-button\"] = {\n height: 'auto'\n }, _ref['[type=\"search\"]'] = {\n WebkitAppearance: 'textfield',\n outlineOffset: '-2px'\n }, _ref['[type=\"search\"]::-webkit-search-decoration'] = {\n WebkitAppearance: 'none'\n }, _ref['::-webkit-file-upload-button'] = {\n WebkitAppearance: 'button',\n font: 'inherit'\n }, _ref.details = {\n display: 'block'\n }, _ref.summary = {\n display: 'list-item'\n }, _ref.template = {\n display: 'none'\n }, _ref['[hidden]'] = {\n display: 'none'\n }, _ref), {\n 'abbr[title]': {\n textDecoration: 'underline dotted'\n }\n }];\n}\n\nvar _templateObject$1;\n\n/**\n * CSS for declaring a radial gradient, including a fallback background-color. The fallback is either the first color-stop or an explicitly passed fallback color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${radialGradient({\n * colorStops: ['#00FFFF 0%', 'rgba(0, 0, 255, 0) 50%', '#0000FF 95%'],\n * extent: 'farthest-corner at 45px 45px',\n * position: 'center',\n * shape: 'ellipse',\n * })}\n *`\n *\n * // CSS as JS Output\n *\n * div: {\n * 'backgroundColor': '#00FFFF',\n * 'backgroundImage': 'radial-gradient(center ellipse farthest-corner at 45px 45px, #00FFFF 0%, rgba(0, 0, 255, 0) 50%, #0000FF 95%)',\n * }\n */\nfunction radialGradient(_ref) {\n var colorStops = _ref.colorStops,\n _ref$extent = _ref.extent,\n extent = _ref$extent === void 0 ? '' : _ref$extent,\n fallback = _ref.fallback,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? '' : _ref$position,\n _ref$shape = _ref.shape,\n shape = _ref$shape === void 0 ? '' : _ref$shape;\n\n if (!colorStops || colorStops.length < 2) {\n throw new PolishedError(57);\n }\n\n return {\n backgroundColor: fallback || colorStops[0].split(' ')[0],\n backgroundImage: constructGradientValue(_templateObject$1 || (_templateObject$1 = _taggedTemplateLiteralLoose([\"radial-gradient(\", \"\", \"\", \"\", \")\"])), position, shape, extent, colorStops.join(', '))\n };\n}\n\n/**\n * A helper to generate a retina background image and non-retina\n * background image. The retina background image will output to a HiDPI media query. The mixin uses\n * a _2x.png filename suffix by default.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...retinaImage('my-img')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${retinaImage('my-img')}\n * `\n *\n * // CSS as JS Output\n * div {\n * backgroundImage: 'url(my-img.png)',\n * '@media only screen and (-webkit-min-device-pixel-ratio: 1.3),\n * only screen and (min--moz-device-pixel-ratio: 1.3),\n * only screen and (-o-min-device-pixel-ratio: 1.3/1),\n * only screen and (min-resolution: 144dpi),\n * only screen and (min-resolution: 1.5dppx)': {\n * backgroundImage: 'url(my-img_2x.png)',\n * }\n * }\n */\nfunction retinaImage(filename, backgroundSize, extension, retinaFilename, retinaSuffix) {\n var _ref;\n\n if (extension === void 0) {\n extension = 'png';\n }\n\n if (retinaSuffix === void 0) {\n retinaSuffix = '_2x';\n }\n\n if (!filename) {\n throw new PolishedError(58);\n } // Replace the dot at the beginning of the passed extension if one exists\n\n\n var ext = extension.replace(/^\\./, '');\n var rFilename = retinaFilename ? retinaFilename + \".\" + ext : \"\" + filename + retinaSuffix + \".\" + ext;\n return _ref = {\n backgroundImage: \"url(\" + filename + \".\" + ext + \")\"\n }, _ref[hiDPI()] = _extends({\n backgroundImage: \"url(\" + rFilename + \")\"\n }, backgroundSize ? {\n backgroundSize: backgroundSize\n } : {}), _ref;\n}\n\n/* eslint-disable key-spacing */\nvar functionsMap = {\n easeInBack: 'cubic-bezier(0.600, -0.280, 0.735, 0.045)',\n easeInCirc: 'cubic-bezier(0.600, 0.040, 0.980, 0.335)',\n easeInCubic: 'cubic-bezier(0.550, 0.055, 0.675, 0.190)',\n easeInExpo: 'cubic-bezier(0.950, 0.050, 0.795, 0.035)',\n easeInQuad: 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n easeInQuart: 'cubic-bezier(0.895, 0.030, 0.685, 0.220)',\n easeInQuint: 'cubic-bezier(0.755, 0.050, 0.855, 0.060)',\n easeInSine: 'cubic-bezier(0.470, 0.000, 0.745, 0.715)',\n easeOutBack: 'cubic-bezier(0.175, 0.885, 0.320, 1.275)',\n easeOutCubic: 'cubic-bezier(0.215, 0.610, 0.355, 1.000)',\n easeOutCirc: 'cubic-bezier(0.075, 0.820, 0.165, 1.000)',\n easeOutExpo: 'cubic-bezier(0.190, 1.000, 0.220, 1.000)',\n easeOutQuad: 'cubic-bezier(0.250, 0.460, 0.450, 0.940)',\n easeOutQuart: 'cubic-bezier(0.165, 0.840, 0.440, 1.000)',\n easeOutQuint: 'cubic-bezier(0.230, 1.000, 0.320, 1.000)',\n easeOutSine: 'cubic-bezier(0.390, 0.575, 0.565, 1.000)',\n easeInOutBack: 'cubic-bezier(0.680, -0.550, 0.265, 1.550)',\n easeInOutCirc: 'cubic-bezier(0.785, 0.135, 0.150, 0.860)',\n easeInOutCubic: 'cubic-bezier(0.645, 0.045, 0.355, 1.000)',\n easeInOutExpo: 'cubic-bezier(1.000, 0.000, 0.000, 1.000)',\n easeInOutQuad: 'cubic-bezier(0.455, 0.030, 0.515, 0.955)',\n easeInOutQuart: 'cubic-bezier(0.770, 0.000, 0.175, 1.000)',\n easeInOutQuint: 'cubic-bezier(0.860, 0.000, 0.070, 1.000)',\n easeInOutSine: 'cubic-bezier(0.445, 0.050, 0.550, 0.950)'\n};\n/* eslint-enable key-spacing */\n\nfunction getTimingFunction(functionName) {\n return functionsMap[functionName];\n}\n/**\n * String to represent common easing functions as demonstrated here: (github.com/jaukia/easie).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * 'transitionTimingFunction': timingFunctions('easeInQuad')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * transitionTimingFunction: ${timingFunctions('easeInQuad')};\n * `\n *\n * // CSS as JS Output\n *\n * 'div': {\n * 'transitionTimingFunction': 'cubic-bezier(0.550, 0.085, 0.680, 0.530)',\n * }\n */\n\n\nfunction timingFunctions(timingFunction) {\n return getTimingFunction(timingFunction);\n}\n\nvar getBorderWidth = function getBorderWidth(pointingDirection, height, width) {\n var fullWidth = \"\" + width[0] + (width[1] || '');\n var halfWidth = \"\" + width[0] / 2 + (width[1] || '');\n var fullHeight = \"\" + height[0] + (height[1] || '');\n var halfHeight = \"\" + height[0] / 2 + (height[1] || '');\n\n switch (pointingDirection) {\n case 'top':\n return \"0 \" + halfWidth + \" \" + fullHeight + \" \" + halfWidth;\n\n case 'topLeft':\n return fullWidth + \" \" + fullHeight + \" 0 0\";\n\n case 'left':\n return halfHeight + \" \" + fullWidth + \" \" + halfHeight + \" 0\";\n\n case 'bottomLeft':\n return fullWidth + \" 0 0 \" + fullHeight;\n\n case 'bottom':\n return fullHeight + \" \" + halfWidth + \" 0 \" + halfWidth;\n\n case 'bottomRight':\n return \"0 0 \" + fullWidth + \" \" + fullHeight;\n\n case 'right':\n return halfHeight + \" 0 \" + halfHeight + \" \" + fullWidth;\n\n case 'topRight':\n default:\n return \"0 \" + fullWidth + \" \" + fullHeight + \" 0\";\n }\n};\n\nvar getBorderColor = function getBorderColor(pointingDirection, foregroundColor) {\n switch (pointingDirection) {\n case 'top':\n case 'bottomRight':\n return {\n borderBottomColor: foregroundColor\n };\n\n case 'right':\n case 'bottomLeft':\n return {\n borderLeftColor: foregroundColor\n };\n\n case 'bottom':\n case 'topLeft':\n return {\n borderTopColor: foregroundColor\n };\n\n case 'left':\n case 'topRight':\n return {\n borderRightColor: foregroundColor\n };\n\n default:\n throw new PolishedError(59);\n }\n};\n/**\n * CSS to represent triangle with any pointing direction with an optional background color.\n *\n * @example\n * // Styles as object usage\n *\n * const styles = {\n * ...triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })\n * }\n *\n *\n * // styled-components usage\n * const div = styled.div`\n * ${triangle({ pointingDirection: 'right', width: '100px', height: '100px', foregroundColor: 'red' })}\n *\n *\n * // CSS as JS Output\n *\n * div: {\n * 'borderColor': 'transparent transparent transparent red',\n * 'borderStyle': 'solid',\n * 'borderWidth': '50px 0 50px 100px',\n * 'height': '0',\n * 'width': '0',\n * }\n */\n\n\nfunction triangle(_ref) {\n var pointingDirection = _ref.pointingDirection,\n height = _ref.height,\n width = _ref.width,\n foregroundColor = _ref.foregroundColor,\n _ref$backgroundColor = _ref.backgroundColor,\n backgroundColor = _ref$backgroundColor === void 0 ? 'transparent' : _ref$backgroundColor;\n var widthAndUnit = getValueAndUnit(width);\n var heightAndUnit = getValueAndUnit(height);\n\n if (isNaN(heightAndUnit[0]) || isNaN(widthAndUnit[0])) {\n throw new PolishedError(60);\n }\n\n return _extends({\n width: '0',\n height: '0',\n borderColor: backgroundColor\n }, getBorderColor(pointingDirection, foregroundColor), {\n borderStyle: 'solid',\n borderWidth: getBorderWidth(pointingDirection, heightAndUnit, widthAndUnit)\n });\n}\n\n/**\n * Provides an easy way to change the `wordWrap` property.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...wordWrap('break-word')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${wordWrap('break-word')}\n * `\n *\n * // CSS as JS Output\n *\n * const styles = {\n * overflowWrap: 'break-word',\n * wordWrap: 'break-word',\n * wordBreak: 'break-all',\n * }\n */\nfunction wordWrap(wrap) {\n if (wrap === void 0) {\n wrap = 'break-word';\n }\n\n var wordBreak = wrap === 'break-word' ? 'break-all' : wrap;\n return {\n overflowWrap: wrap,\n wordWrap: wrap,\n wordBreak: wordBreak\n };\n}\n\nfunction colorToInt(color) {\n return Math.round(color * 255);\n}\n\nfunction convertToInt(red, green, blue) {\n return colorToInt(red) + \",\" + colorToInt(green) + \",\" + colorToInt(blue);\n}\n\nfunction hslToRgb(hue, saturation, lightness, convert) {\n if (convert === void 0) {\n convert = convertToInt;\n }\n\n if (saturation === 0) {\n // achromatic\n return convert(lightness, lightness, lightness);\n } // formulae from https://en.wikipedia.org/wiki/HSL_and_HSV\n\n\n var huePrime = (hue % 360 + 360) % 360 / 60;\n var chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n var secondComponent = chroma * (1 - Math.abs(huePrime % 2 - 1));\n var red = 0;\n var green = 0;\n var blue = 0;\n\n if (huePrime >= 0 && huePrime < 1) {\n red = chroma;\n green = secondComponent;\n } else if (huePrime >= 1 && huePrime < 2) {\n red = secondComponent;\n green = chroma;\n } else if (huePrime >= 2 && huePrime < 3) {\n green = chroma;\n blue = secondComponent;\n } else if (huePrime >= 3 && huePrime < 4) {\n green = secondComponent;\n blue = chroma;\n } else if (huePrime >= 4 && huePrime < 5) {\n red = secondComponent;\n blue = chroma;\n } else if (huePrime >= 5 && huePrime < 6) {\n red = chroma;\n blue = secondComponent;\n }\n\n var lightnessModification = lightness - chroma / 2;\n var finalRed = red + lightnessModification;\n var finalGreen = green + lightnessModification;\n var finalBlue = blue + lightnessModification;\n return convert(finalRed, finalGreen, finalBlue);\n}\n\nvar namedColorMap = {\n aliceblue: 'f0f8ff',\n antiquewhite: 'faebd7',\n aqua: '00ffff',\n aquamarine: '7fffd4',\n azure: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '000',\n blanchedalmond: 'ffebcd',\n blue: '0000ff',\n blueviolet: '8a2be2',\n brown: 'a52a2a',\n burlywood: 'deb887',\n cadetblue: '5f9ea0',\n chartreuse: '7fff00',\n chocolate: 'd2691e',\n coral: 'ff7f50',\n cornflowerblue: '6495ed',\n cornsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: '00ffff',\n darkblue: '00008b',\n darkcyan: '008b8b',\n darkgoldenrod: 'b8860b',\n darkgray: 'a9a9a9',\n darkgreen: '006400',\n darkgrey: 'a9a9a9',\n darkkhaki: 'bdb76b',\n darkmagenta: '8b008b',\n darkolivegreen: '556b2f',\n darkorange: 'ff8c00',\n darkorchid: '9932cc',\n darkred: '8b0000',\n darksalmon: 'e9967a',\n darkseagreen: '8fbc8f',\n darkslateblue: '483d8b',\n darkslategray: '2f4f4f',\n darkslategrey: '2f4f4f',\n darkturquoise: '00ced1',\n darkviolet: '9400d3',\n deeppink: 'ff1493',\n deepskyblue: '00bfff',\n dimgray: '696969',\n dimgrey: '696969',\n dodgerblue: '1e90ff',\n firebrick: 'b22222',\n floralwhite: 'fffaf0',\n forestgreen: '228b22',\n fuchsia: 'ff00ff',\n gainsboro: 'dcdcdc',\n ghostwhite: 'f8f8ff',\n gold: 'ffd700',\n goldenrod: 'daa520',\n gray: '808080',\n green: '008000',\n greenyellow: 'adff2f',\n grey: '808080',\n honeydew: 'f0fff0',\n hotpink: 'ff69b4',\n indianred: 'cd5c5c',\n indigo: '4b0082',\n ivory: 'fffff0',\n khaki: 'f0e68c',\n lavender: 'e6e6fa',\n lavenderblush: 'fff0f5',\n lawngreen: '7cfc00',\n lemonchiffon: 'fffacd',\n lightblue: 'add8e6',\n lightcoral: 'f08080',\n lightcyan: 'e0ffff',\n lightgoldenrodyellow: 'fafad2',\n lightgray: 'd3d3d3',\n lightgreen: '90ee90',\n lightgrey: 'd3d3d3',\n lightpink: 'ffb6c1',\n lightsalmon: 'ffa07a',\n lightseagreen: '20b2aa',\n lightskyblue: '87cefa',\n lightslategray: '789',\n lightslategrey: '789',\n lightsteelblue: 'b0c4de',\n lightyellow: 'ffffe0',\n lime: '0f0',\n limegreen: '32cd32',\n linen: 'faf0e6',\n magenta: 'f0f',\n maroon: '800000',\n mediumaquamarine: '66cdaa',\n mediumblue: '0000cd',\n mediumorchid: 'ba55d3',\n mediumpurple: '9370db',\n mediumseagreen: '3cb371',\n mediumslateblue: '7b68ee',\n mediumspringgreen: '00fa9a',\n mediumturquoise: '48d1cc',\n mediumvioletred: 'c71585',\n midnightblue: '191970',\n mintcream: 'f5fffa',\n mistyrose: 'ffe4e1',\n moccasin: 'ffe4b5',\n navajowhite: 'ffdead',\n navy: '000080',\n oldlace: 'fdf5e6',\n olive: '808000',\n olivedrab: '6b8e23',\n orange: 'ffa500',\n orangered: 'ff4500',\n orchid: 'da70d6',\n palegoldenrod: 'eee8aa',\n palegreen: '98fb98',\n paleturquoise: 'afeeee',\n palevioletred: 'db7093',\n papayawhip: 'ffefd5',\n peachpuff: 'ffdab9',\n peru: 'cd853f',\n pink: 'ffc0cb',\n plum: 'dda0dd',\n powderblue: 'b0e0e6',\n purple: '800080',\n rebeccapurple: '639',\n red: 'f00',\n rosybrown: 'bc8f8f',\n royalblue: '4169e1',\n saddlebrown: '8b4513',\n salmon: 'fa8072',\n sandybrown: 'f4a460',\n seagreen: '2e8b57',\n seashell: 'fff5ee',\n sienna: 'a0522d',\n silver: 'c0c0c0',\n skyblue: '87ceeb',\n slateblue: '6a5acd',\n slategray: '708090',\n slategrey: '708090',\n snow: 'fffafa',\n springgreen: '00ff7f',\n steelblue: '4682b4',\n tan: 'd2b48c',\n teal: '008080',\n thistle: 'd8bfd8',\n tomato: 'ff6347',\n turquoise: '40e0d0',\n violet: 'ee82ee',\n wheat: 'f5deb3',\n white: 'fff',\n whitesmoke: 'f5f5f5',\n yellow: 'ff0',\n yellowgreen: '9acd32'\n};\n/**\n * Checks if a string is a CSS named color and returns its equivalent hex value, otherwise returns the original color.\n * @private\n */\n\nfunction nameToHex(color) {\n if (typeof color !== 'string') return color;\n var normalizedColorName = color.toLowerCase();\n return namedColorMap[normalizedColorName] ? \"#\" + namedColorMap[normalizedColorName] : color;\n}\n\nvar hexRegex = /^#[a-fA-F0-9]{6}$/;\nvar hexRgbaRegex = /^#[a-fA-F0-9]{8}$/;\nvar reducedHexRegex = /^#[a-fA-F0-9]{3}$/;\nvar reducedRgbaHexRegex = /^#[a-fA-F0-9]{4}$/;\nvar rgbRegex = /^rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)$/i;\nvar rgbaRegex = /^rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\nvar hslRegex = /^hsl\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*\\)$/i;\nvar hslaRegex = /^hsla\\(\\s*(\\d{0,3}[.]?[0-9]+)\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*(\\d{1,3}[.]?[0-9]?)%\\s*,\\s*([-+]?[0-9]*[.]?[0-9]+)\\s*\\)$/i;\n/**\n * Returns an RgbColor or RgbaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a RgbColor or RgbaColor object back to a string.\n *\n * @example\n * // Assigns `{ red: 255, green: 0, blue: 0 }` to color1\n * const color1 = parseToRgb('rgb(255, 0, 0)');\n * // Assigns `{ red: 92, green: 102, blue: 112, alpha: 0.75 }` to color2\n * const color2 = parseToRgb('hsla(210, 10%, 40%, 0.75)');\n */\n\nfunction parseToRgb(color) {\n if (typeof color !== 'string') {\n throw new PolishedError(3);\n }\n\n var normalizedColor = nameToHex(color);\n\n if (normalizedColor.match(hexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16)\n };\n }\n\n if (normalizedColor.match(hexRgbaRegex)) {\n var alpha = parseFloat((parseInt(\"\" + normalizedColor[7] + normalizedColor[8], 16) / 255).toFixed(2));\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[2], 16),\n green: parseInt(\"\" + normalizedColor[3] + normalizedColor[4], 16),\n blue: parseInt(\"\" + normalizedColor[5] + normalizedColor[6], 16),\n alpha: alpha\n };\n }\n\n if (normalizedColor.match(reducedHexRegex)) {\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16)\n };\n }\n\n if (normalizedColor.match(reducedRgbaHexRegex)) {\n var _alpha = parseFloat((parseInt(\"\" + normalizedColor[4] + normalizedColor[4], 16) / 255).toFixed(2));\n\n return {\n red: parseInt(\"\" + normalizedColor[1] + normalizedColor[1], 16),\n green: parseInt(\"\" + normalizedColor[2] + normalizedColor[2], 16),\n blue: parseInt(\"\" + normalizedColor[3] + normalizedColor[3], 16),\n alpha: _alpha\n };\n }\n\n var rgbMatched = rgbRegex.exec(normalizedColor);\n\n if (rgbMatched) {\n return {\n red: parseInt(\"\" + rgbMatched[1], 10),\n green: parseInt(\"\" + rgbMatched[2], 10),\n blue: parseInt(\"\" + rgbMatched[3], 10)\n };\n }\n\n var rgbaMatched = rgbaRegex.exec(normalizedColor.substring(0, 50));\n\n if (rgbaMatched) {\n return {\n red: parseInt(\"\" + rgbaMatched[1], 10),\n green: parseInt(\"\" + rgbaMatched[2], 10),\n blue: parseInt(\"\" + rgbaMatched[3], 10),\n alpha: parseFloat(\"\" + rgbaMatched[4])\n };\n }\n\n var hslMatched = hslRegex.exec(normalizedColor);\n\n if (hslMatched) {\n var hue = parseInt(\"\" + hslMatched[1], 10);\n var saturation = parseInt(\"\" + hslMatched[2], 10) / 100;\n var lightness = parseInt(\"\" + hslMatched[3], 10) / 100;\n var rgbColorString = \"rgb(\" + hslToRgb(hue, saturation, lightness) + \")\";\n var hslRgbMatched = rgbRegex.exec(rgbColorString);\n\n if (!hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + hslRgbMatched[1], 10),\n green: parseInt(\"\" + hslRgbMatched[2], 10),\n blue: parseInt(\"\" + hslRgbMatched[3], 10)\n };\n }\n\n var hslaMatched = hslaRegex.exec(normalizedColor.substring(0, 50));\n\n if (hslaMatched) {\n var _hue = parseInt(\"\" + hslaMatched[1], 10);\n\n var _saturation = parseInt(\"\" + hslaMatched[2], 10) / 100;\n\n var _lightness = parseInt(\"\" + hslaMatched[3], 10) / 100;\n\n var _rgbColorString = \"rgb(\" + hslToRgb(_hue, _saturation, _lightness) + \")\";\n\n var _hslRgbMatched = rgbRegex.exec(_rgbColorString);\n\n if (!_hslRgbMatched) {\n throw new PolishedError(4, normalizedColor, _rgbColorString);\n }\n\n return {\n red: parseInt(\"\" + _hslRgbMatched[1], 10),\n green: parseInt(\"\" + _hslRgbMatched[2], 10),\n blue: parseInt(\"\" + _hslRgbMatched[3], 10),\n alpha: parseFloat(\"\" + hslaMatched[4])\n };\n }\n\n throw new PolishedError(5);\n}\n\nfunction rgbToHsl(color) {\n // make sure rgb are contained in a set of [0, 255]\n var red = color.red / 255;\n var green = color.green / 255;\n var blue = color.blue / 255;\n var max = Math.max(red, green, blue);\n var min = Math.min(red, green, blue);\n var lightness = (max + min) / 2;\n\n if (max === min) {\n // achromatic\n if (color.alpha !== undefined) {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness,\n alpha: color.alpha\n };\n } else {\n return {\n hue: 0,\n saturation: 0,\n lightness: lightness\n };\n }\n }\n\n var hue;\n var delta = max - min;\n var saturation = lightness > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n switch (max) {\n case red:\n hue = (green - blue) / delta + (green < blue ? 6 : 0);\n break;\n\n case green:\n hue = (blue - red) / delta + 2;\n break;\n\n default:\n // blue case\n hue = (red - green) / delta + 4;\n break;\n }\n\n hue *= 60;\n\n if (color.alpha !== undefined) {\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness,\n alpha: color.alpha\n };\n }\n\n return {\n hue: hue,\n saturation: saturation,\n lightness: lightness\n };\n}\n\n/**\n * Returns an HslColor or HslaColor object. This utility function is only useful\n * if want to extract a color component. With the color util `toColorString` you\n * can convert a HslColor or HslaColor object back to a string.\n *\n * @example\n * // Assigns `{ hue: 0, saturation: 1, lightness: 0.5 }` to color1\n * const color1 = parseToHsl('rgb(255, 0, 0)');\n * // Assigns `{ hue: 128, saturation: 1, lightness: 0.5, alpha: 0.75 }` to color2\n * const color2 = parseToHsl('hsla(128, 100%, 50%, 0.75)');\n */\nfunction parseToHsl(color) {\n // Note: At a later stage we can optimize this function as right now a hsl\n // color would be parsed converted to rgb values and converted back to hsl.\n return rgbToHsl(parseToRgb(color));\n}\n\n/**\n * Reduces hex values if possible e.g. #ff8866 to #f86\n * @private\n */\nvar reduceHexValue = function reduceHexValue(value) {\n if (value.length === 7 && value[1] === value[2] && value[3] === value[4] && value[5] === value[6]) {\n return \"#\" + value[1] + value[3] + value[5];\n }\n\n return value;\n};\n\nfunction numberToHex(value) {\n var hex = value.toString(16);\n return hex.length === 1 ? \"0\" + hex : hex;\n}\n\nfunction colorToHex(color) {\n return numberToHex(Math.round(color * 255));\n}\n\nfunction convertToHex(red, green, blue) {\n return reduceHexValue(\"#\" + colorToHex(red) + colorToHex(green) + colorToHex(blue));\n}\n\nfunction hslToHex(hue, saturation, lightness) {\n return hslToRgb(hue, saturation, lightness, convertToHex);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsl(359, 0.75, 0.4),\n * background: hsl({ hue: 360, saturation: 0.75, lightness: 0.4 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsl(359, 0.75, 0.4)};\n * background: ${hsl({ hue: 360, saturation: 0.75, lightness: 0.4 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#b3191c\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsl(value, saturation, lightness) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number') {\n return hslToHex(value, saturation, lightness);\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined) {\n return hslToHex(value.hue, value.saturation, value.lightness);\n }\n\n throw new PolishedError(1);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hsla(359, 0.75, 0.4, 0.7),\n * background: hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 }),\n * background: hsla(359, 0.75, 0.4, 1),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hsla(359, 0.75, 0.4, 0.7)};\n * background: ${hsla({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0,7 })};\n * background: ${hsla(359, 0.75, 0.4, 1)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"rgba(179,25,28,0.7)\";\n * background: \"#b3191c\";\n * }\n */\nfunction hsla(value, saturation, lightness, alpha) {\n if (typeof value === 'number' && typeof saturation === 'number' && typeof lightness === 'number' && typeof alpha === 'number') {\n return alpha >= 1 ? hslToHex(value, saturation, lightness) : \"rgba(\" + hslToRgb(value, saturation, lightness) + \",\" + alpha + \")\";\n } else if (typeof value === 'object' && saturation === undefined && lightness === undefined && alpha === undefined) {\n return value.alpha >= 1 ? hslToHex(value.hue, value.saturation, value.lightness) : \"rgba(\" + hslToRgb(value.hue, value.saturation, value.lightness) + \",\" + value.alpha + \")\";\n }\n\n throw new PolishedError(2);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible hex notation.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgb(255, 205, 100),\n * background: rgb({ red: 255, green: 205, blue: 100 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgb(255, 205, 100)};\n * background: ${rgb({ red: 255, green: 205, blue: 100 })};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffcd64\";\n * background: \"#ffcd64\";\n * }\n */\nfunction rgb(value, green, blue) {\n if (typeof value === 'number' && typeof green === 'number' && typeof blue === 'number') {\n return reduceHexValue(\"#\" + numberToHex(value) + numberToHex(green) + numberToHex(blue));\n } else if (typeof value === 'object' && green === undefined && blue === undefined) {\n return reduceHexValue(\"#\" + numberToHex(value.red) + numberToHex(value.green) + numberToHex(value.blue));\n }\n\n throw new PolishedError(6);\n}\n\n/**\n * Returns a string value for the color. The returned result is the smallest possible rgba or hex notation.\n *\n * Can also be used to fade a color by passing a hex value or named CSS color along with an alpha value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgba(255, 205, 100, 0.7),\n * background: rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 }),\n * background: rgba(255, 205, 100, 1),\n * background: rgba('#ffffff', 0.4),\n * background: rgba('black', 0.7),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgba(255, 205, 100, 0.7)};\n * background: ${rgba({ red: 255, green: 205, blue: 100, alpha: 0.7 })};\n * background: ${rgba(255, 205, 100, 1)};\n * background: ${rgba('#ffffff', 0.4)};\n * background: ${rgba('black', 0.7)};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"rgba(255,205,100,0.7)\";\n * background: \"#ffcd64\";\n * background: \"rgba(255,255,255,0.4)\";\n * background: \"rgba(0,0,0,0.7)\";\n * }\n */\nfunction rgba(firstValue, secondValue, thirdValue, fourthValue) {\n if (typeof firstValue === 'string' && typeof secondValue === 'number') {\n var rgbValue = parseToRgb(firstValue);\n return \"rgba(\" + rgbValue.red + \",\" + rgbValue.green + \",\" + rgbValue.blue + \",\" + secondValue + \")\";\n } else if (typeof firstValue === 'number' && typeof secondValue === 'number' && typeof thirdValue === 'number' && typeof fourthValue === 'number') {\n return fourthValue >= 1 ? rgb(firstValue, secondValue, thirdValue) : \"rgba(\" + firstValue + \",\" + secondValue + \",\" + thirdValue + \",\" + fourthValue + \")\";\n } else if (typeof firstValue === 'object' && secondValue === undefined && thirdValue === undefined && fourthValue === undefined) {\n return firstValue.alpha >= 1 ? rgb(firstValue.red, firstValue.green, firstValue.blue) : \"rgba(\" + firstValue.red + \",\" + firstValue.green + \",\" + firstValue.blue + \",\" + firstValue.alpha + \")\";\n }\n\n throw new PolishedError(7);\n}\n\nvar isRgb = function isRgb(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isRgba = function isRgba(color) {\n return typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number' && typeof color.alpha === 'number';\n};\n\nvar isHsl = function isHsl(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && (typeof color.alpha !== 'number' || typeof color.alpha === 'undefined');\n};\n\nvar isHsla = function isHsla(color) {\n return typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number' && typeof color.alpha === 'number';\n};\n/**\n * Converts a RgbColor, RgbaColor, HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb`, `rgba`, `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: toColorString({ red: 255, green: 205, blue: 100 }),\n * background: toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * background: toColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${toColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${toColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * background: ${toColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${toColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\n\n\nfunction toColorString(color) {\n if (typeof color !== 'object') throw new PolishedError(8);\n if (isRgba(color)) return rgba(color);\n if (isRgb(color)) return rgb(color);\n if (isHsla(color)) return hsla(color);\n if (isHsl(color)) return hsl(color);\n throw new PolishedError(8);\n}\n\n// Type definitions taken from https://github.com/gcanti/flow-static-land/blob/master/src/Fun.js\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-unused-vars\n// eslint-disable-next-line no-redeclare\nfunction curried(f, length, acc) {\n return function fn() {\n // eslint-disable-next-line prefer-rest-params\n var combined = acc.concat(Array.prototype.slice.call(arguments));\n return combined.length >= length ? f.apply(this, combined) : curried(f, length, combined);\n };\n} // eslint-disable-next-line no-redeclare\n\n\nfunction curry(f) {\n // eslint-disable-line no-redeclare\n return curried(f, f.length, []);\n}\n\n/**\n * Changes the hue of the color. Hue is a number between 0 to 360. The first\n * argument for adjustHue is the amount of degrees the color is rotated around\n * the color wheel, always producing a positive hue value.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: adjustHue(180, '#448'),\n * background: adjustHue('180', 'rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${adjustHue(180, '#448')};\n * background: ${adjustHue('180', 'rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#888844\";\n * background: \"rgba(136,136,68,0.7)\";\n * }\n */\n\nfunction adjustHue(degree, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: hslColor.hue + parseFloat(degree)\n }));\n} // prettier-ignore\n\n\nvar curriedAdjustHue = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(adjustHue);\n\n/**\n * Returns the complement of the provided color. This is identical to adjustHue(180, <color>).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: complement('#448'),\n * background: complement('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${complement('#448')};\n * background: ${complement('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#884\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction complement(color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n hue: (hslColor.hue + 180) % 360\n }));\n}\n\nfunction guard(lowerBoundary, upperBoundary, value) {\n return Math.max(lowerBoundary, Math.min(upperBoundary, value));\n}\n\n/**\n * Returns a string value for the darkened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: darken(0.2, '#FFCD64'),\n * background: darken('0.2', 'rgba(255,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${darken(0.2, '#FFCD64')};\n * background: ${darken('0.2', 'rgba(255,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#ffbd31\";\n * background: \"rgba(255,189,49,0.7)\";\n * }\n */\n\nfunction darken(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDarken = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(darken);\n\n/**\n * Decreases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the desaturate function is the amount by how much the color\n * intensity should be decreased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: desaturate(0.2, '#CCCD64'),\n * background: desaturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${desaturate(0.2, '#CCCD64')};\n * background: ${desaturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#b8b979\";\n * background: \"rgba(184,185,121,0.7)\";\n * }\n */\n\nfunction desaturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation - parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedDesaturate = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(desaturate);\n\n/**\n * Returns a number (float) representing the luminance of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff',\n * background: getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)',\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${getLuminance('#CCCD64') >= getLuminance('#0000ff') ? '#CCCD64' : '#0000ff'};\n * background: ${getLuminance('rgba(58, 133, 255, 1)') >= getLuminance('rgba(255, 57, 149, 1)') ?\n * 'rgba(58, 133, 255, 1)' :\n * 'rgba(255, 57, 149, 1)'};\n *\n * // CSS in JS Output\n *\n * div {\n * background: \"#CCCD64\";\n * background: \"rgba(58, 133, 255, 1)\";\n * }\n */\n\nfunction getLuminance(color) {\n if (color === 'transparent') return 0;\n var rgbColor = parseToRgb(color);\n\n var _Object$keys$map = Object.keys(rgbColor).map(function (key) {\n var channel = rgbColor[key] / 255;\n return channel <= 0.03928 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);\n }),\n r = _Object$keys$map[0],\n g = _Object$keys$map[1],\n b = _Object$keys$map[2];\n\n return parseFloat((0.2126 * r + 0.7152 * g + 0.0722 * b).toFixed(3));\n}\n\n/**\n * Returns the contrast ratio between two colors based on\n * [W3's recommended equation for calculating contrast](http://www.w3.org/TR/WCAG20/#contrast-ratiodef).\n *\n * @example\n * const contrastRatio = getContrast('#444', '#fff');\n */\n\nfunction getContrast(color1, color2) {\n var luminance1 = getLuminance(color1);\n var luminance2 = getLuminance(color2);\n return parseFloat((luminance1 > luminance2 ? (luminance1 + 0.05) / (luminance2 + 0.05) : (luminance2 + 0.05) / (luminance1 + 0.05)).toFixed(2));\n}\n\n/**\n * Converts the color to a grayscale, by reducing its saturation to 0.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: grayscale('#CCCD64'),\n * background: grayscale('rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${grayscale('#CCCD64')};\n * background: ${grayscale('rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#999\";\n * background: \"rgba(153,153,153,0.7)\";\n * }\n */\n\nfunction grayscale(color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: 0\n }));\n}\n\n/**\n * Converts a HslColor or HslaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `hsl` or `hsla`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 }),\n * background: hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${hslToColorString({ hue: 240, saturation: 1, lightness: 0.5 })};\n * background: ${hslToColorString({ hue: 360, saturation: 0.75, lightness: 0.4, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#00f\";\n * background: \"rgba(179,25,25,0.72)\";\n * }\n */\nfunction hslToColorString(color) {\n if (typeof color === 'object' && typeof color.hue === 'number' && typeof color.saturation === 'number' && typeof color.lightness === 'number') {\n if (color.alpha && typeof color.alpha === 'number') {\n return hsla({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness,\n alpha: color.alpha\n });\n }\n\n return hsl({\n hue: color.hue,\n saturation: color.saturation,\n lightness: color.lightness\n });\n }\n\n throw new PolishedError(45);\n}\n\n/**\n * Inverts the red, green and blue values of a color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: invert('#CCCD64'),\n * background: invert('rgba(101,100,205,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${invert('#CCCD64')};\n * background: ${invert('rgba(101,100,205,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#33329b\";\n * background: \"rgba(154,155,50,0.7)\";\n * }\n */\n\nfunction invert(color) {\n if (color === 'transparent') return color; // parse color string to rgb\n\n var value = parseToRgb(color);\n return toColorString(_extends({}, value, {\n red: 255 - value.red,\n green: 255 - value.green,\n blue: 255 - value.blue\n }));\n}\n\n/**\n * Returns a string value for the lightened color.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: lighten(0.2, '#CCCD64'),\n * background: lighten('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${lighten(0.2, '#FFCD64')};\n * background: ${lighten('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e5e6b1\";\n * background: \"rgba(229,230,177,0.7)\";\n * }\n */\n\nfunction lighten(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n lightness: guard(0, 1, hslColor.lightness + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedLighten = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(lighten);\n\n/**\n * Determines which contrast guidelines have been met for two colors.\n * Based on the [contrast calculations recommended by W3](https://www.w3.org/WAI/WCAG21/Understanding/contrast-enhanced.html).\n *\n * @example\n * const scores = meetsContrastGuidelines('#444', '#fff');\n */\nfunction meetsContrastGuidelines(color1, color2) {\n var contrastRatio = getContrast(color1, color2);\n return {\n AA: contrastRatio >= 4.5,\n AALarge: contrastRatio >= 3,\n AAA: contrastRatio >= 7,\n AAALarge: contrastRatio >= 4.5\n };\n}\n\n/**\n * Mixes the two provided colors together by calculating the average of each of the RGB components weighted to the first color by the provided weight.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: mix(0.5, '#f00', '#00f')\n * background: mix(0.25, '#f00', '#00f')\n * background: mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${mix(0.5, '#f00', '#00f')};\n * background: ${mix(0.25, '#f00', '#00f')};\n * background: ${mix('0.5', 'rgba(255, 0, 0, 0.5)', '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#7f007f\";\n * background: \"#3f00bf\";\n * background: \"rgba(63, 0, 191, 0.75)\";\n * }\n */\n\nfunction mix(weight, color, otherColor) {\n if (color === 'transparent') return otherColor;\n if (otherColor === 'transparent') return color;\n if (weight === 0) return otherColor;\n var parsedColor1 = parseToRgb(color);\n\n var color1 = _extends({}, parsedColor1, {\n alpha: typeof parsedColor1.alpha === 'number' ? parsedColor1.alpha : 1\n });\n\n var parsedColor2 = parseToRgb(otherColor);\n\n var color2 = _extends({}, parsedColor2, {\n alpha: typeof parsedColor2.alpha === 'number' ? parsedColor2.alpha : 1\n }); // The formula is copied from the original Sass implementation:\n // http://sass-lang.com/documentation/Sass/Script/Functions.html#mix-instance_method\n\n\n var alphaDelta = color1.alpha - color2.alpha;\n var x = parseFloat(weight) * 2 - 1;\n var y = x * alphaDelta === -1 ? x : x + alphaDelta;\n var z = 1 + x * alphaDelta;\n var weight1 = (y / z + 1) / 2.0;\n var weight2 = 1 - weight1;\n var mixedColor = {\n red: Math.floor(color1.red * weight1 + color2.red * weight2),\n green: Math.floor(color1.green * weight1 + color2.green * weight2),\n blue: Math.floor(color1.blue * weight1 + color2.blue * weight2),\n alpha: color1.alpha * (parseFloat(weight) / 1.0) + color2.alpha * (1 - parseFloat(weight) / 1.0)\n };\n return rgba(mixedColor);\n} // prettier-ignore\n\n\nvar curriedMix = /*#__PURE__*/curry\n/* ::<number | string, string, string, string> */\n(mix);\n\n/**\n * Increases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: opacify(0.1, 'rgba(255, 255, 255, 0.9)');\n * background: opacify(0.2, 'hsla(0, 0%, 100%, 0.5)'),\n * background: opacify('0.5', 'rgba(255, 0, 0, 0.2)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${opacify(0.1, 'rgba(255, 255, 255, 0.9)')};\n * background: ${opacify(0.2, 'hsla(0, 0%, 100%, 0.5)')},\n * background: ${opacify('0.5', 'rgba(255, 0, 0, 0.2)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#fff\";\n * background: \"rgba(255,255,255,0.7)\";\n * background: \"rgba(255,0,0,0.7)\";\n * }\n */\n\nfunction opacify(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, (alpha * 100 + parseFloat(amount) * 100) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedOpacify = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(opacify);\n\nvar defaultReturnIfLightColor = '#000';\nvar defaultReturnIfDarkColor = '#fff';\n/**\n * Returns black or white (or optional passed colors) for best\n * contrast depending on the luminosity of the given color.\n * When passing custom return colors, strict mode ensures that the\n * return color always meets or exceeds WCAG level AA or greater. If this test\n * fails, the default return color (black or white) is returned in place of the\n * custom return color. You can optionally turn off strict mode.\n *\n * Follows [W3C specs for readability](https://www.w3.org/TR/WCAG20-TECHS/G18.html).\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * color: readableColor('#000'),\n * color: readableColor('black', '#001', '#ff8'),\n * color: readableColor('white', '#001', '#ff8'),\n * color: readableColor('red', '#333', '#ddd', true)\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * color: ${readableColor('#000')};\n * color: ${readableColor('black', '#001', '#ff8')};\n * color: ${readableColor('white', '#001', '#ff8')};\n * color: ${readableColor('red', '#333', '#ddd', true)};\n * `\n *\n * // CSS in JS Output\n * element {\n * color: \"#fff\";\n * color: \"#ff8\";\n * color: \"#001\";\n * color: \"#000\";\n * }\n */\n\nfunction readableColor(color, returnIfLightColor, returnIfDarkColor, strict) {\n if (returnIfLightColor === void 0) {\n returnIfLightColor = defaultReturnIfLightColor;\n }\n\n if (returnIfDarkColor === void 0) {\n returnIfDarkColor = defaultReturnIfDarkColor;\n }\n\n if (strict === void 0) {\n strict = true;\n }\n\n var isColorLight = getLuminance(color) > 0.179;\n var preferredReturnColor = isColorLight ? returnIfLightColor : returnIfDarkColor;\n\n if (!strict || getContrast(color, preferredReturnColor) >= 4.5) {\n return preferredReturnColor;\n }\n\n return isColorLight ? defaultReturnIfLightColor : defaultReturnIfDarkColor;\n}\n\n/**\n * Converts a RgbColor or RgbaColor object to a color string.\n * This util is useful in case you only know on runtime which color object is\n * used. Otherwise we recommend to rely on `rgb` or `rgba`.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: rgbToColorString({ red: 255, green: 205, blue: 100 }),\n * background: rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 }),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100 })};\n * background: ${rgbToColorString({ red: 255, green: 205, blue: 100, alpha: 0.72 })};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#ffcd64\";\n * background: \"rgba(255,205,100,0.72)\";\n * }\n */\nfunction rgbToColorString(color) {\n if (typeof color === 'object' && typeof color.red === 'number' && typeof color.green === 'number' && typeof color.blue === 'number') {\n if (typeof color.alpha === 'number') {\n return rgba({\n red: color.red,\n green: color.green,\n blue: color.blue,\n alpha: color.alpha\n });\n }\n\n return rgb({\n red: color.red,\n green: color.green,\n blue: color.blue\n });\n }\n\n throw new PolishedError(46);\n}\n\n/**\n * Increases the intensity of a color. Its range is between 0 to 1. The first\n * argument of the saturate function is the amount by how much the color\n * intensity should be increased.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: saturate(0.2, '#CCCD64'),\n * background: saturate('0.2', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${saturate(0.2, '#FFCD64')};\n * background: ${saturate('0.2', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#e0e250\";\n * background: \"rgba(224,226,80,0.7)\";\n * }\n */\n\nfunction saturate(amount, color) {\n if (color === 'transparent') return color;\n var hslColor = parseToHsl(color);\n return toColorString(_extends({}, hslColor, {\n saturation: guard(0, 1, hslColor.saturation + parseFloat(amount))\n }));\n} // prettier-ignore\n\n\nvar curriedSaturate = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(saturate);\n\n/**\n * Sets the hue of a color to the provided value. The hue range can be\n * from 0 and 359.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setHue(42, '#CCCD64'),\n * background: setHue('244', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setHue(42, '#CCCD64')};\n * background: ${setHue('244', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#cdae64\";\n * background: \"rgba(107,100,205,0.7)\";\n * }\n */\n\nfunction setHue(hue, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n hue: parseFloat(hue)\n }));\n} // prettier-ignore\n\n\nvar curriedSetHue = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(setHue);\n\n/**\n * Sets the lightness of a color to the provided value. The lightness range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setLightness(0.2, '#CCCD64'),\n * background: setLightness('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setLightness(0.2, '#CCCD64')};\n * background: ${setLightness('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#4d4d19\";\n * background: \"rgba(223,224,159,0.7)\";\n * }\n */\n\nfunction setLightness(lightness, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n lightness: parseFloat(lightness)\n }));\n} // prettier-ignore\n\n\nvar curriedSetLightness = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(setLightness);\n\n/**\n * Sets the saturation of a color to the provided value. The saturation range can be\n * from 0 and 1.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: setSaturation(0.2, '#CCCD64'),\n * background: setSaturation('0.75', 'rgba(204,205,100,0.7)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${setSaturation(0.2, '#CCCD64')};\n * background: ${setSaturation('0.75', 'rgba(204,205,100,0.7)')};\n * `\n *\n * // CSS in JS Output\n * element {\n * background: \"#adad84\";\n * background: \"rgba(228,229,76,0.7)\";\n * }\n */\n\nfunction setSaturation(saturation, color) {\n if (color === 'transparent') return color;\n return toColorString(_extends({}, parseToHsl(color), {\n saturation: parseFloat(saturation)\n }));\n} // prettier-ignore\n\n\nvar curriedSetSaturation = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(setSaturation);\n\n/**\n * Shades a color by mixing it with black. `shade` can produce\n * hue shifts, where as `darken` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: shade(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${shade(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#00003f\";\n * }\n */\n\nfunction shade(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(0, 0, 0)', color);\n} // prettier-ignore\n\n\nvar curriedShade = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(shade);\n\n/**\n * Tints a color by mixing it with white. `tint` can produce\n * hue shifts, where as `lighten` manipulates the luminance channel and therefore\n * doesn't produce hue shifts.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: tint(0.25, '#00f')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${tint(0.25, '#00f')};\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"#bfbfff\";\n * }\n */\n\nfunction tint(percentage, color) {\n if (color === 'transparent') return color;\n return curriedMix(parseFloat(percentage), 'rgb(255, 255, 255)', color);\n} // prettier-ignore\n\n\nvar curriedTint = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(tint);\n\n/**\n * Decreases the opacity of a color. Its range for the amount is between 0 to 1.\n *\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * background: transparentize(0.1, '#fff');\n * background: transparentize(0.2, 'hsl(0, 0%, 100%)'),\n * background: transparentize('0.5', 'rgba(255, 0, 0, 0.8)'),\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * background: ${transparentize(0.1, '#fff')};\n * background: ${transparentize(0.2, 'hsl(0, 0%, 100%)')},\n * background: ${transparentize('0.5', 'rgba(255, 0, 0, 0.8)')},\n * `\n *\n * // CSS in JS Output\n *\n * element {\n * background: \"rgba(255,255,255,0.9)\";\n * background: \"rgba(255,255,255,0.8)\";\n * background: \"rgba(255,0,0,0.3)\";\n * }\n */\n\nfunction transparentize(amount, color) {\n if (color === 'transparent') return color;\n var parsedColor = parseToRgb(color);\n var alpha = typeof parsedColor.alpha === 'number' ? parsedColor.alpha : 1;\n\n var colorWithAlpha = _extends({}, parsedColor, {\n alpha: guard(0, 1, +(alpha * 100 - parseFloat(amount) * 100).toFixed(2) / 100)\n });\n\n return rgba(colorWithAlpha);\n} // prettier-ignore\n\n\nvar curriedTransparentize = /*#__PURE__*/curry\n/* ::<number | string, string, string> */\n(transparentize);\n\n/**\n * Shorthand for easily setting the animation property. Allows either multiple arrays with animations\n * or a single animation spread over the arguments.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation(['rotate', '1s', 'ease-in-out'], ['colorchange', '2s'])}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out, colorchange 2s'\n * }\n * @example\n * // Styles as object usage\n * const styles = {\n * ...animation('rotate', '1s', 'ease-in-out')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${animation('rotate', '1s', 'ease-in-out')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'animation': 'rotate 1s ease-in-out'\n * }\n */\nfunction animation() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n // Allow single or multiple animations passed\n var multiMode = Array.isArray(args[0]);\n\n if (!multiMode && args.length > 8) {\n throw new PolishedError(64);\n }\n\n var code = args.map(function (arg) {\n if (multiMode && !Array.isArray(arg) || !multiMode && Array.isArray(arg)) {\n throw new PolishedError(65);\n }\n\n if (Array.isArray(arg) && arg.length > 8) {\n throw new PolishedError(66);\n }\n\n return Array.isArray(arg) ? arg.join(' ') : arg;\n }).join(', ');\n return {\n animation: code\n };\n}\n\n/**\n * Shorthand that accepts any number of backgroundImage values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgroundImages('url(\"/image/background.jpg\")', 'linear-gradient(red, green)')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'backgroundImage': 'url(\"/image/background.jpg\"), linear-gradient(red, green)'\n * }\n */\nfunction backgroundImages() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n backgroundImage: properties.join(', ')\n };\n}\n\n/**\n * Shorthand that accepts any number of background values as parameters for creating a single background statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${backgrounds('url(\"/image/background.jpg\")', 'linear-gradient(red, green)', 'center no-repeat')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'background': 'url(\"/image/background.jpg\"), linear-gradient(red, green), center no-repeat'\n * }\n */\nfunction backgrounds() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n return {\n background: properties.join(', ')\n };\n}\n\nvar sideMap = ['top', 'right', 'bottom', 'left'];\n/**\n * Shorthand for the border property that splits out individual properties for use with tools like Fela and Styletron. A side keyword can optionally be passed to target only one side's border properties.\n *\n * @example\n * // Styles as object usage\n * const styles = {\n * ...border('1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderColor': 'red',\n * 'borderStyle': 'solid',\n * 'borderWidth': `1px`,\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...border('top', '1px', 'solid', 'red')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${border('top', '1px', 'solid', 'red')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderTopStyle': 'solid',\n * 'borderTopWidth': `1px`,\n * }\n */\n\nfunction border(sideKeyword) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (typeof sideKeyword === 'string' && sideMap.indexOf(sideKeyword) >= 0) {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + capitalizeString(sideKeyword) + \"Width\"] = values[0], _ref[\"border\" + capitalizeString(sideKeyword) + \"Style\"] = values[1], _ref[\"border\" + capitalizeString(sideKeyword) + \"Color\"] = values[2], _ref;\n } else {\n values.unshift(sideKeyword);\n return {\n borderWidth: values[0],\n borderStyle: values[1],\n borderColor: values[2]\n };\n }\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderColor('red', 'green', 'blue', 'yellow')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderColor('red', 'green', 'blue', 'yellow')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopColor': 'red',\n * 'borderRightColor': 'green',\n * 'borderBottomColor': 'blue',\n * 'borderLeftColor': 'yellow'\n * }\n */\nfunction borderColor() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderColor'].concat(values));\n}\n\n/**\n * Shorthand that accepts a value for side and a value for radius and applies the radius value to both corners of the side.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderRadius('top', '5px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderRadius('top', '5px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopRightRadius': '5px',\n * 'borderTopLeftRadius': '5px',\n * }\n */\nfunction borderRadius(side, radius) {\n var uppercaseSide = capitalizeString(side);\n\n if (!radius && radius !== 0) {\n throw new PolishedError(62);\n }\n\n if (uppercaseSide === 'Top' || uppercaseSide === 'Bottom') {\n var _ref;\n\n return _ref = {}, _ref[\"border\" + uppercaseSide + \"RightRadius\"] = radius, _ref[\"border\" + uppercaseSide + \"LeftRadius\"] = radius, _ref;\n }\n\n if (uppercaseSide === 'Left' || uppercaseSide === 'Right') {\n var _ref2;\n\n return _ref2 = {}, _ref2[\"borderTop\" + uppercaseSide + \"Radius\"] = radius, _ref2[\"borderBottom\" + uppercaseSide + \"Radius\"] = radius, _ref2;\n }\n\n throw new PolishedError(63);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderStyle('solid', 'dashed', 'dotted', 'double')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderStyle('solid', 'dashed', 'dotted', 'double')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopStyle': 'solid',\n * 'borderRightStyle': 'dashed',\n * 'borderBottomStyle': 'dotted',\n * 'borderLeftStyle': 'double'\n * }\n */\nfunction borderStyle() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderStyle'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...borderWidth('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${borderWidth('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'borderTopWidth': '12px',\n * 'borderRightWidth': '24px',\n * 'borderBottomWidth': '36px',\n * 'borderLeftWidth': '48px'\n * }\n */\nfunction borderWidth() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['borderWidth'].concat(values));\n}\n\nfunction generateSelectors(template, state) {\n var stateSuffix = state ? \":\" + state : '';\n return template(stateSuffix);\n}\n/**\n * Function helper that adds an array of states to a template of selectors. Used in textInputs and buttons.\n * @private\n */\n\n\nfunction statefulSelectors(states, template, stateMap) {\n if (!template) throw new PolishedError(67);\n if (states.length === 0) return generateSelectors(template, null);\n var selectors = [];\n\n for (var i = 0; i < states.length; i += 1) {\n if (stateMap && stateMap.indexOf(states[i]) < 0) {\n throw new PolishedError(68);\n }\n\n selectors.push(generateSelectors(template, states[i]));\n }\n\n selectors = selectors.join(',');\n return selectors;\n}\n\nvar stateMap = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template(state) {\n return \"button\" + state + \",\\n input[type=\\\"button\\\"]\" + state + \",\\n input[type=\\\"reset\\\"]\" + state + \",\\n input[type=\\\"submit\\\"]\" + state;\n}\n/**\n * Populates selectors that target all buttons. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [buttons('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${buttons('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'button:active,\n * 'input[type=\"button\"]:active,\n * 'input[type=\\\"reset\\\"]:active,\n * 'input[type=\\\"submit\\\"]:active: {\n * 'border': 'none'\n * }\n */\n\n\nfunction buttons() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template, stateMap);\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...margin('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${margin('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'marginTop': '12px',\n * 'marginRight': '24px',\n * 'marginBottom': '36px',\n * 'marginLeft': '48px'\n * }\n */\nfunction margin() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['margin'].concat(values));\n}\n\n/**\n * Shorthand that accepts up to four values, including null to skip a value, and maps them to their respective directions.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...padding('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${padding('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'paddingTop': '12px',\n * 'paddingRight': '24px',\n * 'paddingBottom': '36px',\n * 'paddingLeft': '48px'\n * }\n */\nfunction padding() {\n for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) {\n values[_key] = arguments[_key];\n }\n\n return directionalProperty.apply(void 0, ['padding'].concat(values));\n}\n\nvar positionMap$1 = ['absolute', 'fixed', 'relative', 'static', 'sticky'];\n/**\n * Shorthand accepts up to five values, including null to skip a value, and maps them to their respective directions. The first value can optionally be a position keyword.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...position('12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n *\n * // Styles as object usage\n * const styles = {\n * ...position('absolute', '12px', '24px', '36px', '48px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${position('absolute', '12px', '24px', '36px', '48px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'position': 'absolute',\n * 'top': '12px',\n * 'right': '24px',\n * 'bottom': '36px',\n * 'left': '48px'\n * }\n */\n\nfunction position(firstValue) {\n for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n values[_key - 1] = arguments[_key];\n }\n\n if (positionMap$1.indexOf(firstValue) >= 0 && firstValue) {\n return _extends({}, directionalProperty.apply(void 0, [''].concat(values)), {\n position: firstValue\n });\n } else {\n return directionalProperty.apply(void 0, ['', firstValue].concat(values));\n }\n}\n\n/**\n * Shorthand to set the height and width properties in a single statement.\n * @example\n * // Styles as object usage\n * const styles = {\n * ...size('300px', '250px')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${size('300px', '250px')}\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'height': '300px',\n * 'width': '250px',\n * }\n */\nfunction size(height, width) {\n if (width === void 0) {\n width = height;\n }\n\n return {\n height: height,\n width: width\n };\n}\n\nvar stateMap$1 = [undefined, null, 'active', 'focus', 'hover'];\n\nfunction template$1(state) {\n return \"input[type=\\\"color\\\"]\" + state + \",\\n input[type=\\\"date\\\"]\" + state + \",\\n input[type=\\\"datetime\\\"]\" + state + \",\\n input[type=\\\"datetime-local\\\"]\" + state + \",\\n input[type=\\\"email\\\"]\" + state + \",\\n input[type=\\\"month\\\"]\" + state + \",\\n input[type=\\\"number\\\"]\" + state + \",\\n input[type=\\\"password\\\"]\" + state + \",\\n input[type=\\\"search\\\"]\" + state + \",\\n input[type=\\\"tel\\\"]\" + state + \",\\n input[type=\\\"text\\\"]\" + state + \",\\n input[type=\\\"time\\\"]\" + state + \",\\n input[type=\\\"url\\\"]\" + state + \",\\n input[type=\\\"week\\\"]\" + state + \",\\n input:not([type])\" + state + \",\\n textarea\" + state;\n}\n/**\n * Populates selectors that target all text inputs. You can pass optional states to append to the selectors.\n * @example\n * // Styles as object usage\n * const styles = {\n * [textInputs('active')]: {\n * 'border': 'none'\n * }\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * > ${textInputs('active')} {\n * border: none;\n * }\n * `\n *\n * // CSS in JS Output\n *\n * 'input[type=\"color\"]:active,\n * input[type=\"date\"]:active,\n * input[type=\"datetime\"]:active,\n * input[type=\"datetime-local\"]:active,\n * input[type=\"email\"]:active,\n * input[type=\"month\"]:active,\n * input[type=\"number\"]:active,\n * input[type=\"password\"]:active,\n * input[type=\"search\"]:active,\n * input[type=\"tel\"]:active,\n * input[type=\"text\"]:active,\n * input[type=\"time\"]:active,\n * input[type=\"url\"]:active,\n * input[type=\"week\"]:active,\n * input:not([type]):active,\n * textarea:active': {\n * 'border': 'none'\n * }\n */\n\n\nfunction textInputs() {\n for (var _len = arguments.length, states = new Array(_len), _key = 0; _key < _len; _key++) {\n states[_key] = arguments[_key];\n }\n\n return statefulSelectors(states, template$1, stateMap$1);\n}\n\n/**\n * Accepts any number of transition values as parameters for creating a single transition statement. You may also pass an array of properties as the first parameter that you would like to apply the same transition values to (second parameter).\n * @example\n * // Styles as object usage\n * const styles = {\n * ...transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s'),\n * ...transitions(['color', 'background-color'], '2.0s ease-in 2s')\n * }\n *\n * // styled-components usage\n * const div = styled.div`\n * ${transitions('opacity 1.0s ease-in 0s', 'width 2.0s ease-in 2s')};\n * ${transitions(['color', 'background-color'], '2.0s ease-in 2s'),};\n * `\n *\n * // CSS as JS Output\n *\n * div {\n * 'transition': 'opacity 1.0s ease-in 0s, width 2.0s ease-in 2s'\n * 'transition': 'color 2.0s ease-in 2s, background-color 2.0s ease-in 2s',\n * }\n */\n\nfunction transitions() {\n for (var _len = arguments.length, properties = new Array(_len), _key = 0; _key < _len; _key++) {\n properties[_key] = arguments[_key];\n }\n\n if (Array.isArray(properties[0]) && properties.length === 2) {\n var value = properties[1];\n\n if (typeof value !== 'string') {\n throw new PolishedError(61);\n }\n\n var transitionsString = properties[0].map(function (property) {\n return property + \" \" + value;\n }).join(', ');\n return {\n transition: transitionsString\n };\n } else {\n return {\n transition: properties.join(', ')\n };\n }\n}\n\nexport { curriedAdjustHue as adjustHue, animation, backgroundImages, backgrounds, between, border, borderColor, borderRadius, borderStyle, borderWidth, buttons, clearFix, complement, cover, cssVar, curriedDarken as darken, curriedDesaturate as desaturate, directionalProperty, ellipsis, em, fluidRange, fontFace, getContrast, getLuminance, getValueAndUnit, grayscale, hiDPI, hideText, hideVisually, hsl, hslToColorString, hsla, invert, curriedLighten as lighten, linearGradient, margin, math, meetsContrastGuidelines, curriedMix as mix, modularScale, normalize, curriedOpacify as opacify, padding, parseToHsl, parseToRgb, position, radialGradient, readableColor, rem, retinaImage, rgb, rgbToColorString, rgba, curriedSaturate as saturate, curriedSetHue as setHue, curriedSetLightness as setLightness, curriedSetSaturation as setSaturation, curriedShade as shade, size, stripUnit, textInputs, timingFunctions, curriedTint as tint, toColorString, transitions, curriedTransparentize as transparentize, triangle, wordWrap };\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {focusSafely} from './focusSafely';\nimport {isElementVisible} from './isElementVisible';\nimport React, {ReactNode, RefObject, useContext, useEffect, useRef} from 'react';\nimport {useLayoutEffect} from '@react-aria/utils';\n\n// import {FocusScope, useFocusScope} from 'react-events/focus-scope';\n// export {FocusScope};\n\ninterface FocusScopeProps {\n /** The contents of the focus scope. */\n children: ReactNode,\n\n /**\n * Whether to contain focus inside the scope, so users cannot\n * move focus outside, for example in a modal dialog.\n */\n contain?: boolean,\n\n /**\n * Whether to restore focus back to the element that was focused\n * when the focus scope mounted, after the focus scope unmounts.\n */\n restoreFocus?: boolean,\n\n /** Whether to auto focus the first focusable element in the focus scope on mount. */\n autoFocus?: boolean\n}\n\ninterface FocusManagerOptions {\n /** The element to start searching from. The currently focused element by default. */\n from?: HTMLElement,\n /** Whether to only include tabbable elements, or all focusable elements. */\n tabbable?: boolean,\n /** Whether focus should wrap around when it reaches the end of the scope. */\n wrap?: boolean\n}\n\ninterface FocusManager {\n /** Moves focus to the next focusable or tabbable element in the focus scope. */\n focusNext(opts?: FocusManagerOptions): HTMLElement,\n /** Moves focus to the previous focusable or tabbable element in the focus scope. */\n focusPrevious(opts?: FocusManagerOptions): HTMLElement,\n /** Moves focus to the first focusable or tabbable element in the focus scope. */\n focusFirst(opts?: FocusManagerOptions): HTMLElement,\n /** Moves focus to the last focusable or tabbable element in the focus scope. */\n focusLast(opts?: FocusManagerOptions): HTMLElement\n}\n\ntype ScopeRef = RefObject<HTMLElement[]>;\ninterface IFocusContext {\n scopeRef: ScopeRef,\n focusManager: FocusManager\n}\n\nconst FocusContext = React.createContext<IFocusContext>(null);\n\nlet activeScope: ScopeRef = null;\nlet scopes: Map<ScopeRef, ScopeRef | null> = new Map();\n\n// This is a hacky DOM-based implementation of a FocusScope until this RFC lands in React:\n// https://github.com/reactjs/rfcs/pull/109\n// For now, it relies on the DOM tree order rather than the React tree order, and is probably\n// less optimized for performance.\n\n/**\n * A FocusScope manages focus for its descendants. It supports containing focus inside\n * the scope, restoring focus to the previously focused element on unmount, and auto\n * focusing children on mount. It also acts as a container for a programmatic focus\n * management interface that can be used to move focus forward and back in response\n * to user events.\n */\nexport function FocusScope(props: FocusScopeProps) {\n let {children, contain, restoreFocus, autoFocus} = props;\n let startRef = useRef<HTMLSpanElement>();\n let endRef = useRef<HTMLSpanElement>();\n let scopeRef = useRef<HTMLElement[]>([]);\n let ctx = useContext(FocusContext);\n let parentScope = ctx?.scopeRef;\n\n useLayoutEffect(() => {\n // Find all rendered nodes between the sentinels and add them to the scope.\n let node = startRef.current.nextSibling;\n let nodes = [];\n while (node && node !== endRef.current) {\n nodes.push(node);\n node = node.nextSibling;\n }\n\n scopeRef.current = nodes;\n }, [children, parentScope]);\n\n useLayoutEffect(() => {\n scopes.set(scopeRef, parentScope);\n return () => {\n // Restore the active scope on unmount if this scope or a descendant scope is active.\n // Parent effect cleanups run before children, so we need to check if the\n // parent scope actually still exists before restoring the active scope to it.\n if (\n (scopeRef === activeScope || isAncestorScope(scopeRef, activeScope)) &&\n (!parentScope || scopes.has(parentScope))\n ) {\n activeScope = parentScope;\n }\n scopes.delete(scopeRef);\n };\n }, [scopeRef, parentScope]);\n\n useFocusContainment(scopeRef, contain);\n useRestoreFocus(scopeRef, restoreFocus, contain);\n useAutoFocus(scopeRef, autoFocus);\n\n let focusManager = createFocusManagerForScope(scopeRef);\n\n return (\n <FocusContext.Provider value={{scopeRef, focusManager}}>\n <span data-focus-scope-start hidden ref={startRef} />\n {children}\n <span data-focus-scope-end hidden ref={endRef} />\n </FocusContext.Provider>\n );\n}\n\n/**\n * Returns a FocusManager interface for the parent FocusScope.\n * A FocusManager can be used to programmatically move focus within\n * a FocusScope, e.g. in response to user events like keyboard navigation.\n */\nexport function useFocusManager(): FocusManager {\n return useContext(FocusContext)?.focusManager;\n}\n\nfunction createFocusManagerForScope(scopeRef: React.RefObject<HTMLElement[]>): FocusManager {\n return {\n focusNext(opts: FocusManagerOptions = {}) {\n let scope = scopeRef.current;\n let {from, tabbable, wrap} = opts;\n let node = from || document.activeElement;\n let sentinel = scope[0].previousElementSibling;\n let walker = getFocusableTreeWalker(getScopeRoot(scope), {tabbable}, scope);\n walker.currentNode = isElementInScope(node, scope) ? node : sentinel;\n let nextNode = walker.nextNode() as HTMLElement;\n if (!nextNode && wrap) {\n walker.currentNode = sentinel;\n nextNode = walker.nextNode() as HTMLElement;\n }\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusPrevious(opts: FocusManagerOptions = {}) {\n let scope = scopeRef.current;\n let {from, tabbable, wrap} = opts;\n let node = from || document.activeElement;\n let sentinel = scope[scope.length - 1].nextElementSibling;\n let walker = getFocusableTreeWalker(getScopeRoot(scope), {tabbable}, scope);\n walker.currentNode = isElementInScope(node, scope) ? node : sentinel;\n let previousNode = walker.previousNode() as HTMLElement;\n if (!previousNode && wrap) {\n walker.currentNode = sentinel;\n previousNode = walker.previousNode() as HTMLElement;\n }\n if (previousNode) {\n focusElement(previousNode, true);\n }\n return previousNode;\n },\n focusFirst(opts = {}) {\n let scope = scopeRef.current;\n let {tabbable} = opts;\n let walker = getFocusableTreeWalker(getScopeRoot(scope), {tabbable}, scope);\n walker.currentNode = scope[0].previousElementSibling;\n let nextNode = walker.nextNode() as HTMLElement;\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusLast(opts = {}) {\n let scope = scopeRef.current;\n let {tabbable} = opts;\n let walker = getFocusableTreeWalker(getScopeRoot(scope), {tabbable}, scope);\n walker.currentNode = scope[scope.length - 1].nextElementSibling;\n let previousNode = walker.previousNode() as HTMLElement;\n if (previousNode) {\n focusElement(previousNode, true);\n }\n return previousNode;\n }\n };\n}\n\nconst focusableElements = [\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]'\n];\n\nconst FOCUSABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n\nfocusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst TABBABLE_ELEMENT_SELECTOR = focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\n\nfunction getScopeRoot(scope: HTMLElement[]) {\n return scope[0].parentElement;\n}\n\nfunction useFocusContainment(scopeRef: RefObject<HTMLElement[]>, contain: boolean) {\n let focusedNode = useRef<HTMLElement>();\n\n let raf = useRef(null);\n useLayoutEffect(() => {\n let scope = scopeRef.current;\n if (!contain) {\n return;\n }\n\n // Handle the Tab key to contain focus within the scope\n let onKeyDown = (e) => {\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || scopeRef !== activeScope) {\n return;\n }\n\n let focusedElement = document.activeElement as HTMLElement;\n let scope = scopeRef.current;\n if (!isElementInScope(focusedElement, scope)) {\n return;\n }\n\n let walker = getFocusableTreeWalker(getScopeRoot(scope), {tabbable: true}, scope);\n walker.currentNode = focusedElement;\n let nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as HTMLElement;\n if (!nextElement) {\n walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling : scope[0].previousElementSibling;\n nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as HTMLElement;\n }\n\n e.preventDefault();\n if (nextElement) {\n focusElement(nextElement, true);\n }\n };\n\n let onFocus = (e) => {\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if (!activeScope || isAncestorScope(activeScope, scopeRef)) {\n activeScope = scopeRef;\n focusedNode.current = e.target;\n } else if (scopeRef === activeScope && !isElementInChildScope(e.target, scopeRef)) {\n // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),\n // restore focus to the previously focused node or the first tabbable element in the active scope.\n if (focusedNode.current) {\n focusedNode.current.focus();\n } else if (activeScope) {\n focusFirstInScope(activeScope.current);\n }\n } else if (scopeRef === activeScope) {\n focusedNode.current = e.target;\n }\n };\n\n let onBlur = (e) => {\n // Firefox doesn't shift focus back to the Dialog properly without this\n raf.current = requestAnimationFrame(() => {\n // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe\n if (scopeRef === activeScope && !isElementInChildScope(document.activeElement, scopeRef)) {\n activeScope = scopeRef;\n focusedNode.current = e.target;\n focusedNode.current.focus();\n }\n });\n };\n\n document.addEventListener('keydown', onKeyDown, false);\n document.addEventListener('focusin', onFocus, false);\n scope.forEach(element => element.addEventListener('focusin', onFocus, false));\n scope.forEach(element => element.addEventListener('focusout', onBlur, false));\n return () => {\n document.removeEventListener('keydown', onKeyDown, false);\n document.removeEventListener('focusin', onFocus, false);\n scope.forEach(element => element.removeEventListener('focusin', onFocus, false));\n scope.forEach(element => element.removeEventListener('focusout', onBlur, false));\n };\n }, [scopeRef, contain]);\n\n // eslint-disable-next-line arrow-body-style\n useEffect(() => {\n return () => cancelAnimationFrame(raf.current);\n }, [raf]);\n}\n\nfunction isElementInAnyScope(element: Element) {\n for (let scope of scopes.keys()) {\n if (isElementInScope(element, scope.current)) {\n return true;\n }\n }\n return false;\n}\n\nfunction isElementInScope(element: Element, scope: HTMLElement[]) {\n return scope.some(node => node.contains(element));\n}\n\nfunction isElementInChildScope(element: Element, scope: ScopeRef) {\n // node.contains in isElementInScope covers child scopes that are also DOM children,\n // but does not cover child scopes in portals.\n for (let s of scopes.keys()) {\n if ((s === scope || isAncestorScope(scope, s)) && isElementInScope(element, s.current)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isAncestorScope(ancestor: ScopeRef, scope: ScopeRef) {\n let parent = scopes.get(scope);\n if (!parent) {\n return false;\n }\n\n if (parent === ancestor) {\n return true;\n }\n\n return isAncestorScope(ancestor, parent);\n}\n\nfunction focusElement(element: HTMLElement | null, scroll = false) {\n if (element != null && !scroll) {\n try {\n focusSafely(element);\n } catch (err) {\n // ignore\n }\n } else if (element != null) {\n try {\n element.focus();\n } catch (err) {\n // ignore\n }\n }\n}\n\nfunction focusFirstInScope(scope: HTMLElement[]) {\n let sentinel = scope[0].previousElementSibling;\n let walker = getFocusableTreeWalker(getScopeRoot(scope), {tabbable: true}, scope);\n walker.currentNode = sentinel;\n focusElement(walker.nextNode() as HTMLElement);\n}\n\nfunction useAutoFocus(scopeRef: RefObject<HTMLElement[]>, autoFocus: boolean) {\n const autoFocusRef = React.useRef(autoFocus);\n useEffect(() => {\n if (autoFocusRef.current) {\n activeScope = scopeRef;\n if (!isElementInScope(document.activeElement, activeScope.current)) {\n focusFirstInScope(scopeRef.current);\n }\n }\n autoFocusRef.current = false;\n }, []);\n}\n\nfunction useRestoreFocus(scopeRef: RefObject<HTMLElement[]>, restoreFocus: boolean, contain: boolean) {\n // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.\n useLayoutEffect(() => {\n if (!restoreFocus) {\n return;\n }\n\n let scope = scopeRef.current;\n let nodeToRestore = document.activeElement as HTMLElement;\n\n // Handle the Tab key so that tabbing out of the scope goes to the next element\n // after the node that had focus when the scope mounted. This is important when\n // using portals for overlays, so that focus goes to the expected element when\n // tabbing out of the overlay.\n let onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey) {\n return;\n }\n\n let focusedElement = document.activeElement as HTMLElement;\n if (!isElementInScope(focusedElement, scope)) {\n return;\n }\n\n // Create a DOM tree walker that matches all tabbable elements\n let walker = getFocusableTreeWalker(document.body, {tabbable: true});\n\n // Find the next tabbable element after the currently focused element\n walker.currentNode = focusedElement;\n let nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as HTMLElement;\n\n if (!document.body.contains(nodeToRestore) || nodeToRestore === document.body) {\n nodeToRestore = null;\n }\n\n // If there is no next element, or it is outside the current scope, move focus to the\n // next element after the node to restore to instead.\n if ((!nextElement || !isElementInScope(nextElement, scope)) && nodeToRestore) {\n walker.currentNode = nodeToRestore;\n\n // Skip over elements within the scope, in case the scope immediately follows the node to restore.\n do {\n nextElement = (e.shiftKey ? walker.previousNode() : walker.nextNode()) as HTMLElement;\n } while (isElementInScope(nextElement, scope));\n\n e.preventDefault();\n e.stopPropagation();\n if (nextElement) {\n focusElement(nextElement, true);\n } else {\n // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)\n // then move focus to the body.\n // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)\n if (!isElementInAnyScope(nodeToRestore)) {\n focusedElement.blur();\n } else {\n focusElement(nodeToRestore, true);\n }\n }\n }\n };\n\n if (!contain) {\n document.addEventListener('keydown', onKeyDown, true);\n }\n\n return () => {\n if (!contain) {\n document.removeEventListener('keydown', onKeyDown, true);\n }\n\n if (restoreFocus && nodeToRestore && isElementInScope(document.activeElement, scope)) {\n requestAnimationFrame(() => {\n if (document.body.contains(nodeToRestore)) {\n focusElement(nodeToRestore);\n }\n });\n }\n };\n }, [scopeRef, restoreFocus, contain]);\n}\n\n/**\n * Create a [TreeWalker]{@link https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker}\n * that matches all focusable/tabbable elements.\n */\nexport function getFocusableTreeWalker(root: HTMLElement, opts?: FocusManagerOptions, scope?: HTMLElement[]) {\n let selector = opts?.tabbable ? TABBABLE_ELEMENT_SELECTOR : FOCUSABLE_ELEMENT_SELECTOR;\n let walker = document.createTreeWalker(\n root,\n NodeFilter.SHOW_ELEMENT,\n {\n acceptNode(node) {\n // Skip nodes inside the starting node.\n if (opts?.from?.contains(node)) {\n return NodeFilter.FILTER_REJECT;\n }\n\n if ((node as HTMLElement).matches(selector)\n && isElementVisible(node as HTMLElement)\n && (!scope || isElementInScope(node as HTMLElement, scope))) {\n return NodeFilter.FILTER_ACCEPT;\n }\n\n return NodeFilter.FILTER_SKIP;\n }\n }\n );\n\n if (opts?.from) {\n walker.currentNode = opts.from;\n }\n\n return walker;\n}\n\n/**\n * Creates a FocusManager object that can be used to move focus within an element.\n */\nexport function createFocusManager(ref: RefObject<HTMLElement>): FocusManager {\n return {\n focusNext(opts: FocusManagerOptions = {}) {\n let root = ref.current;\n let {from, tabbable, wrap} = opts;\n let node = from || document.activeElement;\n let walker = getFocusableTreeWalker(root, {tabbable});\n if (root.contains(node)) {\n walker.currentNode = node;\n }\n let nextNode = walker.nextNode() as HTMLElement;\n if (!nextNode && wrap) {\n walker.currentNode = root;\n nextNode = walker.nextNode() as HTMLElement;\n }\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusPrevious(opts: FocusManagerOptions = {}) {\n let root = ref.current;\n let {from, tabbable, wrap} = opts;\n let node = from || document.activeElement;\n let walker = getFocusableTreeWalker(root, {tabbable});\n if (root.contains(node)) {\n walker.currentNode = node;\n } else {\n let next = last(walker);\n if (next) {\n focusElement(next, true);\n }\n return next;\n }\n let previousNode = walker.previousNode() as HTMLElement;\n if (!previousNode && wrap) {\n walker.currentNode = root;\n previousNode = last(walker);\n }\n if (previousNode) {\n focusElement(previousNode, true);\n }\n return previousNode;\n },\n focusFirst(opts = {}) {\n let root = ref.current;\n let {tabbable} = opts;\n let walker = getFocusableTreeWalker(root, {tabbable});\n let nextNode = walker.nextNode() as HTMLElement;\n if (nextNode) {\n focusElement(nextNode, true);\n }\n return nextNode;\n },\n focusLast(opts = {}) {\n let root = ref.current;\n let {tabbable} = opts;\n let walker = getFocusableTreeWalker(root, {tabbable});\n let next = last(walker);\n if (next) {\n focusElement(next, true);\n }\n return next;\n }\n };\n}\n\nfunction last(walker: TreeWalker) {\n let next: HTMLElement;\n let last: HTMLElement;\n do {\n last = walker.lastChild() as HTMLElement;\n if (last) {\n next = last;\n }\n } while (last);\n return next;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FocusableDOMProps, FocusableProps} from '@react-types/shared';\nimport {mergeProps, useSyncRef} from '@react-aria/utils';\nimport React, {HTMLAttributes, MutableRefObject, ReactNode, RefObject, useContext, useEffect, useRef} from 'react';\nimport {useFocus, useKeyboard} from '@react-aria/interactions';\n\ninterface FocusableOptions extends FocusableProps, FocusableDOMProps {\n /** Whether focus should be disabled. */\n isDisabled?: boolean\n}\n\ninterface FocusableProviderProps extends HTMLAttributes<HTMLElement> {\n /** The child element to provide DOM props to. */\n children?: ReactNode\n}\n\ninterface FocusableContextValue extends FocusableProviderProps {\n ref?: MutableRefObject<HTMLElement>\n}\n\nlet FocusableContext = React.createContext<FocusableContextValue>(null);\n\nfunction useFocusableContext(ref: RefObject<HTMLElement>): FocusableContextValue {\n let context = useContext(FocusableContext) || {};\n useSyncRef(context, ref);\n\n // eslint-disable-next-line\n let {ref: _, ...otherProps} = context;\n return otherProps;\n}\n\n/**\n * Provides DOM props to the nearest focusable child.\n */\nfunction FocusableProvider(props: FocusableProviderProps, ref: RefObject<HTMLElement>) {\n let {children, ...otherProps} = props;\n let context = {\n ...otherProps,\n ref\n };\n\n return (\n <FocusableContext.Provider value={context}>\n {children}\n </FocusableContext.Provider>\n );\n}\n\nlet _FocusableProvider = React.forwardRef(FocusableProvider);\nexport {_FocusableProvider as FocusableProvider};\n\n/**\n * Used to make an element focusable and capable of auto focus.\n */\nexport function useFocusable(props: FocusableOptions, domRef: RefObject<HTMLElement>) {\n let {focusProps} = useFocus(props);\n let {keyboardProps} = useKeyboard(props);\n let interactions = mergeProps(focusProps, keyboardProps);\n let domProps = useFocusableContext(domRef);\n let interactionProps = props.isDisabled ? {} : domProps;\n let autoFocusRef = useRef(props.autoFocus);\n\n useEffect(() => {\n if (autoFocusRef.current && domRef.current) {\n domRef.current.focus();\n }\n autoFocusRef.current = false;\n }, []);\n\n return {\n focusableProps: mergeProps(\n {\n ...interactions,\n tabIndex: props.excludeFromTabOrder && !props.isDisabled ? -1 : undefined\n },\n interactionProps\n )\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\nimport {FocusEvent, HTMLAttributes} from 'react';\nimport {FocusEvents} from '@react-types/shared';\n\ninterface FocusProps extends FocusEvents {\n /** Whether the focus events should be disabled. */\n isDisabled?: boolean\n}\n\ninterface FocusResult {\n /** Props to spread onto the target element. */\n focusProps: HTMLAttributes<HTMLElement>\n}\n\n/**\n * Handles focus events for the immediate target.\n * Focus events on child elements will be ignored.\n */\nexport function useFocus(props: FocusProps): FocusResult {\n if (props.isDisabled) {\n return {focusProps: {}};\n }\n\n let onFocus, onBlur;\n if (props.onFocus || props.onFocusChange) {\n onFocus = (e: FocusEvent) => {\n if (e.target === e.currentTarget) {\n if (props.onFocus) {\n props.onFocus(e);\n }\n\n if (props.onFocusChange) {\n props.onFocusChange(true);\n }\n }\n };\n }\n\n if (props.onBlur || props.onFocusChange) {\n onBlur = (e: FocusEvent) => {\n if (e.target === e.currentTarget) {\n if (props.onBlur) {\n props.onBlur(e);\n }\n\n if (props.onFocusChange) {\n props.onFocusChange(false);\n }\n }\n };\n }\n\n return {\n focusProps: {\n onFocus,\n onBlur\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {createEventHandler} from './createEventHandler';\nimport {HTMLAttributes} from 'react';\nimport {KeyboardEvents} from '@react-types/shared';\n\nexport interface KeyboardProps extends KeyboardEvents {\n /** Whether the keyboard events should be disabled. */\n isDisabled?: boolean\n}\n\ninterface KeyboardResult {\n /** Props to spread onto the target element. */\n keyboardProps: HTMLAttributes<HTMLElement>\n}\n\n/**\n * Handles keyboard interactions for a focusable element.\n */\nexport function useKeyboard(props: KeyboardProps): KeyboardResult {\n return {\n keyboardProps: props.isDisabled ? {} : {\n onKeyDown: createEventHandler(props.onKeyDown),\n onKeyUp: createEventHandler(props.onKeyUp)\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {\n AnchorHTMLAttributes,\n ButtonHTMLAttributes,\n ElementType,\n HTMLAttributes,\n InputHTMLAttributes,\n RefObject\n} from 'react';\nimport {AriaButtonProps} from '@react-types/button';\nimport {filterDOMProps} from '@react-aria/utils';\nimport {mergeProps} from '@react-aria/utils';\nimport {useFocusable} from '@react-aria/focus';\nimport {usePress} from '@react-aria/interactions';\n\n\nexport interface ButtonAria<T> {\n /** Props for the button element. */\n buttonProps: T,\n /** Whether the button is currently pressed. */\n isPressed: boolean\n}\n\nexport function useButton(props: AriaButtonProps<'a'>, ref: RefObject<HTMLAnchorElement>): ButtonAria<AnchorHTMLAttributes<HTMLAnchorElement>>;\nexport function useButton(props: AriaButtonProps<'button'>, ref: RefObject<HTMLButtonElement>): ButtonAria<ButtonHTMLAttributes<HTMLButtonElement>>;\nexport function useButton(props: AriaButtonProps<'div'>, ref: RefObject<HTMLDivElement>): ButtonAria<HTMLAttributes<HTMLDivElement>>;\nexport function useButton(props: AriaButtonProps<'input'>, ref: RefObject<HTMLInputElement>): ButtonAria<InputHTMLAttributes<HTMLInputElement>>;\nexport function useButton(props: AriaButtonProps<'span'>, ref: RefObject<HTMLSpanElement>): ButtonAria<HTMLAttributes<HTMLSpanElement>>;\nexport function useButton(props: AriaButtonProps<ElementType>, ref: RefObject<HTMLElement>): ButtonAria<HTMLAttributes<HTMLElement>>;\n/**\n * Provides the behavior and accessibility implementation for a button component. Handles mouse, keyboard, and touch interactions,\n * focus behavior, and ARIA props for both native button elements and custom element types.\n * @param props - Props to be applied to the button.\n * @param ref - A ref to a DOM element for the button.\n */\nexport function useButton(props: AriaButtonProps<ElementType>, ref: RefObject<any>): ButtonAria<HTMLAttributes<any>> {\n let {\n elementType = 'button',\n isDisabled,\n onPress,\n onPressStart,\n onPressEnd,\n onPressChange,\n // @ts-ignore - undocumented\n preventFocusOnPress,\n // @ts-ignore\n onClick: deprecatedOnClick,\n href,\n target,\n rel,\n type = 'button'\n } = props;\n let additionalProps;\n if (elementType === 'button') {\n additionalProps = {\n type,\n disabled: isDisabled\n };\n } else {\n additionalProps = {\n role: 'button',\n tabIndex: isDisabled ? undefined : 0,\n href: elementType === 'a' && isDisabled ? undefined : href,\n target: elementType === 'a' ? target : undefined,\n type: elementType === 'input' ? type : undefined,\n disabled: elementType === 'input' ? isDisabled : undefined,\n 'aria-disabled': !isDisabled || elementType === 'input' ? undefined : isDisabled,\n rel: elementType === 'a' ? rel : undefined\n };\n }\n\n let {pressProps, isPressed} = usePress({\n onPressStart,\n onPressEnd,\n onPressChange,\n onPress,\n isDisabled,\n preventFocusOnPress,\n ref\n });\n\n let {focusableProps} = useFocusable(props, ref);\n let buttonProps = mergeProps(focusableProps, pressProps);\n buttonProps = mergeProps(buttonProps, filterDOMProps(props, {labelable: true}));\n\n return {\n isPressed, // Used to indicate press state for visual\n buttonProps: mergeProps(additionalProps, buttonProps, {\n 'aria-haspopup': props['aria-haspopup'],\n 'aria-expanded': props['aria-expanded'],\n 'aria-controls': props['aria-controls'],\n 'aria-pressed': props['aria-pressed'],\n onClick: (e) => {\n if (deprecatedOnClick) {\n deprecatedOnClick(e);\n console.warn('onClick is deprecated, please use onPress');\n }\n }\n })\n };\n}\n","import { useLayoutEffect } from 'react';\n\nvar index = useLayoutEffect ;\n\nexport default index;\n","import { useRef } from 'react';\nimport useIsomorphicLayoutEffect from 'use-isomorphic-layout-effect';\n\nvar useLatest = function useLatest(value) {\n var ref = useRef(value);\n useIsomorphicLayoutEffect(function () {\n ref.current = value;\n });\n return ref;\n};\n\nexport default useLatest;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport _objectWithoutPropertiesLoose from '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';\nimport { useLayoutEffect, forwardRef, useRef, createElement } from 'react';\nimport useLatest from 'use-latest';\nimport useComposedRef from 'use-composed-ref';\n\nvar HIDDEN_TEXTAREA_STYLE = {\n 'min-height': '0',\n 'max-height': 'none',\n height: '0',\n visibility: 'hidden',\n overflow: 'hidden',\n position: 'absolute',\n 'z-index': '-1000',\n top: '0',\n right: '0'\n};\n\nvar forceHiddenStyles = function forceHiddenStyles(node) {\n Object.keys(HIDDEN_TEXTAREA_STYLE).forEach(function (key) {\n node.style.setProperty(key, HIDDEN_TEXTAREA_STYLE[key], 'important');\n });\n};\n\n// export type CalculatedNodeHeights = [height: number, rowHeight: number];\n// https://github.com/microsoft/TypeScript/issues/28259\n\nvar hiddenTextarea = null;\n\nvar getHeight = function getHeight(node, sizingData) {\n var height = node.scrollHeight;\n\n if (sizingData.sizingStyle.boxSizing === 'border-box') {\n // border-box: add border, since height = content + padding + border\n return height + sizingData.borderSize;\n } // remove padding, since height = content\n\n\n return height - sizingData.paddingSize;\n};\n\nfunction calculateNodeHeight(sizingData, value, minRows, maxRows) {\n if (minRows === void 0) {\n minRows = 1;\n }\n\n if (maxRows === void 0) {\n maxRows = Infinity;\n }\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n hiddenTextarea.setAttribute('tabindex', '-1');\n hiddenTextarea.setAttribute('aria-hidden', 'true');\n forceHiddenStyles(hiddenTextarea);\n }\n\n if (hiddenTextarea.parentNode === null) {\n document.body.appendChild(hiddenTextarea);\n }\n\n var paddingSize = sizingData.paddingSize,\n borderSize = sizingData.borderSize,\n sizingStyle = sizingData.sizingStyle;\n var boxSizing = sizingStyle.boxSizing;\n Object.keys(sizingStyle).forEach(function (_key) {\n var key = _key;\n hiddenTextarea.style[key] = sizingStyle[key];\n });\n forceHiddenStyles(hiddenTextarea);\n hiddenTextarea.value = value;\n var height = getHeight(hiddenTextarea, sizingData); // measure height of a textarea with a single row\n\n hiddenTextarea.value = 'x';\n var rowHeight = hiddenTextarea.scrollHeight - paddingSize;\n var minHeight = rowHeight * minRows;\n\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n\n height = Math.max(minHeight, height);\n var maxHeight = rowHeight * maxRows;\n\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n\n height = Math.min(maxHeight, height);\n return [height, rowHeight];\n}\n\nvar noop = function noop() {};\nvar pick = function pick(props, obj) {\n return props.reduce(function (acc, prop) {\n acc[prop] = obj[prop];\n return acc;\n }, {});\n};\n\nvar SIZING_STYLE = ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth', 'boxSizing', 'fontFamily', 'fontSize', 'fontStyle', 'fontWeight', 'letterSpacing', 'lineHeight', 'paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop', // non-standard\n'tabSize', 'textIndent', // non-standard\n'textRendering', 'textTransform', 'width', 'wordBreak'];\nvar isIE = !!document.documentElement.currentStyle ;\n\nvar getSizingData = function getSizingData(node) {\n var style = window.getComputedStyle(node);\n\n if (style === null) {\n return null;\n }\n\n var sizingStyle = pick(SIZING_STYLE, style);\n var boxSizing = sizingStyle.boxSizing; // probably node is detached from DOM, can't read computed dimensions\n\n if (boxSizing === '') {\n return null;\n } // IE (Edge has already correct behaviour) returns content width as computed width\n // so we need to add manually padding and border widths\n\n\n if (isIE && boxSizing === 'border-box') {\n sizingStyle.width = parseFloat(sizingStyle.width) + parseFloat(sizingStyle.borderRightWidth) + parseFloat(sizingStyle.borderLeftWidth) + parseFloat(sizingStyle.paddingRight) + parseFloat(sizingStyle.paddingLeft) + 'px';\n }\n\n var paddingSize = parseFloat(sizingStyle.paddingBottom) + parseFloat(sizingStyle.paddingTop);\n var borderSize = parseFloat(sizingStyle.borderBottomWidth) + parseFloat(sizingStyle.borderTopWidth);\n return {\n sizingStyle: sizingStyle,\n paddingSize: paddingSize,\n borderSize: borderSize\n };\n};\n\nvar useWindowResizeListener = function useWindowResizeListener(listener) {\n var latestListener = useLatest(listener);\n useLayoutEffect(function () {\n var handler = function handler(event) {\n latestListener.current(event);\n };\n\n window.addEventListener('resize', handler);\n return function () {\n window.removeEventListener('resize', handler);\n };\n }, []);\n};\n\nvar TextareaAutosize = function TextareaAutosize(_ref, userRef) {\n var cacheMeasurements = _ref.cacheMeasurements,\n maxRows = _ref.maxRows,\n minRows = _ref.minRows,\n _ref$onChange = _ref.onChange,\n onChange = _ref$onChange === void 0 ? noop : _ref$onChange,\n _ref$onHeightChange = _ref.onHeightChange,\n onHeightChange = _ref$onHeightChange === void 0 ? noop : _ref$onHeightChange,\n props = _objectWithoutPropertiesLoose(_ref, [\"cacheMeasurements\", \"maxRows\", \"minRows\", \"onChange\", \"onHeightChange\"]);\n\n if (process.env.NODE_ENV !== 'production' && props.style) {\n if ('maxHeight' in props.style) {\n throw new Error('Using `style.maxHeight` for <TextareaAutosize/> is not supported. Please use `maxRows`.');\n }\n\n if ('minHeight' in props.style) {\n throw new Error('Using `style.minHeight` for <TextareaAutosize/> is not supported. Please use `minRows`.');\n }\n }\n\n var isControlled = props.value !== undefined;\n var libRef = useRef(null);\n var ref = useComposedRef(libRef, userRef);\n var heightRef = useRef(0);\n var measurementsCacheRef = useRef();\n\n var resizeTextarea = function resizeTextarea() {\n var node = libRef.current;\n var nodeSizingData = cacheMeasurements && measurementsCacheRef.current ? measurementsCacheRef.current : getSizingData(node);\n\n if (!nodeSizingData) {\n return;\n }\n\n measurementsCacheRef.current = nodeSizingData;\n\n var _calculateNodeHeight = calculateNodeHeight(nodeSizingData, node.value || node.placeholder || 'x', minRows, maxRows),\n height = _calculateNodeHeight[0],\n rowHeight = _calculateNodeHeight[1];\n\n if (heightRef.current !== height) {\n heightRef.current = height;\n node.style.setProperty('height', height + \"px\", 'important');\n onHeightChange(height, {\n rowHeight: rowHeight\n });\n }\n };\n\n var handleChange = function handleChange(event) {\n if (!isControlled) {\n resizeTextarea();\n }\n\n onChange(event);\n };\n\n {\n useLayoutEffect(resizeTextarea);\n useWindowResizeListener(resizeTextarea);\n }\n\n return /*#__PURE__*/createElement(\"textarea\", _extends({}, props, {\n onChange: handleChange,\n ref: ref\n }));\n};\n\nvar index = /* #__PURE__ */forwardRef(TextareaAutosize);\n\nexport default index;\n","/**\r\n * A collection of shims that provide minimal functionality of the ES6 collections.\r\n *\r\n * These implementations are not meant to be used outside of the ResizeObserver\r\n * modules as they cover only a limited range of use cases.\r\n */\r\n/* eslint-disable require-jsdoc, valid-jsdoc */\r\nvar MapShim = (function () {\r\n if (typeof Map !== 'undefined') {\r\n return Map;\r\n }\r\n /**\r\n * Returns index in provided array that matches the specified key.\r\n *\r\n * @param {Array<Array>} arr\r\n * @param {*} key\r\n * @returns {number}\r\n */\r\n function getIndex(arr, key) {\r\n var result = -1;\r\n arr.some(function (entry, index) {\r\n if (entry[0] === key) {\r\n result = index;\r\n return true;\r\n }\r\n return false;\r\n });\r\n return result;\r\n }\r\n return /** @class */ (function () {\r\n function class_1() {\r\n this.__entries__ = [];\r\n }\r\n Object.defineProperty(class_1.prototype, \"size\", {\r\n /**\r\n * @returns {boolean}\r\n */\r\n get: function () {\r\n return this.__entries__.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {*} key\r\n * @returns {*}\r\n */\r\n class_1.prototype.get = function (key) {\r\n var index = getIndex(this.__entries__, key);\r\n var entry = this.__entries__[index];\r\n return entry && entry[1];\r\n };\r\n /**\r\n * @param {*} key\r\n * @param {*} value\r\n * @returns {void}\r\n */\r\n class_1.prototype.set = function (key, value) {\r\n var index = getIndex(this.__entries__, key);\r\n if (~index) {\r\n this.__entries__[index][1] = value;\r\n }\r\n else {\r\n this.__entries__.push([key, value]);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.delete = function (key) {\r\n var entries = this.__entries__;\r\n var index = getIndex(entries, key);\r\n if (~index) {\r\n entries.splice(index, 1);\r\n }\r\n };\r\n /**\r\n * @param {*} key\r\n * @returns {void}\r\n */\r\n class_1.prototype.has = function (key) {\r\n return !!~getIndex(this.__entries__, key);\r\n };\r\n /**\r\n * @returns {void}\r\n */\r\n class_1.prototype.clear = function () {\r\n this.__entries__.splice(0);\r\n };\r\n /**\r\n * @param {Function} callback\r\n * @param {*} [ctx=null]\r\n * @returns {void}\r\n */\r\n class_1.prototype.forEach = function (callback, ctx) {\r\n if (ctx === void 0) { ctx = null; }\r\n for (var _i = 0, _a = this.__entries__; _i < _a.length; _i++) {\r\n var entry = _a[_i];\r\n callback.call(ctx, entry[1], entry[0]);\r\n }\r\n };\r\n return class_1;\r\n }());\r\n})();\n\n/**\r\n * Detects whether window and document objects are available in current environment.\r\n */\r\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && window.document === document;\n\n// Returns global object of a current environment.\r\nvar global$1 = (function () {\r\n if (typeof global !== 'undefined' && global.Math === Math) {\r\n return global;\r\n }\r\n if (typeof self !== 'undefined' && self.Math === Math) {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined' && window.Math === Math) {\r\n return window;\r\n }\r\n // eslint-disable-next-line no-new-func\r\n return Function('return this')();\r\n})();\n\n/**\r\n * A shim for the requestAnimationFrame which falls back to the setTimeout if\r\n * first one is not supported.\r\n *\r\n * @returns {number} Requests' identifier.\r\n */\r\nvar requestAnimationFrame$1 = (function () {\r\n if (typeof requestAnimationFrame === 'function') {\r\n // It's required to use a bounded function because IE sometimes throws\r\n // an \"Invalid calling object\" error if rAF is invoked without the global\r\n // object on the left hand side.\r\n return requestAnimationFrame.bind(global$1);\r\n }\r\n return function (callback) { return setTimeout(function () { return callback(Date.now()); }, 1000 / 60); };\r\n})();\n\n// Defines minimum timeout before adding a trailing call.\r\nvar trailingTimeout = 2;\r\n/**\r\n * Creates a wrapper function which ensures that provided callback will be\r\n * invoked only once during the specified delay period.\r\n *\r\n * @param {Function} callback - Function to be invoked after the delay period.\r\n * @param {number} delay - Delay after which to invoke callback.\r\n * @returns {Function}\r\n */\r\nfunction throttle (callback, delay) {\r\n var leadingCall = false, trailingCall = false, lastCallTime = 0;\r\n /**\r\n * Invokes the original callback function and schedules new invocation if\r\n * the \"proxy\" was called during current request.\r\n *\r\n * @returns {void}\r\n */\r\n function resolvePending() {\r\n if (leadingCall) {\r\n leadingCall = false;\r\n callback();\r\n }\r\n if (trailingCall) {\r\n proxy();\r\n }\r\n }\r\n /**\r\n * Callback invoked after the specified delay. It will further postpone\r\n * invocation of the original function delegating it to the\r\n * requestAnimationFrame.\r\n *\r\n * @returns {void}\r\n */\r\n function timeoutCallback() {\r\n requestAnimationFrame$1(resolvePending);\r\n }\r\n /**\r\n * Schedules invocation of the original function.\r\n *\r\n * @returns {void}\r\n */\r\n function proxy() {\r\n var timeStamp = Date.now();\r\n if (leadingCall) {\r\n // Reject immediately following calls.\r\n if (timeStamp - lastCallTime < trailingTimeout) {\r\n return;\r\n }\r\n // Schedule new call to be in invoked when the pending one is resolved.\r\n // This is important for \"transitions\" which never actually start\r\n // immediately so there is a chance that we might miss one if change\r\n // happens amids the pending invocation.\r\n trailingCall = true;\r\n }\r\n else {\r\n leadingCall = true;\r\n trailingCall = false;\r\n setTimeout(timeoutCallback, delay);\r\n }\r\n lastCallTime = timeStamp;\r\n }\r\n return proxy;\r\n}\n\n// Minimum delay before invoking the update of observers.\r\nvar REFRESH_DELAY = 20;\r\n// A list of substrings of CSS properties used to find transition events that\r\n// might affect dimensions of observed elements.\r\nvar transitionKeys = ['top', 'right', 'bottom', 'left', 'width', 'height', 'size', 'weight'];\r\n// Check if MutationObserver is available.\r\nvar mutationObserverSupported = typeof MutationObserver !== 'undefined';\r\n/**\r\n * Singleton controller class which handles updates of ResizeObserver instances.\r\n */\r\nvar ResizeObserverController = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserverController.\r\n *\r\n * @private\r\n */\r\n function ResizeObserverController() {\r\n /**\r\n * Indicates whether DOM listeners have been added.\r\n *\r\n * @private {boolean}\r\n */\r\n this.connected_ = false;\r\n /**\r\n * Tells that controller has subscribed for Mutation Events.\r\n *\r\n * @private {boolean}\r\n */\r\n this.mutationEventsAdded_ = false;\r\n /**\r\n * Keeps reference to the instance of MutationObserver.\r\n *\r\n * @private {MutationObserver}\r\n */\r\n this.mutationsObserver_ = null;\r\n /**\r\n * A list of connected observers.\r\n *\r\n * @private {Array<ResizeObserverSPI>}\r\n */\r\n this.observers_ = [];\r\n this.onTransitionEnd_ = this.onTransitionEnd_.bind(this);\r\n this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);\r\n }\r\n /**\r\n * Adds observer to observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be added.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.addObserver = function (observer) {\r\n if (!~this.observers_.indexOf(observer)) {\r\n this.observers_.push(observer);\r\n }\r\n // Add listeners if they haven't been added yet.\r\n if (!this.connected_) {\r\n this.connect_();\r\n }\r\n };\r\n /**\r\n * Removes observer from observers list.\r\n *\r\n * @param {ResizeObserverSPI} observer - Observer to be removed.\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.removeObserver = function (observer) {\r\n var observers = this.observers_;\r\n var index = observers.indexOf(observer);\r\n // Remove observer if it's present in registry.\r\n if (~index) {\r\n observers.splice(index, 1);\r\n }\r\n // Remove listeners if controller has no connected observers.\r\n if (!observers.length && this.connected_) {\r\n this.disconnect_();\r\n }\r\n };\r\n /**\r\n * Invokes the update of observers. It will continue running updates insofar\r\n * it detects changes.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.refresh = function () {\r\n var changesDetected = this.updateObservers_();\r\n // Continue running updates if changes have been detected as there might\r\n // be future ones caused by CSS transitions.\r\n if (changesDetected) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Updates every observer from observers list and notifies them of queued\r\n * entries.\r\n *\r\n * @private\r\n * @returns {boolean} Returns \"true\" if any observer has detected changes in\r\n * dimensions of it's elements.\r\n */\r\n ResizeObserverController.prototype.updateObservers_ = function () {\r\n // Collect observers that have active observations.\r\n var activeObservers = this.observers_.filter(function (observer) {\r\n return observer.gatherActive(), observer.hasActive();\r\n });\r\n // Deliver notifications in a separate cycle in order to avoid any\r\n // collisions between observers, e.g. when multiple instances of\r\n // ResizeObserver are tracking the same element and the callback of one\r\n // of them changes content dimensions of the observed target. Sometimes\r\n // this may result in notifications being blocked for the rest of observers.\r\n activeObservers.forEach(function (observer) { return observer.broadcastActive(); });\r\n return activeObservers.length > 0;\r\n };\r\n /**\r\n * Initializes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.connect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already added.\r\n if (!isBrowser || this.connected_) {\r\n return;\r\n }\r\n // Subscription to the \"Transitionend\" event is used as a workaround for\r\n // delayed transitions. This way it's possible to capture at least the\r\n // final state of an element.\r\n document.addEventListener('transitionend', this.onTransitionEnd_);\r\n window.addEventListener('resize', this.refresh);\r\n if (mutationObserverSupported) {\r\n this.mutationsObserver_ = new MutationObserver(this.refresh);\r\n this.mutationsObserver_.observe(document, {\r\n attributes: true,\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n }\r\n else {\r\n document.addEventListener('DOMSubtreeModified', this.refresh);\r\n this.mutationEventsAdded_ = true;\r\n }\r\n this.connected_ = true;\r\n };\r\n /**\r\n * Removes DOM listeners.\r\n *\r\n * @private\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.disconnect_ = function () {\r\n // Do nothing if running in a non-browser environment or if listeners\r\n // have been already removed.\r\n if (!isBrowser || !this.connected_) {\r\n return;\r\n }\r\n document.removeEventListener('transitionend', this.onTransitionEnd_);\r\n window.removeEventListener('resize', this.refresh);\r\n if (this.mutationsObserver_) {\r\n this.mutationsObserver_.disconnect();\r\n }\r\n if (this.mutationEventsAdded_) {\r\n document.removeEventListener('DOMSubtreeModified', this.refresh);\r\n }\r\n this.mutationsObserver_ = null;\r\n this.mutationEventsAdded_ = false;\r\n this.connected_ = false;\r\n };\r\n /**\r\n * \"Transitionend\" event handler.\r\n *\r\n * @private\r\n * @param {TransitionEvent} event\r\n * @returns {void}\r\n */\r\n ResizeObserverController.prototype.onTransitionEnd_ = function (_a) {\r\n var _b = _a.propertyName, propertyName = _b === void 0 ? '' : _b;\r\n // Detect whether transition may affect dimensions of an element.\r\n var isReflowProperty = transitionKeys.some(function (key) {\r\n return !!~propertyName.indexOf(key);\r\n });\r\n if (isReflowProperty) {\r\n this.refresh();\r\n }\r\n };\r\n /**\r\n * Returns instance of the ResizeObserverController.\r\n *\r\n * @returns {ResizeObserverController}\r\n */\r\n ResizeObserverController.getInstance = function () {\r\n if (!this.instance_) {\r\n this.instance_ = new ResizeObserverController();\r\n }\r\n return this.instance_;\r\n };\r\n /**\r\n * Holds reference to the controller's instance.\r\n *\r\n * @private {ResizeObserverController}\r\n */\r\n ResizeObserverController.instance_ = null;\r\n return ResizeObserverController;\r\n}());\n\n/**\r\n * Defines non-writable/enumerable properties of the provided target object.\r\n *\r\n * @param {Object} target - Object for which to define properties.\r\n * @param {Object} props - Properties to be defined.\r\n * @returns {Object} Target object.\r\n */\r\nvar defineConfigurable = (function (target, props) {\r\n for (var _i = 0, _a = Object.keys(props); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n Object.defineProperty(target, key, {\r\n value: props[key],\r\n enumerable: false,\r\n writable: false,\r\n configurable: true\r\n });\r\n }\r\n return target;\r\n});\n\n/**\r\n * Returns the global object associated with provided element.\r\n *\r\n * @param {Object} target\r\n * @returns {Object}\r\n */\r\nvar getWindowOf = (function (target) {\r\n // Assume that the element is an instance of Node, which means that it\r\n // has the \"ownerDocument\" property from which we can retrieve a\r\n // corresponding global object.\r\n var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;\r\n // Return the local global object if it's not possible extract one from\r\n // provided element.\r\n return ownerGlobal || global$1;\r\n});\n\n// Placeholder of an empty content rectangle.\r\nvar emptyRect = createRectInit(0, 0, 0, 0);\r\n/**\r\n * Converts provided string to a number.\r\n *\r\n * @param {number|string} value\r\n * @returns {number}\r\n */\r\nfunction toFloat(value) {\r\n return parseFloat(value) || 0;\r\n}\r\n/**\r\n * Extracts borders size from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @param {...string} positions - Borders positions (top, right, ...)\r\n * @returns {number}\r\n */\r\nfunction getBordersSize(styles) {\r\n var positions = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n positions[_i - 1] = arguments[_i];\r\n }\r\n return positions.reduce(function (size, position) {\r\n var value = styles['border-' + position + '-width'];\r\n return size + toFloat(value);\r\n }, 0);\r\n}\r\n/**\r\n * Extracts paddings sizes from provided styles.\r\n *\r\n * @param {CSSStyleDeclaration} styles\r\n * @returns {Object} Paddings box.\r\n */\r\nfunction getPaddings(styles) {\r\n var positions = ['top', 'right', 'bottom', 'left'];\r\n var paddings = {};\r\n for (var _i = 0, positions_1 = positions; _i < positions_1.length; _i++) {\r\n var position = positions_1[_i];\r\n var value = styles['padding-' + position];\r\n paddings[position] = toFloat(value);\r\n }\r\n return paddings;\r\n}\r\n/**\r\n * Calculates content rectangle of provided SVG element.\r\n *\r\n * @param {SVGGraphicsElement} target - Element content rectangle of which needs\r\n * to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getSVGContentRect(target) {\r\n var bbox = target.getBBox();\r\n return createRectInit(0, 0, bbox.width, bbox.height);\r\n}\r\n/**\r\n * Calculates content rectangle of provided HTMLElement.\r\n *\r\n * @param {HTMLElement} target - Element for which to calculate the content rectangle.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getHTMLElementContentRect(target) {\r\n // Client width & height properties can't be\r\n // used exclusively as they provide rounded values.\r\n var clientWidth = target.clientWidth, clientHeight = target.clientHeight;\r\n // By this condition we can catch all non-replaced inline, hidden and\r\n // detached elements. Though elements with width & height properties less\r\n // than 0.5 will be discarded as well.\r\n //\r\n // Without it we would need to implement separate methods for each of\r\n // those cases and it's not possible to perform a precise and performance\r\n // effective test for hidden elements. E.g. even jQuery's ':visible' filter\r\n // gives wrong results for elements with width & height less than 0.5.\r\n if (!clientWidth && !clientHeight) {\r\n return emptyRect;\r\n }\r\n var styles = getWindowOf(target).getComputedStyle(target);\r\n var paddings = getPaddings(styles);\r\n var horizPad = paddings.left + paddings.right;\r\n var vertPad = paddings.top + paddings.bottom;\r\n // Computed styles of width & height are being used because they are the\r\n // only dimensions available to JS that contain non-rounded values. It could\r\n // be possible to utilize the getBoundingClientRect if only it's data wasn't\r\n // affected by CSS transformations let alone paddings, borders and scroll bars.\r\n var width = toFloat(styles.width), height = toFloat(styles.height);\r\n // Width & height include paddings and borders when the 'border-box' box\r\n // model is applied (except for IE).\r\n if (styles.boxSizing === 'border-box') {\r\n // Following conditions are required to handle Internet Explorer which\r\n // doesn't include paddings and borders to computed CSS dimensions.\r\n //\r\n // We can say that if CSS dimensions + paddings are equal to the \"client\"\r\n // properties then it's either IE, and thus we don't need to subtract\r\n // anything, or an element merely doesn't have paddings/borders styles.\r\n if (Math.round(width + horizPad) !== clientWidth) {\r\n width -= getBordersSize(styles, 'left', 'right') + horizPad;\r\n }\r\n if (Math.round(height + vertPad) !== clientHeight) {\r\n height -= getBordersSize(styles, 'top', 'bottom') + vertPad;\r\n }\r\n }\r\n // Following steps can't be applied to the document's root element as its\r\n // client[Width/Height] properties represent viewport area of the window.\r\n // Besides, it's as well not necessary as the <html> itself neither has\r\n // rendered scroll bars nor it can be clipped.\r\n if (!isDocumentElement(target)) {\r\n // In some browsers (only in Firefox, actually) CSS width & height\r\n // include scroll bars size which can be removed at this step as scroll\r\n // bars are the only difference between rounded dimensions + paddings\r\n // and \"client\" properties, though that is not always true in Chrome.\r\n var vertScrollbar = Math.round(width + horizPad) - clientWidth;\r\n var horizScrollbar = Math.round(height + vertPad) - clientHeight;\r\n // Chrome has a rather weird rounding of \"client\" properties.\r\n // E.g. for an element with content width of 314.2px it sometimes gives\r\n // the client width of 315px and for the width of 314.7px it may give\r\n // 314px. And it doesn't happen all the time. So just ignore this delta\r\n // as a non-relevant.\r\n if (Math.abs(vertScrollbar) !== 1) {\r\n width -= vertScrollbar;\r\n }\r\n if (Math.abs(horizScrollbar) !== 1) {\r\n height -= horizScrollbar;\r\n }\r\n }\r\n return createRectInit(paddings.left, paddings.top, width, height);\r\n}\r\n/**\r\n * Checks whether provided element is an instance of the SVGGraphicsElement.\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nvar isSVGGraphicsElement = (function () {\r\n // Some browsers, namely IE and Edge, don't have the SVGGraphicsElement\r\n // interface.\r\n if (typeof SVGGraphicsElement !== 'undefined') {\r\n return function (target) { return target instanceof getWindowOf(target).SVGGraphicsElement; };\r\n }\r\n // If it's so, then check that element is at least an instance of the\r\n // SVGElement and that it has the \"getBBox\" method.\r\n // eslint-disable-next-line no-extra-parens\r\n return function (target) { return (target instanceof getWindowOf(target).SVGElement &&\r\n typeof target.getBBox === 'function'); };\r\n})();\r\n/**\r\n * Checks whether provided element is a document element (<html>).\r\n *\r\n * @param {Element} target - Element to be checked.\r\n * @returns {boolean}\r\n */\r\nfunction isDocumentElement(target) {\r\n return target === getWindowOf(target).document.documentElement;\r\n}\r\n/**\r\n * Calculates an appropriate content rectangle for provided html or svg element.\r\n *\r\n * @param {Element} target - Element content rectangle of which needs to be calculated.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction getContentRect(target) {\r\n if (!isBrowser) {\r\n return emptyRect;\r\n }\r\n if (isSVGGraphicsElement(target)) {\r\n return getSVGContentRect(target);\r\n }\r\n return getHTMLElementContentRect(target);\r\n}\r\n/**\r\n * Creates rectangle with an interface of the DOMRectReadOnly.\r\n * Spec: https://drafts.fxtf.org/geometry/#domrectreadonly\r\n *\r\n * @param {DOMRectInit} rectInit - Object with rectangle's x/y coordinates and dimensions.\r\n * @returns {DOMRectReadOnly}\r\n */\r\nfunction createReadOnlyRect(_a) {\r\n var x = _a.x, y = _a.y, width = _a.width, height = _a.height;\r\n // If DOMRectReadOnly is available use it as a prototype for the rectangle.\r\n var Constr = typeof DOMRectReadOnly !== 'undefined' ? DOMRectReadOnly : Object;\r\n var rect = Object.create(Constr.prototype);\r\n // Rectangle's properties are not writable and non-enumerable.\r\n defineConfigurable(rect, {\r\n x: x, y: y, width: width, height: height,\r\n top: y,\r\n right: x + width,\r\n bottom: height + y,\r\n left: x\r\n });\r\n return rect;\r\n}\r\n/**\r\n * Creates DOMRectInit object based on the provided dimensions and the x/y coordinates.\r\n * Spec: https://drafts.fxtf.org/geometry/#dictdef-domrectinit\r\n *\r\n * @param {number} x - X coordinate.\r\n * @param {number} y - Y coordinate.\r\n * @param {number} width - Rectangle's width.\r\n * @param {number} height - Rectangle's height.\r\n * @returns {DOMRectInit}\r\n */\r\nfunction createRectInit(x, y, width, height) {\r\n return { x: x, y: y, width: width, height: height };\r\n}\n\n/**\r\n * Class that is responsible for computations of the content rectangle of\r\n * provided DOM element and for keeping track of it's changes.\r\n */\r\nvar ResizeObservation = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObservation.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n */\r\n function ResizeObservation(target) {\r\n /**\r\n * Broadcasted width of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastWidth = 0;\r\n /**\r\n * Broadcasted height of content rectangle.\r\n *\r\n * @type {number}\r\n */\r\n this.broadcastHeight = 0;\r\n /**\r\n * Reference to the last observed content rectangle.\r\n *\r\n * @private {DOMRectInit}\r\n */\r\n this.contentRect_ = createRectInit(0, 0, 0, 0);\r\n this.target = target;\r\n }\r\n /**\r\n * Updates content rectangle and tells whether it's width or height properties\r\n * have changed since the last broadcast.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObservation.prototype.isActive = function () {\r\n var rect = getContentRect(this.target);\r\n this.contentRect_ = rect;\r\n return (rect.width !== this.broadcastWidth ||\r\n rect.height !== this.broadcastHeight);\r\n };\r\n /**\r\n * Updates 'broadcastWidth' and 'broadcastHeight' properties with a data\r\n * from the corresponding properties of the last observed content rectangle.\r\n *\r\n * @returns {DOMRectInit} Last observed content rectangle.\r\n */\r\n ResizeObservation.prototype.broadcastRect = function () {\r\n var rect = this.contentRect_;\r\n this.broadcastWidth = rect.width;\r\n this.broadcastHeight = rect.height;\r\n return rect;\r\n };\r\n return ResizeObservation;\r\n}());\n\nvar ResizeObserverEntry = /** @class */ (function () {\r\n /**\r\n * Creates an instance of ResizeObserverEntry.\r\n *\r\n * @param {Element} target - Element that is being observed.\r\n * @param {DOMRectInit} rectInit - Data of the element's content rectangle.\r\n */\r\n function ResizeObserverEntry(target, rectInit) {\r\n var contentRect = createReadOnlyRect(rectInit);\r\n // According to the specification following properties are not writable\r\n // and are also not enumerable in the native implementation.\r\n //\r\n // Property accessors are not being used as they'd require to define a\r\n // private WeakMap storage which may cause memory leaks in browsers that\r\n // don't support this type of collections.\r\n defineConfigurable(this, { target: target, contentRect: contentRect });\r\n }\r\n return ResizeObserverEntry;\r\n}());\n\nvar ResizeObserverSPI = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback function that is invoked\r\n * when one of the observed elements changes it's content dimensions.\r\n * @param {ResizeObserverController} controller - Controller instance which\r\n * is responsible for the updates of observer.\r\n * @param {ResizeObserver} callbackCtx - Reference to the public\r\n * ResizeObserver instance which will be passed to callback function.\r\n */\r\n function ResizeObserverSPI(callback, controller, callbackCtx) {\r\n /**\r\n * Collection of resize observations that have detected changes in dimensions\r\n * of elements.\r\n *\r\n * @private {Array<ResizeObservation>}\r\n */\r\n this.activeObservations_ = [];\r\n /**\r\n * Registry of the ResizeObservation instances.\r\n *\r\n * @private {Map<Element, ResizeObservation>}\r\n */\r\n this.observations_ = new MapShim();\r\n if (typeof callback !== 'function') {\r\n throw new TypeError('The callback provided as parameter 1 is not a function.');\r\n }\r\n this.callback_ = callback;\r\n this.controller_ = controller;\r\n this.callbackCtx_ = callbackCtx;\r\n }\r\n /**\r\n * Starts observing provided element.\r\n *\r\n * @param {Element} target - Element to be observed.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.observe = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is already being observed.\r\n if (observations.has(target)) {\r\n return;\r\n }\r\n observations.set(target, new ResizeObservation(target));\r\n this.controller_.addObserver(this);\r\n // Force the update of observations.\r\n this.controller_.refresh();\r\n };\r\n /**\r\n * Stops observing provided element.\r\n *\r\n * @param {Element} target - Element to stop observing.\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.unobserve = function (target) {\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n // Do nothing if current environment doesn't have the Element interface.\r\n if (typeof Element === 'undefined' || !(Element instanceof Object)) {\r\n return;\r\n }\r\n if (!(target instanceof getWindowOf(target).Element)) {\r\n throw new TypeError('parameter 1 is not of type \"Element\".');\r\n }\r\n var observations = this.observations_;\r\n // Do nothing if element is not being observed.\r\n if (!observations.has(target)) {\r\n return;\r\n }\r\n observations.delete(target);\r\n if (!observations.size) {\r\n this.controller_.removeObserver(this);\r\n }\r\n };\r\n /**\r\n * Stops observing all elements.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.disconnect = function () {\r\n this.clearActive();\r\n this.observations_.clear();\r\n this.controller_.removeObserver(this);\r\n };\r\n /**\r\n * Collects observation instances the associated element of which has changed\r\n * it's content rectangle.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.gatherActive = function () {\r\n var _this = this;\r\n this.clearActive();\r\n this.observations_.forEach(function (observation) {\r\n if (observation.isActive()) {\r\n _this.activeObservations_.push(observation);\r\n }\r\n });\r\n };\r\n /**\r\n * Invokes initial callback function with a list of ResizeObserverEntry\r\n * instances collected from active resize observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.broadcastActive = function () {\r\n // Do nothing if observer doesn't have active observations.\r\n if (!this.hasActive()) {\r\n return;\r\n }\r\n var ctx = this.callbackCtx_;\r\n // Create ResizeObserverEntry instance for every active observation.\r\n var entries = this.activeObservations_.map(function (observation) {\r\n return new ResizeObserverEntry(observation.target, observation.broadcastRect());\r\n });\r\n this.callback_.call(ctx, entries, ctx);\r\n this.clearActive();\r\n };\r\n /**\r\n * Clears the collection of active observations.\r\n *\r\n * @returns {void}\r\n */\r\n ResizeObserverSPI.prototype.clearActive = function () {\r\n this.activeObservations_.splice(0);\r\n };\r\n /**\r\n * Tells whether observer has active observations.\r\n *\r\n * @returns {boolean}\r\n */\r\n ResizeObserverSPI.prototype.hasActive = function () {\r\n return this.activeObservations_.length > 0;\r\n };\r\n return ResizeObserverSPI;\r\n}());\n\n// Registry of internal observers. If WeakMap is not available use current shim\r\n// for the Map collection as it has all required methods and because WeakMap\r\n// can't be fully polyfilled anyway.\r\nvar observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new MapShim();\r\n/**\r\n * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation\r\n * exposing only those methods and properties that are defined in the spec.\r\n */\r\nvar ResizeObserver = /** @class */ (function () {\r\n /**\r\n * Creates a new instance of ResizeObserver.\r\n *\r\n * @param {ResizeObserverCallback} callback - Callback that is invoked when\r\n * dimensions of the observed elements change.\r\n */\r\n function ResizeObserver(callback) {\r\n if (!(this instanceof ResizeObserver)) {\r\n throw new TypeError('Cannot call a class as a function.');\r\n }\r\n if (!arguments.length) {\r\n throw new TypeError('1 argument required, but only 0 present.');\r\n }\r\n var controller = ResizeObserverController.getInstance();\r\n var observer = new ResizeObserverSPI(callback, controller, this);\r\n observers.set(this, observer);\r\n }\r\n return ResizeObserver;\r\n}());\r\n// Expose public methods of ResizeObserver.\r\n[\r\n 'observe',\r\n 'unobserve',\r\n 'disconnect'\r\n].forEach(function (method) {\r\n ResizeObserver.prototype[method] = function () {\r\n var _a;\r\n return (_a = observers.get(this))[method].apply(_a, arguments);\r\n };\r\n});\n\nvar index = (function () {\r\n // Export existing implementation if available.\r\n if (typeof global$1.ResizeObserver !== 'undefined') {\r\n return global$1.ResizeObserver;\r\n }\r\n return ResizeObserver;\r\n})();\n\nexport default index;\n","import { memo, useEffect, useRef } from \"react\";\nimport {\n Message as LiveMessage,\n MessageText,\n MessageList,\n} from \"@livechat/ui-kit\";\nimport { Message } from \"./Message\";\n\ninterface Props {\n messages: Message[];\n}\n\nmemo(ChatList);\n\nexport default function ChatList(props: Props) {\n const renderedMessages = props.messages.map((message) => (\n <LiveMessage\n key={\n message.sentTimestamp\n ? message.sentTimestamp.valueOf()\n : \"\" +\n message.timestamp.valueOf() +\n message.nick +\n message.payloadAsUtf8\n }\n authorName={message.nick}\n date={formatDisplayDate(message)}\n >\n <MessageText>{message.payloadAsUtf8}</MessageText>\n </LiveMessage>\n ));\n\n return (\n <MessageList active containScrollInSubtree>\n {renderedMessages}\n <AlwaysScrollToBottom messages={props.messages} />\n </MessageList>\n );\n}\n\nfunction formatDisplayDate(message: Message): string {\n return message.timestamp.toLocaleString([], {\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: false,\n });\n}\n\nconst AlwaysScrollToBottom = (props: { messages: Message[] }) => {\n const elementRef = useRef<HTMLDivElement>();\n\n useEffect(() => {\n // @ts-ignore\n elementRef.current.scrollIntoView();\n }, [props.messages]);\n\n // @ts-ignore\n return <div ref={elementRef} />;\n};\n","import { createContext, useContext } from \"react\";\nimport { Waku } from \"js-waku\";\n\nexport type WakuContextType = {\n waku?: Waku;\n};\n\nexport const WakuContext = createContext<WakuContextType>({ waku: undefined });\nexport const useWaku = () => useContext(WakuContext);\n","import { ChangeEvent, KeyboardEvent, useState } from \"react\";\nimport { useWaku } from \"./WakuContext\";\nimport {\n TextInput,\n TextComposer,\n Row,\n Fill,\n Fit,\n SendButton,\n} from \"@livechat/ui-kit\";\n\ninterface Props {\n sendMessage: ((msg: string) => Promise<void>) | undefined;\n}\n\nexport default function MessageInput(props: Props) {\n const [inputText, setInputText] = useState<string>(\"\");\n const { waku } = useWaku();\n\n const sendMessage = async () => {\n if (props.sendMessage) {\n await props.sendMessage(inputText);\n setInputText(\"\");\n }\n };\n\n const messageHandler = (event: ChangeEvent<HTMLInputElement>) => {\n setInputText(event.target.value);\n };\n\n const keyPressHandler = async (event: KeyboardEvent<HTMLInputElement>) => {\n if (\n event.key === \"Enter\" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.shiftKey\n ) {\n await sendMessage();\n }\n };\n\n // Enable the button if there are relay peers available or the user is sending a command\n const activeButton =\n (waku && waku.relay.getPeers().size !== 0) || inputText.startsWith(\"/\");\n\n return (\n <TextComposer\n onKeyDown={keyPressHandler}\n onChange={messageHandler}\n active={activeButton}\n onButtonClick={sendMessage}\n >\n <Row align=\"center\">\n <Fill>\n <TextInput value={inputText} />\n </Fill>\n <Fit>\n <SendButton />\n </Fit>\n </Row>\n </TextComposer>\n );\n}\n","/* eslint-disable */\nimport Long from \"long\";\nimport _m0 from \"protobufjs/minimal\";\n\nexport const protobufPackage = \"\";\n\nexport interface ChatMessage {\n timestamp: number;\n nick: string;\n payload: Uint8Array;\n}\n\nfunction createBaseChatMessage(): ChatMessage {\n return { timestamp: 0, nick: \"\", payload: new Uint8Array() };\n}\n\nexport const ChatMessage = {\n encode(\n message: ChatMessage,\n writer: _m0.Writer = _m0.Writer.create()\n ): _m0.Writer {\n if (message.timestamp !== 0) {\n writer.uint32(8).uint64(message.timestamp);\n }\n if (message.nick !== \"\") {\n writer.uint32(18).string(message.nick);\n }\n if (message.payload.length !== 0) {\n writer.uint32(26).bytes(message.payload);\n }\n return writer;\n },\n\n decode(input: _m0.Reader | Uint8Array, length?: number): ChatMessage {\n const reader = input instanceof _m0.Reader ? input : new _m0.Reader(input);\n let end = length === undefined ? reader.len : reader.pos + length;\n const message = createBaseChatMessage();\n while (reader.pos < end) {\n const tag = reader.uint32();\n switch (tag >>> 3) {\n case 1:\n message.timestamp = longToNumber(reader.uint64() as Long);\n break;\n case 2:\n message.nick = reader.string();\n break;\n case 3:\n message.payload = reader.bytes();\n break;\n default:\n reader.skipType(tag & 7);\n break;\n }\n }\n return message;\n },\n\n fromJSON(object: any): ChatMessage {\n const message = createBaseChatMessage();\n message.timestamp =\n object.timestamp !== undefined && object.timestamp !== null\n ? Number(object.timestamp)\n : 0;\n message.nick =\n object.nick !== undefined && object.nick !== null\n ? String(object.nick)\n : \"\";\n message.payload =\n object.payload !== undefined && object.payload !== null\n ? bytesFromBase64(object.payload)\n : new Uint8Array();\n return message;\n },\n\n toJSON(message: ChatMessage): unknown {\n const obj: any = {};\n message.timestamp !== undefined &&\n (obj.timestamp = Math.round(message.timestamp));\n message.nick !== undefined && (obj.nick = message.nick);\n message.payload !== undefined &&\n (obj.payload = base64FromBytes(\n message.payload !== undefined ? message.payload : new Uint8Array()\n ));\n return obj;\n },\n\n fromPartial<I extends Exact<DeepPartial<ChatMessage>, I>>(\n object: I\n ): ChatMessage {\n const message = createBaseChatMessage();\n message.timestamp = object.timestamp ?? 0;\n message.nick = object.nick ?? \"\";\n message.payload = object.payload ?? new Uint8Array();\n return message;\n },\n};\n\ndeclare var self: any | undefined;\ndeclare var window: any | undefined;\ndeclare var global: any | undefined;\nvar globalThis: any = (() => {\n if (typeof globalThis !== \"undefined\") return globalThis;\n if (typeof self !== \"undefined\") return self;\n if (typeof window !== \"undefined\") return window;\n if (typeof global !== \"undefined\") return global;\n throw \"Unable to locate global object\";\n})();\n\nconst atob: (b64: string) => string =\n globalThis.atob ||\n ((b64) => globalThis.Buffer.from(b64, \"base64\").toString(\"binary\"));\nfunction bytesFromBase64(b64: string): Uint8Array {\n const bin = atob(b64);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; ++i) {\n arr[i] = bin.charCodeAt(i);\n }\n return arr;\n}\n\nconst btoa: (bin: string) => string =\n globalThis.btoa ||\n ((bin) => globalThis.Buffer.from(bin, \"binary\").toString(\"base64\"));\nfunction base64FromBytes(arr: Uint8Array): string {\n const bin: string[] = [];\n for (const byte of arr) {\n bin.push(String.fromCharCode(byte));\n }\n return btoa(bin.join(\"\"));\n}\n\ntype Builtin =\n | Date\n | Function\n | Uint8Array\n | string\n | number\n | boolean\n | undefined;\n\nexport type DeepPartial<T> = T extends Builtin\n ? T\n : T extends Array<infer U>\n ? Array<DeepPartial<U>>\n : T extends ReadonlyArray<infer U>\n ? ReadonlyArray<DeepPartial<U>>\n : T extends {}\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : Partial<T>;\n\ntype KeysOfUnion<T> = T extends T ? keyof T : never;\nexport type Exact<P, I extends P> = P extends Builtin\n ? P\n : P & { [K in keyof P]: Exact<P[K], I[K]> } & Record<\n Exclude<keyof I, KeysOfUnion<P>>,\n never\n >;\n\nfunction longToNumber(long: Long): number {\n if (long.gt(Number.MAX_SAFE_INTEGER)) {\n throw new globalThis.Error(\"Value is larger than Number.MAX_SAFE_INTEGER\");\n }\n return long.toNumber();\n}\n\nif (_m0.util.Long !== Long) {\n _m0.util.Long = Long as any;\n _m0.configure();\n}\n","import { Reader } from \"protobufjs/minimal\";\n\nimport * as proto from \"./proto/chat_message\";\n\n/**\n * ChatMessage is used by the various show case waku apps that demonstrates\n * waku used as the network layer for chat group applications.\n *\n * This is included to help building PoC and MVPs. Apps that aim to be\n * production ready should use a more appropriate data structure.\n */\nexport class ChatMessage {\n public constructor(public proto: proto.ChatMessage) {}\n\n /**\n * Create Chat Message with a utf-8 string as payload.\n */\n static fromUtf8String(\n timestamp: Date,\n nick: string,\n text: string\n ): ChatMessage {\n const timestampNumber = Math.floor(timestamp.valueOf() / 1000);\n const payload = Buffer.from(text, \"utf-8\");\n\n return new ChatMessage({\n timestamp: timestampNumber,\n nick,\n payload,\n });\n }\n\n /**\n * Decode a protobuf payload to a ChatMessage.\n * @param bytes The payload to decode.\n */\n static decode(bytes: Uint8Array): ChatMessage {\n const protoMsg = proto.ChatMessage.decode(Reader.create(bytes));\n return new ChatMessage(protoMsg);\n }\n\n /**\n * Encode this ChatMessage to a byte array, to be used as a protobuf payload.\n * @returns The encoded payload.\n */\n encode(): Uint8Array {\n return proto.ChatMessage.encode(this.proto).finish();\n }\n\n get timestamp(): Date {\n return new Date(this.proto.timestamp * 1000);\n }\n\n get nick(): string {\n return this.proto.nick;\n }\n\n get payloadAsUtf8(): string {\n if (!this.proto.payload) {\n return \"\";\n }\n\n return Buffer.from(this.proto.payload).toString(\"utf-8\");\n }\n}\n","import { WakuMessage } from \"js-waku\";\nimport { ChatContentTopic } from \"./App\";\nimport ChatList from \"./ChatList\";\nimport MessageInput from \"./MessageInput\";\nimport { useWaku } from \"./WakuContext\";\nimport { TitleBar } from \"@livechat/ui-kit\";\nimport { Message } from \"./Message\";\nimport { ChatMessage } from \"./chat_message\";\nimport { useEffect, useState } from \"react\";\nimport PeerId from \"peer-id\";\n\ninterface Props {\n messages: Message[];\n commandHandler: (cmd: string) => void;\n nick: string;\n}\n\nexport default function Room(props: Props) {\n const { waku } = useWaku();\n\n const [peers, setPeers] = useState<PeerId[]>([]);\n const [storePeers, setStorePeers] = useState(0);\n const [relayPeers, setRelayPeers] = useState(0);\n\n useEffect(() => {\n // Add a peer to the list every time a connection happen to ensure the stats update correctly\n if (!waku) return;\n\n const addPeer = (event: { peerId: PeerId }) => {\n setPeers((peers) => {\n return [...peers, event.peerId];\n });\n };\n\n waku.libp2p.peerStore.on(\"change:protocols\", addPeer);\n\n return () => {\n waku.libp2p.connectionManager.removeListener(\"change:protocols\", addPeer);\n };\n }, [waku]);\n\n useEffect(() => {\n if (!waku) return;\n\n setRelayPeers(waku.relay.getPeers().size);\n\n (async () => {\n let counter = 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _peer of waku.store.peers) {\n counter++;\n }\n setStorePeers(counter);\n })();\n }, [waku, peers]);\n\n return (\n <div\n className=\"chat-container\"\n style={{ height: \"98vh\", display: \"flex\", flexDirection: \"column\" }}\n >\n <TitleBar\n leftIcons={[`Peers: ${relayPeers} relay ${storePeers} store.`]}\n title=\"Waku v2 chat app\"\n />\n <ChatList messages={props.messages} />\n <MessageInput\n sendMessage={\n waku\n ? async (messageToSend) => {\n return handleMessage(\n messageToSend,\n props.nick,\n props.commandHandler,\n waku.relay.send.bind(waku.relay)\n );\n }\n : undefined\n }\n />\n </div>\n );\n}\n\nasync function handleMessage(\n message: string,\n nick: string,\n commandHandler: (cmd: string) => void,\n messageSender: (msg: WakuMessage) => Promise<void>\n) {\n if (message.startsWith(\"/\")) {\n commandHandler(message);\n } else {\n const timestamp = new Date();\n const chatMessage = ChatMessage.fromUtf8String(timestamp, nick, message);\n const wakuMsg = await WakuMessage.fromBytes(\n chatMessage.encode(),\n ChatContentTopic,\n { timestamp }\n );\n return messageSender(wakuMsg);\n }\n}\n","import { WakuMessage } from \"js-waku\";\nimport { ChatMessage } from \"./chat_message\";\n\nexport class Message {\n public chatMessage: ChatMessage;\n // WakuMessage timestamp\n public sentTimestamp: Date | undefined;\n\n constructor(chatMessage: ChatMessage, sentTimestamp: Date | undefined) {\n this.chatMessage = chatMessage;\n this.sentTimestamp = sentTimestamp;\n }\n\n static fromWakuMessage(wakuMsg: WakuMessage): Message | undefined {\n if (wakuMsg.payload) {\n try {\n const chatMsg = ChatMessage.decode(wakuMsg.payload);\n if (chatMsg) {\n return new Message(chatMsg, wakuMsg.timestamp);\n }\n } catch (e) {\n console.error(\n \"Failed to decode chat message\",\n wakuMsg.payloadAsUtf8,\n e\n );\n }\n }\n return;\n }\n\n static fromUtf8String(nick: string, text: string): Message {\n const now = new Date();\n return new Message(ChatMessage.fromUtf8String(now, nick, text), now);\n }\n\n get nick() {\n return this.chatMessage.nick;\n }\n\n get timestamp() {\n return this.chatMessage.timestamp;\n }\n\n get payloadAsUtf8() {\n return this.chatMessage.payloadAsUtf8;\n }\n}\n","import { useEffect, useReducer, useState } from \"react\";\nimport \"./App.css\";\nimport {\n PageDirection,\n getPredefinedBootstrapNodes,\n Waku,\n WakuMessage,\n} from \"js-waku\";\nimport handleCommand from \"./command\";\nimport Room from \"./Room\";\nimport { WakuContext } from \"./WakuContext\";\nimport { ThemeProvider } from \"@livechat/ui-kit\";\nimport { generate } from \"server-name-generator\";\nimport { Message } from \"./Message\";\nimport { Fleet } from \"js-waku/lib/discovery/predefined\";\n\nconst themes = {\n AuthorName: {\n css: {\n fontSize: \"1.1em\",\n },\n },\n Message: {\n css: {\n margin: \"0em\",\n padding: \"0em\",\n fontSize: \"0.83em\",\n },\n },\n MessageText: {\n css: {\n margin: \"0em\",\n padding: \"0.1em\",\n paddingLeft: \"1em\",\n fontSize: \"1.1em\",\n },\n },\n MessageGroup: {\n css: {\n margin: \"0em\",\n padding: \"0.2em\",\n },\n },\n};\n\nexport const ChatContentTopic = \"/toy-chat/2/huilong/proto\";\n\nasync function retrieveStoreMessages(\n waku: Waku,\n setArchivedMessages: (value: Message[]) => void\n): Promise<number> {\n const callback = (wakuMessages: WakuMessage[]): void => {\n const messages: Message[] = [];\n wakuMessages\n .map((wakuMsg) => Message.fromWakuMessage(wakuMsg))\n .forEach((message) => {\n if (message) {\n messages.push(message);\n }\n });\n setArchivedMessages(messages);\n };\n\n const startTime = new Date();\n // Only retrieve a week of history\n startTime.setTime(Date.now() - 1000 * 60 * 60 * 24 * 7);\n\n const endTime = new Date();\n\n try {\n const res = await waku.store.queryHistory([ChatContentTopic], {\n pageSize: 5,\n pageDirection: PageDirection.FORWARD,\n timeFilter: {\n startTime,\n endTime,\n },\n callback,\n });\n\n return res.length;\n } catch (e) {\n console.log(\"Failed to retrieve messages\", e);\n return 0;\n }\n}\n\nexport default function App() {\n const [messages, dispatchMessages] = useReducer(reduceMessages, []);\n const [waku, setWaku] = useState<Waku | undefined>(undefined);\n const [nick, setNick] = useState<string>(() => {\n const persistedNick = window.localStorage.getItem(\"nick\");\n return persistedNick !== null ? persistedNick : generate();\n });\n const [historicalMessagesRetrieved, setHistoricalMessagesRetrieved] =\n useState(false);\n\n useEffect(() => {\n localStorage.setItem(\"nick\", nick);\n }, [nick]);\n\n useEffect(() => {\n initWaku(setWaku)\n .then(() => console.log(\"Waku init done\"))\n .catch((e) => console.log(\"Waku init failed \", e));\n }, []);\n\n useEffect(() => {\n if (!waku) return;\n // Let's retrieve previous messages before listening to new messages\n if (!historicalMessagesRetrieved) return;\n\n const handleRelayMessage = (wakuMsg: WakuMessage) => {\n console.log(\"Message received: \", wakuMsg);\n const msg = Message.fromWakuMessage(wakuMsg);\n if (msg) {\n dispatchMessages([msg]);\n }\n };\n\n waku.relay.addObserver(handleRelayMessage, [ChatContentTopic]);\n\n return function cleanUp() {\n waku?.relay.deleteObserver(handleRelayMessage, [ChatContentTopic]);\n };\n }, [waku, historicalMessagesRetrieved]);\n\n useEffect(() => {\n if (!waku) return;\n if (historicalMessagesRetrieved) return;\n\n const retrieveMessages = async () => {\n await waku.waitForRemotePeer();\n console.log(`Retrieving archived messages`);\n\n try {\n retrieveStoreMessages(waku, dispatchMessages).then((length) => {\n console.log(`Messages retrieved:`, length);\n setHistoricalMessagesRetrieved(true);\n });\n } catch (e) {\n console.log(`Error encountered when retrieving archived messages`, e);\n }\n };\n\n retrieveMessages();\n }, [waku, historicalMessagesRetrieved]);\n\n return (\n <div\n className=\"chat-app\"\n style={{ height: \"100vh\", width: \"100vw\", overflow: \"hidden\" }}\n >\n <WakuContext.Provider value={{ waku: waku }}>\n <ThemeProvider theme={themes}>\n <Room\n nick={nick}\n messages={messages}\n commandHandler={(input: string) => {\n handleCommand(input, waku, setNick).then(\n ({ command, response }) => {\n const commandMessages = response.map((msg) => {\n return Message.fromUtf8String(command, msg);\n });\n dispatchMessages(commandMessages);\n }\n );\n }}\n />\n </ThemeProvider>\n </WakuContext.Provider>\n </div>\n );\n}\n\nasync function initWaku(setter: (waku: Waku) => void) {\n try {\n const waku = await Waku.create({\n libp2p: {\n config: {\n pubsub: {\n enabled: true,\n emitSelf: true,\n },\n },\n },\n bootstrap: {\n getPeers: () =>\n Promise.resolve(getPredefinedBootstrapNodes(selectFleetEnv())),\n },\n });\n\n setter(waku);\n } catch (e) {\n console.log(\"Issue starting waku \", e);\n }\n}\n\nfunction selectFleetEnv() {\n // Works with react-scripts\n if (process?.env?.NODE_ENV === \"development\") {\n return Fleet.Test;\n } else {\n return Fleet.Prod;\n }\n}\n\nfunction reduceMessages(state: Message[], newMessages: Message[]) {\n return state.concat(newMessages);\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById(\"root\")\n);\n"],"names":["get","getPredefinedBootstrapNodes","Waku","DefaultPubSubTopic","WakuMessage","generatePrivateKey","generateSymmetricKey","getPublicKey","WakuLightPush","LightPushCodec","PushResponse","WakuRelay","RelayCodecs","PageDirection","WakuStore","StoreCodec","dbg","Bootstrap","constructor","opts","maxPeers","DefaultMaxPeers","default","this","getBootstrapPeers","Promise","resolve","undefined","peers","length","allPeers","map","node","Multiaddr","getPseudoRandomSubset","ma","toString","getPeers","async","enrUrl","dns","DnsNodeDiscovery","dnsOverHttp","enrs","enr","getFullMultiaddrs","flat","debug","_errorTolerance","_DNSTreeCache","endpoints","dnsClient","DnsOverHttps","maxQuantity","enrTreeUrls","totalSearches","networkIndex","Math","floor","random","publicKey","domain","ENRTree","parseTree","context","visits","peer","_search","isNewPeer","push","nodeId","ip","subdomain","entry","_getTXTRecord","next","branches","entryType","startsWith","ROOT_PREFIX","BRANCH_PREFIX","RECORD_PREFIX","getEntryType","parseAndVerifyRoot","parseBranch","circularRefs","idx","entries","Object","keys","Error","index","selectRandomPath","ENR","decodeTxt","error","location","response","resolveTXT","result","join","existingPeer","cloudflare","google","opendns","data","query","questions","type","name","answers","a","forEach","d","Array","isArray","sd","bytesToUtf8","root","rootValues","parseRootValues","decodedPublicKey","base32","decode","asBytes","signedComponent","split","signedComponentBuffer","utf8ToBytes","signatureBuffer","base64ToBytes","signature","slice","isVerified","ecdsaVerify","keccak256Buf","Uint8Array","eRoot","txt","matches","match","ok","shift","lRoot","seq","Number","tree","TREE_PREFIX","branch","values","wantedNumber","shuffle","Fleet","DefaultWantedNumber","nodes","fleet","Prod","fleets","Test","MAX_RECORD_SIZE","ERR_INVALID_ID","ERR_NO_SIGNATURE","MULTIADDR_LENGTH_SIZE","bytes","bytesToHex","Map","kvs","super","id","secp256k1","peerId","keypair","createKeypairFromPeerId","KeypairType","createV4","decoded","obj","i","BigInt","rlpEncodedBytes","hexToBytes","RLP","encode","verify","encoded","decodeFromValues","set","k","v","keypairType","createKeypair","createPeerIdFromKeypair","v4","raw","protocols","names","ip4","code","toBytes","delete","tcp","port","udp","ip6","tcp6","udp6","multiaddrs","decodeMultiaddrs","multiaddrsBuf","encodeMultiaddrs","getLocationMultiaddr","protocol","isIpv6","endsWith","ipVal","isUdp","isTcp","protoName","protoVal","ipMa","ipByteLen","size","protoMa","protoBuf","maBuf","setLocationMultiaddr","multiaddr","protoNames","tuples","getFullMultiaddr","locationMultiaddr","encapsulate","toB58String","sign","privateKey","encodeToValues","content","from","sort","b","localeCompare","unshift","bytesToBase64","v4Crypto","ERR_TYPE_NOT_IMPLEMENTED","ERR_INVALID_KEYPAIR_TYPE","keysPBM","supportedKeys","Secp256k1Keypair","generate","privKey","hasPrivateKey","Secp256k1PrivateKey","pubKey","Secp256k1PublicKey","pub","PublicKey","Type","marshal","Data","secp256k1PublicKeyToCompressed","_publicKey","publicKeyConvert","AbstractKeypair","window","crypto","array","getRandomValues","randomBytes","publicKeyCreate","privateKeyVerify","key","_privateKey","publicKeyVerify","msg","recid","ecdsaSign","sig","Boolean","DataView","buffer","getUint16","multiaddrBytes","totalLength","reduce","acc","dataView","getPeerId","setUint16","hash","input","keccak256","arrayBuffer","createPrivateKey","uncompressedPubkey","createNodeId","ENRKeyPair","_nodeId","peersIter","round","libp2p","peerStore","includes","s","c","String","fromCharCode","ci","charCodeAt","c2","subarray","hex","current","Buffer","replace","_hex","parseInt","substring","buf","_a","_b","toLowerCase","message","base64","e","len","res","charAt","l","r","reader","FileReader","onload","readAsDataURL","Blob","websocketsTransportKey","prototype","Symbol","toStringTag","DefaultPingKeepAliveValueSecs","DefaultRelayKeepAliveValueSecs","Protocols","options","store","lightPush","relay","pubsub","pingKeepAliveTimers","relayKeepAliveTimers","pingKeepAlive","relayKeepAlive","connectionManager","on","connection","startKeepAlive","remotePeer","stopKeepAlive","decryptionKeys","addDecryptionKey","libp2pOpts","assign","config","transport","filter","all","pubSubTopic","modules","streamMuxer","connEncryption","Noise","staticNoiseKey","bootstrap","list","peerDiscovery","tag","enabled","create","wakuStore","wakuLightPush","start","_protocols","Relay","codecs","codec","Store","LightPush","dialProtocol","addPeerToAddressBook","createFromB58String","addresses","addr","addressBook","stop","deleteDecryptionKey","getLocalMultiaddrWithID","localMultiaddr","find","desiredProtocols","promises","promise","once","storePeerFound","_peer","connectedPeerProtocols","lightPushPeerFound","pingPeriodSecs","relayPeriodSecs","peerIdStr","pingService","setInterval","ping","catch","fromBytes","RelayPingContentTopic","then","wakuMsg","send","clearInterval","randomPeer","stream","newStream","PushRPC","createRequest","console","log","err","getPeersForProtocol","selectRandomPeer","proto","requestId","request","Reader","finish","DecryptionMethod","_signaturePublicKey","_signature","utf8","contentTopic","payload","timestamp","encPublicKey","symKey","sigPrivKey","Date","_payload","version","enc","version_1","clearEncode","encryptAsymmetric","encryptSymmetric","valueOf","decodeProto","signaturePublicKey","isDefined","dec","decodedResults","method","contentTopics","Asymmetric","decryptAsymmetric","Symmetric","decryptSymmetric","clearDecode","payloadAsUtf8","msCrypto","subtle","webkitSubtle","Algorithm","iv","clearText","importKey","cryptoKey","encrypt","cipherText","decrypt","IvSize","SymmetricKeySize","TagSize","symmetric","mod","eBrowser","eNode","cipher","createCipheriv","update","final","getAuthTag","concat","tagStart","decipher","createDecipheriv","setAuthTag","getSizeOfPayloadSizeField","PrivateKeySize","messagePayload","envelope","fieldSize","field","alloc","writeUInt32LE","addPayloadSizeField","rawSize","paddingSize","pad","value","expectedSize","equals","validateDataIntegrity","sizeOfPayloadSizeField","readUIntLE","payloadSize","isSigned","getSignature","getHash","messageHash","recovery","readIntBE","ecdsaRecover","ecRecoverPubKey","ecies","generateIv","ivStart","second","minute","RelayGossipFactor","RelayHeartbeatInitialDelay","RelayHeartbeatInterval","RelayPrunePeers","RelayPruneBackoff","RelayFanoutTTL","RelayOpportunisticGraftTicks","RelayOpportunisticGraftPeers","RelayMaxIHaveLength","router","topic","count","peersInTopic","topics","Set","peerStreams","globalSignaturePolicy","SignaturePolicy","StrictNoSign","heartbeat","RelayHeartbeat","observers","multicodecs","constants","subscribe","publish","addObserver","callback","add","deleteObserver","getRelayPeers","_options","D","score","scoreThresholds","publishThreshold","event","callbackFn","started","fanoutPeers","fanout","has","direct","mesh","lastpub","_sendGraft","msgIdStr","getCanonicalMsgIdStr","receivedFrom","deliverMessage","gossipTracer","seenCache","put","messageCache","toSend","topicIDs","meshPeers","_now","rpc","createGossipRpc","utils","normalizeOutRpcMessage","_sendRpc","_emitGossip","exclude","messageIDs","getGossipIDs","peersToGossip","topicPeers","gossipThreshold","target","Dlazy","factor","peerMessageIDs","_pushGossip","topicID","doPX","backoff","xid","p","peerID","signedPeerRecord","_libp2p","getRawEnvelope","Heartbeat","gossipsub","_heartbeatTimer","_heartbeat","bind","timeout","setTimeout","runPeriodically","_intervalId","fn","period","cancel","clearTimeout","Dlo","Dhi","Dscore","Dout","heartbeatTicks","scores","getScore","toGraft","toPrune","noPX","_clearBackoff","peerhave","clear","iasked","_applyIwantPenalties","_directConnect","prunePeer","prune","_addBackoff","graftPeer","graft","ineed","peersArray","outbound","rotate","j","ihave","peersList","medianIndex","medianScore","opportunisticGraftThreshold","now","_sendGraftPrune","_flush","emit","HistoryRPC","params","direction","pageDirection","BACKWARD","PagingInfo_Direction","DIRECTION_BACKWARD_UNSPECIFIED","FORWARD","DIRECTION_FORWARD","directionToProto","pagingInfo","pageSize","cursor","contentFilters","startTime","endTime","DefaultPageSize","timeFilter","getTime","messages","queryOpts","historyRpcQuery","createQuery","remoteAddr","HistoryResponse_Error","ERROR_INVALID_CURSOR","pageMessages","protoMsg","abort","responsePageSize","queryPageSize","Index","PagingInfo","ContentFilter","HistoryQuery","HistoryResponse","isSet","protobufPackage","PushRequest","writer","Writer","uint32","string","fork","ldelim","end","pos","skipType","fromJSON","object","toJSON","fromPartial","isSuccess","bool","info","util","Long","configure","double","bytesFromBase64","arr","bin","byte","btoa","base64FromBytes","globalThis","self","g","atob","b64","pagingInfo_DirectionFromJSON","UNRECOGNIZED","pagingInfo_DirectionToJSON","historyResponse_ErrorFromJSON","ERROR_NONE_UNSPECIFIED","historyResponse_ErrorToJSON","createBaseIndex","digest","receivedTime","senderTime","uint64","int32","longToNumber","long","gt","MAX_SAFE_INTEGER","toNumber","require","module","asn1","exports","bignum","define","base","decoders","encoders","inherits","Entity","body","_createNamed","Base","Generated","entity","_initNamed","call","_getDecoder","hasOwnProperty","_getEncoder","reporter","Reporter","DecoderBuffer","isBuffer","offset","EncoderBuffer","item","isEncoderBuffer","byteLength","isDecoderBuffer","save","restore","isEmpty","readUInt8","skip","fail","_reporterState","out","write","copy","Node","assert","tags","methods","parent","state","_baseState","children","args","reverseArgs","choice","optional","any","use","useDecoder","explicit","implicit","contains","_wrap","stateProps","clone","cstate","prop","apply","arguments","_init","child","equal","_useArgs","arg","def","val","num","newKey","_decode","wrapResult","prevObj","present","prevKey","enterKey","_peekTag","isError","_decodeGeneric","_decodeChoice","enterObject","_decodeTag","track","path","_getUse","leaveObject","exitKey","leaveKey","_decodeList","test","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeBool","_decodeInt","_use","some","_createEncoderBuffer","_encode","_encodeValue","_skipDefault","primitive","_encodeChoice","_encodePrimitive","cls","_encodeComposite","JSON","stringify","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool","_isNumstr","str","_isPrintstr","errors","ReporterError","rethrow","pathLen","prev","inherited","elem","stack","partial","captureStackTrace","reverse","tagClass","tagClassByName","tagByName","_reverse","der","DERDecoder","DERNode","derDecodeTag","oct","tagStr","derDecodeLen","decodedTag","_skipUntilEnd","decoder","possibleEnd","unused","readUInt16BE","numstr","printstr","relative","identifiers","ident","subident","first","tmp","year","mon","day","hour","min","sec","UTC","pem","PEMDecoder","lines","label","toUpperCase","re","DEREncoder","two","encodedTag","encodeTag","header","lenOctets","writeUInt16BE","splice","objid","time","date","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","numArray","toArray","dataBuffer","defaultBuffer","PEMEncoder","ctor","superCtor","super_","TempCtor","BN","number","endian","isBN","negative","words","red","wordSize","parseHex4Bits","parseHexByte","lowerBound","parseBase","mul","max","left","right","cmp","_initNumber","_initArray","_parseHex","_parseBase","ceil","w","off","strip","limbLen","limbPow","total","word","imuln","_iaddn","pow","dest","_expand","_normSign","inspect","zeros","groupSizes","groupBases","smallMulTo","lo","carry","ncarry","rword","maxJ","padding","groupSize","groupBase","isZero","modn","idivn","ret","toBuffer","toArrayLike","ArrayType","reqLength","littleEndian","q","andln","iushrn","clz32","_countBits","t","_zeroBits","bitLength","hi","zeroBits","toTwos","width","abs","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","sub","comb10MulTo","mid","o","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","x","y","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","transform","rtwdf","cos","PI","itwdf","sin","rtwdf_","itwdf_","ie","ro","io","rx","guessLen13b","n","m","odd","conjugate","normalize13b","ws","convert13b","stub","ph","_","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","h","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","mode","bhi","diff","qj","div","divmod","positive","divn","umod","divRound","dm","half","r2","egcd","A","B","C","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","delta","cmpn","invm","bincn","ucmp","gtn","gten","gte","ltn","lt","lten","lte","eqn","eq","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","_strip","output","outLen","mod3","one","nOne","lpow","z","inv","wnd","currentLen","mont","u","lens","getLens","validLen","placeHoldersLen","toByteArray","Arr","_byteLength","curByte","revLookup","fromByteArray","uint8","extraBytes","parts","maxChunkLength","len2","encodeChunk","lookup","indexOf","move","src","_move","for","modrn","allocUnsafe","allocate","_toArrayLikeLE","position","_toArrayLikeBE","isNegNum","Rand","rand","_rand","getBytes","getByte","asUInt32Array","readUInt32BE","scrubVec","cryptBlock","M","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","blockSize","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","writeUInt32BE","decryptBlock","m1","scrub","aes","Transform","GHASH","incr32","StreamCipher","_cipher","ck","_ghash","_finID","ghash","toPad","ivBits","tail","writeUIntBE","calcIv","_prev","_cache","_secCache","_decrypt","_alen","_len","_mode","_authTag","_called","_update","chunk","rump","_final","xorTest","setAAD","ciphers","deciphers","modes","createCipher","Cipher","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","AuthCipher","MODES","ebtk","Splitter","_last","_autopadding","cache","suite","password","TypeError","thing","flush","last","padded","unpad","setAutoPadding","setTo","autoPadding","PADDING","padBuff","writeUInt8","ZEROES","fromArray","block","_multiply","lsbVi","Vi","Zi","abl","bl","encryptStart","encryptByte","byteParam","shiftIn","getBlock","chunkNum","modeModules","ECB","CBC","CFB","CFB8","CFB1","OFB","CTR","GCM","DES","aesModes","desModes","keyLen","ivLen","CipherBase","des","instantiate","EDE","modeName","_des","des3","getr","priv","modulus","prime1","prime2","crt","blinds","blinder","publicExponent","unblinder","blind","blinded","c1","qinv","coefficient","exponent1","m2","exponent2","createHash","algorithms","Sign","algorithm","Writable","_hashType","_hash","_tag","_signType","Verify","createSign","createVerify","_write","done","createHmac","EC","parseKeys","curves","getKey","algo","hlen","hbits","bits2int","bits2octets","fill","obits","makeKey","kv","makeR","hashType","signType","curve","curveId","keyFromPrivate","toDER","ecSign","priv_key","H","dsaSign","checkValue","pubkey","subjectPrivateKey","ecVerify","pub_key","unpacked","montp","dsaVerify","padNum","copyProps","dst","SafeBuffer","encodingOrOffset","allocUnsafeSlow","encoding","SlowBuffer","ieee754","customInspectSymbol","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","setPrototypeOf","isEncoding","actual","fromString","ArrayBuffer","isView","arrayView","isInstance","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","checked","numberIsNaN","fromObject","toPrimitive","assertSize","mustMatch","loweredCase","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","read","foundIndex","found","hexWrite","remaining","strLen","parsed","substr","utf8Write","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","defineProperty","enumerable","poolSize","_isBuffer","compare","swap16","swap32","swap64","toLocaleString","trim","thisStart","thisEnd","thisCopy","targetCopy","isFinite","_arr","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","readUintLE","readUintBE","readUIntBE","readUint8","readUint16LE","readUInt16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","boundsError","readBigUInt64BE","readIntLE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUint8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUint32LE","writeUint32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","E","sym","getMessage","writable","configurable","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","ERR_BUFFER_OUT_OF_BOUNDS","received","isInteger","INVALID_BASE64_RE","Infinity","leadSurrogate","base64clean","alphabet","table","i16","BufferBigIntNotDefined","f","source","sink","sinks","zinkz","StringDecoder","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_toString","_transform","fin","elliptic","ECDH","aliases","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","ec","formatReturnValue","bn","p256","secp256r1","secp192r1","p384","p521","generateKeys","format","genKeyPair","computeSecret","other","inenc","keyFromPublic","getPublic","getPrivate","getX","getPrivateKey","setPublicKey","_importPublic","setPrivateKey","_priv","_importPrivate","MD5","RIPEMD160","sha","Hash","alg","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","rng","pseudoRandomBytes","prng","algos","algoKeys","hashes","getHashes","pbkdf2","pbkdf2Sync","dh","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","CBCState","_cbcInit","_cbcState","inp","inOff","outOff","superProto","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_pad","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","pc1","r28shl","pc2","_encrypt","lStart","rStart","keyL","keyR","expand","substitute","rip","EDEState","k1","k2","k3","_edeState","inL","inR","outL","outR","pc2table","sTable","permuteTable","padSplit","group","generatePrime","DH","ENCODINGS","gen","generator","genc","millerRabin","TWENTYFOUR","ELEVEN","TEN","THREE","SEVEN","_pub","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","rem","simpleSieve","fermatTest","checkPrime","__gen","_gen","secret","getPrime","front","getGenerator","findPrime","ONE","TWO","FIVE","FOUR","_getPrimes","n2","eddsa","getNAF","getJSF","BaseCurve","conf","zero","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","_bitLength","adjustCount","redN","_maxwellTrick","BasePoint","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","naf","I","step","nafW","repr","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","jsf","ja","jb","decodePoint","pointFromX","encodeCompressed","compact","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","EdwardsCurve","twisted","mOneA","dd","oneC","Point","zOne","_mulA","_mulC","rhs","lhs","y2","pointFromY","isInfinity","normalize","_extDbl","nx","ny","nt","nz","_projDbl","_extAdd","_projAdd","mulAdd","jmulAdd","zi","eqXToP","xc","short","edwards","MontCurve","i4","a24","aa","bb","diffAdd","da","cb","jumlAdd","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","isRed","inf","JPoint","lambda","betas","_getEndoRoots","lambdas","basis","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","len1","_endoSplit","v1","v2","p1","p2","q1","q2","ax","_endoWnafMulAdd","npoints","ncoeffs","pre","endoMul","parse","obj2point","ys1","dyinv","_precompute","negate","zinv","zinv2","ay","pz2","z2","u1","u2","h2","h3","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yy","yyyy","yyyy8","c8","gamma","alpha","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","mm","ee","yyu4","kbase","z3","pz3","zs","PresetCurve","defineCurve","sha256","sha384","sha512","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","fromPublic","drbg","pers","persEnc","entropy","hmacStrength","entropyEnc","nonce","ns2","_truncateToN","truncOnly","bkey","ns1","iter","kp","kpX","recoveryParam","canonical","sinv","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","privEnc","pubEnc","reason","derive","_importDER","Position","place","getLength","initial","octetLen","rmPadding","constructLength","octets","LN2","slen","backHalf","parseBytes","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","messagePrefix","R","Rencoded","encodePoint","s_","pubBytes","S","makeSignature","SG","intFromLE","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","cachedProperty","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toHex","minAssert","minUtils","zero2","m8","d1","d2","m14","m24","computer","ReflectOwnKeys","Reflect","ReflectApply","receiver","Function","ownKeys","getOwnPropertySymbols","getOwnPropertyNames","NumberIsNaN","isNaN","EventEmitter","init","emitter","reject","errorListener","removeListener","resolver","eventTargetAgnosticAddListener","handler","flags","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","listener","_getMaxListeners","that","_addListener","prepend","events","existing","warning","newListener","warned","warn","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","addEventListener","wrapListener","removeEventListener","getPrototypeOf","setMaxListeners","getMaxListeners","doError","er","listeners","addListener","prependListener","prependOnceListener","originalListener","pop","spliceOne","removeAllListeners","rawListeners","eventNames","salt","keyBits","used","keyStart","HashBase","_block","_blockSize","_blockOffset","_length","_finalized","prefix","throwIfNotStringOrBuffer","_digest","common","ripemd","hmac","sha1","sha224","ripemd160","BlockHash","pending","pendingTotal","outSize","padLength","_delta8","_delta32","join32","inner","outer","rotl32","sum32","sum32_3","sum32_4","K","Kh","Ah","Bh","Ch","Dh","Eh","T","rh","sh","toHex32","split32","shaCommon","sum32_5","ft_1","sha1_K","SHA1","W","SHA256","SHA224","ch32","maj32","s0_256","s1_256","g0_256","g1_256","sha256_K","T1","T2","SHA512","SHA384","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","sum64","sum64_hi","sum64_lo","sum64_4_hi","sum64_4_lo","sum64_5_hi","sum64_5_lo","sha512_K","ch64_hi","xh","xl","yh","yl","zh","ch64_lo","zl","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","ah","al","bh","ch","cl","dl","eh","el","fh","fl","gh","gl","hh","hl","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","rotr32","p32","isSurrogatePair","htonl","zero8","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","seed","_hmac","kmac","reseed","addEnc","temp","reactIs","REACT_STATICS","childContextTypes","contextType","contextTypes","defaultProps","displayName","getDefaultProps","getDerivedStateFromError","getDerivedStateFromProps","mixins","propTypes","KNOWN_STATICS","caller","callee","arity","MEMO_STATICS","TYPE_STATICS","getStatics","component","isMemo","ForwardRef","render","Memo","getOwnPropertyDescriptor","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","descriptor","$$typeof","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","Element","Fragment","Lazy","Portal","Profiler","StrictMode","Suspense","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isPortal","isProfiler","isStrictMode","isSuspense","isValidElementType","typeOf","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","ARRAY16","_c","_d","rotl","fnF","fnG","fnH","fnI","brorand","MillerRabin","_randbelow","min_bytes","_randrange","rone","n1","rn1","getDivisor","propIsEnumerable","propertyIsEnumerable","toObject","test1","test2","test3","letter","shouldUseNative","symbols","to","certificate","RSAPrivateKey","int","RSAPublicKey","AlgorithmIdentifier","bitstr","null_","PrivateKeyInfo","octstr","PrivateKey","EncryptedPrivateKeyInfo","EncryptedPrivateKey","DSAPrivateKey","DSAparam","ECPrivateKey","ECParameters","namedCurve","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","decrypted","cipherKey","match2","aesid","fixProc","compat","passphrase","subtype","ndata","stripped","tbsCertificate","subjectPublicKeyInfo","subjectPublicKey","kde","kdeparams","iters","keylen","parameters","ZERO_BUF","nextTick","checkParameters","defaultEncoding","sync","global","toBrowser","checks","getNextTick","process","queueMicrotask","setImmediate","browserPbkdf2","iterations","deriveBits","resolvePromise","browser","prom","checkNative","resp","MAX_ALLOC","sizes","rmd160","saltLen","shaFunc","rmd160Func","getDigest","ipad1","ipad2","run","DK","block1","destPos","hLen","U","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","noop","title","env","argv","versions","binding","cwd","chdir","umask","ReactPropTypesSecret","emptyFunction","emptyFunctionWithReset","resetWarningCache","shim","props","propName","componentName","propFullName","getShim","isRequired","ReactPropTypes","func","symbol","arrayOf","element","elementType","instanceOf","objectOf","oneOf","oneOfType","shape","exact","checkPropTypes","PropTypes","i2ops","mgf","withPublic","zBuffer","iHash","maskedSeed","maskedDb","db","dif","oaep","status","ps","pkcs1","paddedMsg","hLen2","dblen","cur","nonZero","MAX_BYTES","MAX_UINT32","generated","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","encodeURIComponent","ba","ca","ea","fa","document","createElement","ha","ia","ka","acceptsBooleans","attributeName","attributeNamespace","mustUseProperty","propertyName","sanitizeURL","removeEmptyString","oa","pa","qa","na","la","removeAttribute","setAttribute","setAttributeNS","xlinkHref","ra","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","sa","ta","ua","wa","xa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ma","Ka","iterator","La","Na","Oa","Pa","prepareStackTrace","construct","Qa","_render","Ra","_context","Sa","Ta","nodeName","Va","_valueTracker","getValue","setValue","stopTracking","Ua","Wa","Xa","activeElement","Ya","defaultChecked","defaultValue","_wrapperState","initialChecked","Za","initialValue","controlled","$a","ab","ownerDocument","eb","Children","fb","selected","defaultSelected","disabled","gb","dangerouslySetInnerHTML","hb","ib","textContent","kb","lb","mb","nb","ob","namespaceURI","innerHTML","firstChild","removeChild","appendChild","MSApp","execUnsafeLocalFunction","pb","lastChild","nodeType","nodeValue","qb","animationIterationCount","borderImageOutset","borderImageSlice","borderImageWidth","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","columns","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","gridArea","gridRow","gridRowEnd","gridRowSpan","gridRowStart","gridColumn","gridColumnEnd","gridColumnSpan","gridColumnStart","fontWeight","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","strokeWidth","sb","tb","style","setProperty","ub","menuitem","area","br","col","embed","hr","img","keygen","link","meta","param","wbr","vb","wb","is","xb","srcElement","correspondingUseElement","parentNode","yb","zb","Ab","Bb","Cb","stateNode","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Ob","Pb","Qb","Rb","onError","Sb","Tb","Ub","Vb","Wb","Xb","Zb","alternate","return","$b","memoizedState","dehydrated","ac","cc","sibling","bc","dc","fc","gc","hc","ic","jc","kc","lc","mc","nc","oc","pc","qc","rc","blockedOn","domEventName","eventSystemFlags","nativeEvent","targetContainers","sc","pointerId","tc","vc","wc","lanePriority","unstable_runWithPriority","priority","hydrate","containerInfo","yc","zc","Ac","Bc","unstable_scheduleCallback","unstable_NormalPriority","Cc","Dc","Ec","animationend","animationiteration","animationstart","transitionend","Fc","Gc","Hc","animation","transition","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","unstable_now","F","Rc","Uc","pendingLanes","expiredLanes","suspendedLanes","pingedLanes","Vc","entangledLanes","entanglements","Wc","Xc","Yc","Zc","$c","eventTimes","bd","cd","unstable_UserBlockingPriority","ed","fd","gd","hd","uc","jd","kd","ld","md","nd","od","keyCode","charCode","pd","qd","rd","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","wd","xd","yd","eventPhase","bubbles","cancelable","timeStamp","isTrusted","td","ud","view","detail","vd","Ad","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","zd","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","Bd","Dd","dataTransfer","Fd","Hd","animationName","elapsedTime","pseudoElement","Id","clipboardData","Jd","Ld","Md","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","Nd","Od","Alt","Control","Meta","Shift","Pd","Qd","repeat","locale","which","Rd","Td","height","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","Vd","touches","targetTouches","changedTouches","Xd","Yd","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","Zd","$d","ae","be","documentMode","ce","de","fe","ge","he","le","color","datetime","email","month","search","tel","text","url","week","me","ne","oe","pe","qe","se","te","ue","ve","we","xe","ye","ze","oninput","Ae","detachEvent","Be","Ce","attachEvent","De","Ee","Fe","He","Ie","Je","Ke","Le","nextSibling","Me","compareDocumentPosition","Ne","HTMLIFrameElement","contentWindow","href","Oe","contentEditable","Pe","Qe","Re","Se","Te","Ue","selectionStart","selectionEnd","anchorNode","defaultView","getSelection","anchorOffset","focusNode","focusOffset","Ve","We","Xe","Ye","Ze","Yb","instance","$e","af","bf","cf","df","capture","passive","Nb","ef","ff","parentWindow","gf","hf","J","L","je","char","ke","jf","kf","lf","mf","autoFocus","nf","__html","of","pf","qf","sf","previousSibling","tf","vf","wf","xf","yf","zf","Af","Bf","Cf","Df","Ef","__reactInternalMemoizedUnmaskedChildContext","__reactInternalMemoizedMaskedChildContext","Ff","Gf","Hf","If","getChildContext","Jf","__reactInternalMemoizedMergedChildContext","Kf","Lf","Mf","Nf","Of","Pf","unstable_cancelCallback","Qf","unstable_shouldYield","Rf","unstable_requestPaint","Sf","Tf","unstable_getCurrentPriorityLevel","Uf","unstable_ImmediatePriority","Vf","Wf","Xf","unstable_LowPriority","Yf","unstable_IdlePriority","Zf","$f","ag","bg","cg","dg","O","eg","fg","gg","hg","ig","jg","kg","ReactCurrentBatchConfig","lg","mg","ng","og","pg","qg","rg","_currentValue","sg","childLanes","tg","dependencies","firstContext","lanes","ug","vg","observedBits","responders","wg","xg","updateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","effects","yg","zg","eventTime","lane","Ag","Bg","Cg","Dg","Eg","Fg","Component","refs","Gg","Kg","isMounted","_reactInternals","enqueueSetState","Hg","Ig","Jg","enqueueReplaceState","enqueueForceUpdate","Lg","shouldComponentUpdate","isPureReactComponent","Mg","updater","Ng","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","Og","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","Pg","Qg","ref","_owner","_stringRef","Rg","Sg","lastEffect","nextEffect","firstEffect","Tg","Ug","Vg","implementation","Wg","Xg","Yg","Zg","$g","documentElement","tagName","P","ih","memoizedProps","revealOrder","jh","kh","lh","mh","oh","pendingProps","qh","th","uh","_workInProgressVersionPrimary","vh","ReactCurrentDispatcher","wh","Fh","Gh","Hh","baseQueue","Ih","Jh","lastRenderedReducer","action","eagerReducer","eagerState","lastRenderedState","dispatch","Lh","Mh","_getVersion","_source","mutableReadLanes","Nh","useState","getSnapshot","useEffect","setSnapshot","Oh","Ph","Qh","Rh","destroy","deps","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","di","readContext","useCallback","useContext","useImperativeHandle","useLayoutEffect","useMemo","useReducer","useRef","useDebugValue","useDeferredValue","useTransition","useMutableSource","useOpaqueIdentifier","unstable_isNewReconciler","uf","ei","ReactCurrentOwner","fi","gi","ii","ji","ki","li","mi","baseLanes","ni","oi","pi","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","qi","ri","pendingContext","Bi","Di","Ei","si","retryLane","ti","fallback","unstable_avoidThisFallback","ui","unstable_expectedLoadTime","vi","wi","yi","isBackwards","rendering","renderingStartTime","tailMode","Ai","Fi","Gi","wasMultiple","multiple","onClick","onclick","createElementNS","createTextNode","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","WeakMap","Pi","Qi","Ri","Si","componentDidCatch","Ti","componentStack","Ui","WeakSet","Wi","Xi","__reactInternalSnapshotBeforeUpdate","Yi","$i","focus","aj","display","bj","onCommitFiberUnmount","componentWillUnmount","cj","dj","ej","fj","gj","hj","insertBefore","_reactRootContainer","ij","jj","kj","lj","mj","nj","oj","pj","X","Y","rj","sj","tj","uj","vj","wj","Z","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Sc","Kj","Lj","Mj","callbackNode","expirationTimes","callbackPriority","Tc","Nj","Oj","Pj","Qj","Rj","Sj","Tj","finishedWork","finishedLanes","Uj","timeoutHandle","Wj","Xj","pingCache","Yj","Zj","va","ak","bk","dk","rangeCount","focusedElem","selectionRange","ek","extend","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","top","scrollTop","onCommitFiberRoot","fk","gk","isReactComponent","pendingChildren","jk","mutableSourceEagerHydrationData","kk","lk","mk","nk","qk","hydrationOptions","mutableSources","_internalRoot","rk","tk","hasAttribute","sk","uk","hk","_calculateChangedBits","unstable_observedBits","unmount","querySelectorAll","form","Vj","vk","Events","wk","findFiberByHostInstance","bundleType","rendererPackageName","xk","rendererConfig","overrideHookState","overrideHookStateDeletePath","overrideHookStateRenamePath","overrideProps","overridePropsDeletePath","overridePropsRenamePath","setSuspenseHandler","scheduleUpdate","currentDispatcherRef","findHostInstanceByFiber","findHostInstancesForRefresh","scheduleRefresh","scheduleRoot","setRefreshHandler","getCurrentFiber","__REACT_DEVTOOLS_GLOBAL_HOOK__","yk","isDisabled","supportsFiber","inject","createPortal","findDOMNode","flushSync","unmountComponentAtNode","unstable_batchedUpdates","unstable_createPortal","unstable_renderSubtreeIntoContainer","checkDCE","__self","__source","jsx","jsxs","setState","forceUpdate","escape","_status","_result","IsSomeRendererActing","only","PureComponent","cloneElement","createContext","_currentValue2","_threadCount","Provider","Consumer","createFactory","createRef","forwardRef","isValidElement","lazy","memo","codes","createErrorType","NodeError","_Base","subClass","superClass","arg1","arg2","arg3","__proto__","expected","determiner","this_len","objectKeys","Duplex","Readable","allowHalfOpen","readable","onend","_writableState","ended","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","PassThrough","ReadableState","EElistenerCount","Stream","OurUint8Array","debugUtil","debuglog","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","paused","emitClose","autoDestroy","awaitDrain","readingMore","_read","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","head","MAX_HWM","howMuchToRead","computeNewHighWaterMark","flow","maybeReadMore_","updateReadableListening","resume","nReadingNextTick","resume_","fromList","consume","endReadable","endReadableNT","wState","finished","xs","nOrig","doRead","pipe","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","needDrain","pipeOnDrain","pause","dests","ev","wrap","_this","asyncIterator","_fromList","iterable","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","prefinish","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","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","_defineProperty","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_this2","_Object$create","enumerableOnly","_defineProperties","custom","Constructor","_classCallCheck","protoProps","staticProps","hasStrings","_getString","_getBuffer","getOwnPropertyDescriptors","defineProperties","_objectSpread","depth","customInspect","emitErrorAndCloseNT","emitErrorNT","emitCloseNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","called","onlegacyfinish","writableEnded","readableEnded","onrequest","req","setHeader","isRequest","ERR_MISSING_ARGS","destroyer","closed","popCallback","streams","destroys","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","pipeline","zr","sl","sr","_e","fn1","fn2","fn3","fn4","fn5","ar","cr","dr","tl","tr","safer","Safer","kStringMaxLength","MAX_LENGTH","MAX_STRING_LENGTH","performance","MessageChannel","unstable_forceFrameRate","cancelAnimationFrame","requestAnimationFrame","port2","port1","onmessage","postMessage","sortIndex","expirationTime","priorityLevel","unstable_Profiling","unstable_continueExecution","unstable_getFirstCallbackNode","unstable_next","unstable_pauseExecution","delay","unstable_wrapCallback","Nouns","Adjectives","data_1","generator_1","finalSize","_finalSize","accum","assigned","remainder","lowBits","highBits","Sha","_w","rotl30","ft","Sha1","rotl5","Sha256","Sha224","_f","_g","_h","maj","sigma0","sigma1","gamma0","Sha384","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","writeInt64BE","Sha512","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","EE","_isStdio","didOnEnd","cleanup","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","utf8CheckExtraBytes","utf8CheckIncomplete","localStorage","trace","NOISE_MSG_MAX_LENGTH_BYTES","NOISE_MSG_MAX_LENGTH_BYTES_WITHOUT_TAG","DUMP_SESSION_KEYS","handshake","session","plaintext","valid","uint16BEEncode","uint16BEDecode","ciphertext","ns","FailedIKError","initialMsg","isInitiator","prologue","staticKeypair","remoteStaticKey","IK","initSession","remoteEarlyData","logLocalStaticKeys","hs","logRemoteStaticKey","logger","messageBuffer","sendMessage","writeLP","encode1","logLocalEphemeralKeys","receivedMsg","readLP","receivedMessageBuffer","decode1","recvMessage","decodedPayload","decodePayload","getPeerIdFromPayload","verifySignedPayload","setRemoteEarlyData","logRemoteEphemeralKey","decode0","encode0","logCipherState","cs","getCS","decryptWithAd","encryptWithAd","getLocalEphemeralKeys","encryption","cs1","cs2","XXFallbackHandshake","XXHandshake","ephemeralKeys","exchange","XX","encode2","decode2","getRemoteStaticKey","MIN_NONCE","MAX_NONCE","ERR_MAX_NONCE","ad","setNonce","incrementNonce","hasKey","isEmptyKey","createEmptyKey","emptyKey","nonceToBytes","setUint32","ChaCha20Poly1305","seal","encryptAndHash","ss","mixHash","encryptedMessage","open","decryptAndHash","derivedU8","x25519","sharedKey","mixKey","ikm","tempK","getHkdf","initializeKey","initializeSymmetric","protocolName","protocolNameBytes","hashProtocolName","tempk1","tempk2","writeMessageRegular","readMessageRegular","AbstractHandshake","initiator","psk","initializeInitiator","initializeResponder","writeMessageA","writeMessageB","readMessageA","pt","readMessageB","generateKeypair","spk","isValidPublicKey","valid1","valid2","writeMessageC","readMessageC","ephemeral","resultingBuffer","resultingPlaintext","resultingValid","KeyCache","storage","load","resetStorage","keyLogger","earlyData","useNoisePipes","generateKeyPairFromSeed","staticKeys","secretKey","localPeer","wrappedConnection","lengthEncoder","lengthDecoder","maxDataLength","performHandshake","conn","createSecureConnection","getPayload","tryIK","performXXHandshake","ikHandshake","IKHandshake","performIKHandshake","performXXFallbackHandshake","propose","stage0","stage1","secure","user","network","encryptStream","decryptStream","$protobuf","$Reader","$Writer","$util","$root","roots","NoiseHandshakePayload","properties","identityKey","newBuffer","identitySig","encodeDelimited","decodeDelimited","isString","defaults","toJSONOptions","NoiseHandshakePayloadProto","createHandshakePayload","libp2pPublicKey","signedPayload","payloadInit","signPayload","getHandshakePayload","generateKeyPair","staticPublicKey","earlyDataPayload","marshalPubKey","createFromPubKey","noiseStaticKey","publicKeyProtobuf","generatedPeerId","isValidPeerId","generatedPayload","okm","HKDF","pk","_permanentCensorErrors","_censorErrors","LogLevels","_logLevel","_globalLogger","_normalizeError","missing","_checkNormalize","LogLevel","ErrorCode","HEX","Logger","_log","logLevel","level","throwArgumentError","levels","DEBUG","INFO","WARNING","makeError","UNKNOWN_ERROR","messageDetails","throwError","INVALID_ARGUMENT","argument","condition","assertArgument","checkNormalize","UNSUPPORTED_OPERATION","operation","checkSafeUint53","NUMERIC_FAULT","fault","checkArgumentCount","expectedCount","MISSING_ARGUMENT","UNEXPECTED_ARGUMENT","checkNew","kind","MISSING_NEW","checkAbstract","censorship","permanent","globalLogger","isHexable","toHexString","addSlice","isBytesLike","isHexString","isBytes","arrayify","allowMissingPrefix","hexPad","HexCharacters","hexlify","arrayifyInteger","unarrayifyInteger","_decodeChildren","childOffset","consumed","BUFFER_OVERRUN","lengthLength","v4Regex","v6Regex","isFormat","buff","v6","hexN","decN","prevColon","useDec","sizeOf","freeze","familyOf","ALPHABET","BASE_MAP","BASE","LEADER","FACTOR","iFACTOR","decodeUnsafe","psz","zeroes","b256","it3","it4","vch","pbegin","pend","b58","it1","it2","__importDefault","__esModule","curve25519","getSharedSecret","ExtendedPoint","CURVE","crypto_1","_0n","_1n","_2n","_255n","Gx","Gy","SQRT_M1","SQRT_AD_MINUS_ONE","INVSQRT_A_MINUS_D","ONE_MINUS_D_SQ","D_MINUS_ONE_SQ","ZERO","toInv","nums","modulo","scratch","invert","invertBatch","toAffine","toAffineBatch","fromAffine","assertLen","ensureBytes","r1","bytes255ToNumberLE","R1","calcElligatorRistrettoMap","R2","r0","Ns","isValid","Ns_D_is_sq","uvRatio","edIsNegative","Nt","W0","W1","W2","W3","emsg","equalBytes","numberToBytesLEPadded","u1_2","u2_2","invertSqrt","Dx","Dy","toRistrettoBytes","invsqrt","D1","D2","zInv","_x","_y","X1","Y1","Z1","X3","Y3","T3","Z3","X2","Y2","Z2","subtract","multiplyUnsafe","scalar","normalizeScalar","P0","precomputeWindow","windows","wNAF","affinePoint","_WINDOW_SIZE","precomputes","pointPrecomputes","normalizeZ","windowSize","maxNumber","shiftBy","wbits","pr","cached","multiply","invZ","_setWindowSize","bytesToNumberLE","isXOdd","getExtendedPublicKey","toRawBytes","toX25519","fromHex","u8","concatBytes","arrays","every","hexes","padStart","uint8a","hexByte","numberToBytesBEPadded","_8n","pow2","pow_2_252_3","_5n","_10n","_20n","_40n","_80n","b10","b20","b40","b80","b160","b240","b250","pow_p_5_8","v3","v7","vx2","root1","root2","useRoot1","useRoot2","noRoot","sha512ModnLE","messageArray","isSafeInteger","decodeScalar25519","hashed","normalizePrivateKey","cswap","x_2","x_3","dummy","montgomeryLadderChecked","pu","pointU","x_1","sw","z_2","z_3","k_t","AA","BB","DA","CB","xp2","montgomeryLadder","encodeUCoordinate","SB","kA","BASE_POINT_U","scalarMult","uEnc","decodeUCoordinate","scalarMultBase","web","TORSION_SUBGROUP","bytesLength","randomPrivateKey","schnorr","signSync","recoverPublicKey","SignResult","_3n","POW_2_256","weistrass","USE_ENDOMORPHISM","JacobianPoint","az2","az3","bz2","bz3","Z1Z1","Z2Z2","U1","U2","S1","S2","HH","HHH","k1neg","k2neg","splitScalarEndo","k1p","k2p","fake","f1p","f2p","invZ2","isShort","bytesToNumber","_6n","_11n","_22n","_23n","_44n","_88n","b11","b22","b44","b88","b176","b220","b223","sqrtMod","assertValidity","fromCompressedHex","fromUncompressedHex","msgHash","hexToNumber","normalizeSignature","P_","pad64","sP","hG","isCompressed","toHexX","toRawX","sliceDer","parseByte","rLen","rEnd","rr","sLen","sStart","fromDER","isWithinCurveOrder","toDERRawBytes","toDERHex","sHex","numberToHex","rHex","toCompactRawBytes","toCompactHex","pad32b","divNearest","POW_2_128","_abc6979","h1","h1n","getQRSrfc6979","hmacSha256","qrs","calcQRSFromK","getQRSrfc6979Sync","hmacSha256Sync","normalizePublicKey","isPub","QRSToSig","recovered","adjustedS","HIGH_NUMBER","taggedHash","tagB","tagH","createChallenge","hasEvenY","fromPrivateKey","fromSignature","privateA","publicB","truncateHash","Ghs1","Prs1","SchnorrSignature","schnorrVerify","sG","eP","auxRand","d0","t0h","k0h","k0","isValidPrivateKey","b32","ckey","sha256Sync","s64","invalidEncoding","evt","factory","Float32Array","f32","f8b","writeFloat_f32_cpy","writeFloat_f32_rev","readFloat_f32_cpy","readFloat_f32_rev","writeFloat_ieee754","writeUint","exponent","readFloat_ieee754","readUint","mantissa","Float64Array","f64","writeDouble_f64_cpy","writeDouble_f64_rev","readDouble_f64_cpy","readDouble_f64_rev","writeDouble_ieee754","off0","off1","readDouble_ieee754","inquire","moduleName","eval","SIZE","MAX","slab","writeUint64BE","writeUint64LE","writeInt64LE","getFloat32","getFloat64","setFloat32","setFloat64","core","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x3","x5","x6","x7","x9","x10","x11","x12","x13","x14","x15","streamXOR","nonceInplaceCounterLength","counterLength","incrementCounter","wipe","counter","KEY_LENGTH","NONCE_LENGTH","TAG_LENGTH","nonceLength","tagLength","associatedData","authKey","resultLength","_authenticate","sealed","calculatedTag","clean","tagOut","Poly1305","subject","resultIfOne","resultIfZero","saveState","restoreState","cleanSavedState","_counter","_info","HMAC","digestLength","_bufpos","_fillBuffer","ctr","reset","_finished","_inner","_outer","isSerializableHash","_innerKeyedState","_outerKeyedState","savedState","DIGEST_LENGTH","_r","Uint16Array","_leftover","_fin","t4","t5","t6","t7","_blocks","mpos","hibit","h0","h4","h5","h6","h7","h8","h9","r3","r4","r5","r6","r7","r8","r9","d3","d4","d5","d6","d7","d8","d9","mac","macpos","want","defaultRandomSource","SystemRandomSource","ALPHANUMERIC","randomString","charset","charsLen","maxByte","randomByte","isAvailable","isInstantiated","browserCrypto","_crypto","BrowserRandomSource","nodeCrypto","NodeRandomSource","BLOCK_SIZE","_state","Int32Array","_temp","_bufferLength","_bytesHashed","_initState","dataLength","dataPos","hashBlocks","bytesHashed","bitLenHi","bitLenLo","bufferLength","PUBLIC_KEY_LENGTH","SECRET_KEY_LENGTH","SHARED_KEY_LENGTH","_9","_121665","car25519","sel25519","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b12","b13","b14","b15","square","unpack25519","x32","x16","inv25519","pack25519","mySecretKey","theirPublicKey","rejectZero","exp","timespan","previousTime","movingAverage","variance","deviation","forecast","AbortController","AbortSignal","getIterator","AbortError","toAbortableSource","signal","toMultiAbortableSource","signals","nextAbortHandler","abortHandler","aborted","abortMessage","abortCode","race","aborter","isKnownAborter","onAbort","returnOnAbort","abortable","toAbortableSink","toMultiAbortableSink","toMultiAbortableDuplex","duplex","indentString","cleanStack","AggregateError","_errors","_typeof","isDeepEqual","isDeepStrictEqual","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","AssertionError","_require$types","isPromise","isRegExp","objectAssign","objectIs","lazyLoadComparison","comparison","NO_EXCEPTION_SENTINEL","innerFail","innerOk","argLen","generatedMessage","operator","stackStartFn","internalMessage","argsLen","emitWarning","errArgs","notEqual","deepEqual","notDeepEqual","deepStrictEqual","notDeepStrictEqual","strictEqual","notStrictEqual","Comparison","compareExceptionKey","expectedException","isPrototypeOf","getActual","checkIsPromise","waitForActual","promiseFn","resultPromise","expectsError","details","fnType","expectsNoError","strict","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","tmp1","_possibleConstructorReturn","_assertThisInitialized","ReferenceError","_wrapNativeSuper","Class","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","isNativeReflectConstruct","sham","Proxy","Parent","blue","green","white","kReadableOperator","strictEqualObject","notStrictEqualObject","notIdentical","copyError","inspectValue","maxArrayLength","showHidden","breakLength","showProxy","sorted","getters","createErrDiff","lastPos","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","isTTY","maxCount","maxLines","_actualLines","printedLines","skippedMsg","expectedLine","actualLine","divergingLines","_Error","stackTraceLimit","getColorDepth","_res","knownOperators","_inherits","recurseTimes","inspected","_slicedToArray","_arrayWithHoles","_n","_s","_i","_iterableToArrayLimit","_nonIterableRest","regexFlagsSupported","arrayFromSet","arrayFromMap","objectGetOwnPropertySymbols","uncurryThis","objectToString","isAnyArrayBuffer","isArrayBufferView","isDate","isMap","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","innerDeepEqual","val1","val2","memos","buf1","buf2","val1Tag","keys1","keys2","keyCheck","RegExp","areSimilarTypedArrays","areSimilarFloatArrays","_keys","_keys2","isEqualBoxedPrimitive","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","objEquiv","setHasEqualElement","setValues","findLooseMatchingPrimitives","prim","setMightHaveLoosePrim","altValue","mapMightHaveLoosePrim","curB","mapHasEqualEntry","key1","item1","key2","aValues","bValues","_val","setEquiv","aEntries","_aEntries$i","item2","bEntries","_i2","_bEntries$_i","mapEquiv","keysA","globalObject","BigNumber","isNumeric","mathceil","mathfloor","bignumberError","tooManyDigits","LOG_BASE","POWS_TEN","SQRT_BASE","bitFloor","coeffToString","intCheck","toExponential","toFixedPoint","configObject","convertBase","parseNumeric","DECIMAL_PLACES","ROUNDING_MODE","TO_EXP_NEG","TO_EXP_POS","MIN_EXP","MAX_EXP","CRYPTO","MODULO_MODE","POW_PRECISION","FORMAT","secondaryGroupSize","groupSeparator","decimalSeparator","fractionGroupSize","fractionGroupSeparator","suffix","caseChanged","isNum","_isBigNumber","rm","c0","maxOrMin","normalise","pows10","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","EXPONENTIAL_AT","RANGE","isBigNumber","maximum","minimum","pow2_53","random53bitInt","dp","Uint32Array","sum","plus","decimal","toBaseOut","baseIn","baseOut","arrL","callerIsToString","xlo","xhi","klo","khi","aL","bL","more","prod","prodL","remL","rem0","xL","yc0","yL","yz","basePrefix","dotAfter","dotBefore","isInfinityOrNaN","whitespaceOrPlus","absoluteValue","comparedTo","decimalPlaces","dividedBy","dividedToIntegerBy","idiv","exponentiatedBy","isModExp","nIsBig","nIsNeg","nIsOdd","times","integerValue","isEqualTo","isGreaterThan","isGreaterThanOrEqualTo","isLessThan","isLessThanOrEqualTo","isNegative","isPositive","minus","xLTy","multipliedBy","xcL","ycL","ylo","yhi","sqrtBase","negated","precision","shiftedBy","squareRoot","rep","toFixed","toFormat","g1","g2","intPart","fractionPart","intDigits","toFraction","n0","toPrecision","_bufs","append","_new","_offset","tot","_t","_reverseOffset","blOffset","bufferId","dstStart","srcStart","srcEnd","bufoff","shallowSlice","startOffset","endOffset","buffers","trunc","duplicate","_appendBuffer","_isBufferList","blIndex","buffOffset","nativeSearchResult","revOffset","_match","searchOffset","isBufferList","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","desc","applyBind","className","symbolName","ClassIsWrapper","withoutNew","os","extractPathRegex","pathRegex","homeDir","homedir","pretty","line","pathMatches","formatArgs","useColors","namespace","humanize","lastC","namespaces","setItem","removeItem","getItem","__nwjs","navigator","userAgent","WebkitAppearance","firebug","exception","$1","localstorage","colors","formatters","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","curr","ms","coerce","formatter","logFn","selectColor","delimiter","newDebug","toNamespace","regexp","disable","skips","enable","hasSymbols","toStr","origDefineProperty","supportsDescriptors","arePropertyDescriptorsSupported","predicate","predicates","Denque","_head","_tail","_capacity","capacity","_capacityMask","_list","_fromArray","peekAt","peek","peekFront","peekBack","_growArray","_shrinkArray","removeOne","remove","removed","del_count","arg_len","arguments_index","leng","_copyArray","fullCopy","newArray","Receptacle","Resolver","maxCache","_servers","getServers","_getShuffledServers","newServers","setServers","servers","hostname","rrType","resolve4","resolve6","resolveTxt","recordType","getCacheKey","server","fetch","buildResource","serverResolver","json","Answer","ttl","TTL","nativeFetch","Headers","resource","headers","accept","klass","toClass","types","rcodes","opcodes","classes","optioncodes","FLUSH_MASK","oldOffset","consumedBytes","jumped","jumpOffset","authorities","additionals","flag_qr","opcode","flag_aa","flag_tc","flag_rd","flag_ra","flag_z","flag_ad","flag_cd","rcode","runknown","unknown","rns","rsoa","soa","mname","rname","serial","refresh","retry","expire","rtxt","rnull","rhinfo","hinfo","cpu","rptr","ptr","rcname","cname","rdname","dname","rsrv","srv","weight","rcaa","caa","ISSUER_CRITICAL","issuerCritical","rmx","mx","preference","host","raaaa","aaaa","roption","option","toCode","spl","sourcePrefixLength","fam","family","ipBuf","ipLen","scopePrefixLength","tagsLen","ropt","opt","rdlen","encodingLengthList","encodeList","rdnskey","dnskey","PROTOCOL_DNSSEC","ZONE_KEY","SECURE_ENTRYPOINT","keydata","rrrsig","rrsig","toType","typeCovered","labels","originalTTL","expiration","inception","keyTag","signersName","rrp","rp","mbox","typebitmap","typelist","typesByWindow","typeid","windowBuf","windowLength","extents","rnsec","nsec","record","nextDomain","rrtypes","rnsec3","nsec3","saltLength","hashLength","rds","ds","digestdata","digestType","renc","answer","udpPayloadSize","extendedRcode","ednsVersion","class","flag_do","question","decodeList","AUTHORITATIVE_ANSWER","TRUNCATED_RESPONSE","RECURSION_DESIRED","RECURSION_AVAILABLE","AUTHENTIC_DATA","CHECKING_DISABLED","DNSSEC_OK","allocing","streamEncode","sbuf","combine","streamDecode","toOpcode","toRcode","inherit","HTTPStatusError","uri","ResponseError","cause","TimeoutError","Endpoint","rawEndpoints","packet","lib","queryOne","endpoint","abortSignal","queryDns","queryDoh","retries","doh","parseEndpoints","queryN","parseEndpoint","exec","ipv6Parts","ipv4Parts","portParts","contentType","logging","cors","xhr","XMLHttpRequest","setRequestHeader","responseType","ontimeout","onreadystatechange","readyState","onabort","__createBinding","__exportStar","__awaiter","thisArg","_arguments","fulfilled","rejected","__generator","sent","trys","ops","verb","op","kdf","outputLength","written","willBeResult","_loop_1","ctrs","willBeHashResult","hashResult","privateKeyA","publicKeyB","keyA","keyB","Px","publicKeyTo","ephemPrivateKey","sharedPx","encryptionKey","ivCipherText","macKey","hmacSha256Sign","ephemPublicKey","encrypted","cipherTextLength","iv_1","cipherAndIv_1","ciphertext_1","msgMac_1","px","hmacSha256Verify","isHmacGood","KeyPath","Path","account","scope","keyIndex","increment","actualIncrement","newValue","ErrClass","firstSource","nextSource","keysArray","nextIndex","nextKey","polyfill","promisify","argumentNames","event_iterator_1","EventIterator","evOptions","EventQueue","pullQueue","pushQueue","eventHandlers","isStopped","resolution","placeholder","highWater","rejection","removeCallback","lowWaterMark","lowWater","listen","clearEvent","handlers","prefixed","btm","FixedFIFO","hasOwn","ERROR_MESSAGE","funcType","bound","binder","boundLength","boundArgs","Empty","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","getProto","needsEval","TypedArray","INTRINSICS","Atomics","decodeURI","decodeURIComponent","encodeURI","EvalError","FinalizationRegistry","Int8Array","Int16Array","parseFloat","Uint8ClampedArray","URIError","WeakRef","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","rePropName","reEscapeChar","stringToPath","quote","subString","getBaseIntrinsic","alias","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","part","origSymbol","hasSymbolSham","symObj","syms","HI_BASE32_NO_NODE_JS","COMMON_JS","HI_BASE32_NO_COMMON_JS","AMD","BASE32_ENCODE_CHAR","BASE32_DECODE_CHAR","blocks","throwInvalidUtf8","decodeAsBytes","base32Str","v5","v8","remain","asciiOnly","followingChars","toUtf8String","notString","encodeBytes","encodeAscii","encodeUtf8","indent","includeEmptyLines","regex","Address6","spanLeadingZeroes","possibilities","not_string","not_bool","not_type","not_primitive","numeric_arg","not_json","key_access","index_access","sprintf","sprintf_format","sprintf_parse","vsprintf","fmt","parse_tree","pad_character","pad_length","is_positive","tree_length","param_no","pad_char","align","sprintf_cache","_fmt","arg_names","field_list","replacement_field","field_match","includeBoundaries","v6seg","v46Exact","v4exact","v6exact","isElectron","IS_ENV_WITH_DOM","IS_ELECTRON","IS_BROWSER","IS_ELECTRON_MAIN","IS_ELECTRON_RENDERER","IS_NODE","release","IS_WEBWORKER","importScripts","WorkerGlobalScope","IS_TEST","IS_REACT_NATIVE","product","isTest","isElectronMain","isElectronRenderer","isNode","isBrowser","isWebWorker","isEnvWithDom","isReactNative","hasToStringTag","$toString","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","electron","GeneratorFunction","fnToStr","isFnRegex","generatorFunc","getGeneratorFunc","ipRegex","isIp","getPolyfill","availableTypedArrays","typedArrays","$slice","toStrTags","gOPD","typedArray","anyTrue","getter","tryTypedArrays","URLWithLegacySupport","URLSearchParams","defaultBase","URL","urlParsed","protocolMap","defaultProtocol","pathname","auth","username","origin","searchParams","createObjectURL","revokeObjectURL","userPass","toList","TypeDefault","defer","sourcePromise","sinkErr","sinkPromise","rest","varintDecode","MAX_DATA_LENGTH","ReadModes","ReadHandlers","maxLengthLength","onLength","onData","nextChunk","fromReader","varByteSource","MAX_LENGTH_LENGTH","varintEncode","minPoolSize","encodeLength","pool","poolOffset","encodedLength","single","MIN_POOL_SIZE","DEFAULT_POOL_SIZE","int32BEEncode","int32BEDecode","Varint","pushable","sources","Pair","onSource","Shake","lp","shake","lpReader","isDone","readPB","writePB","rawPipe","fns","isIterable","duplexPipelineFn","FIFO","onEnd","onNext","bufferNext","bufferError","throw","_pushable","sorter","items","WebSocket","wsurl","socket","websocket","remoteAddress","close","terminate","connect","binaryType","binary","connected","handleOpen","handleErr","ready","closeOnEnd","wasClean","connError","cleanUp","cont","onOpen","http","https","INPUT_ERROR","WINDOW","JS_SHA3_NO_WINDOW","WEB_WORKER","JS_SHA3_NO_NODE_JS","JS_SHA3_NO_COMMON_JS","ARRAY_BUFFER","JS_SHA3_NO_ARRAY_BUFFER","HEX_CHARS","CSHAKE_PADDING","SHIFT","RC","BITS","SHAKE_BITS","OUTPUT_TYPES","CSHAKE_BYTEPAD","JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW","createOutputMethod","outputType","Keccak","createShakeOutputMethod","outputBits","createCshakeOutputMethod","createKmacOutputMethod","createOutputMethods","createMethod","bytepad","Kmac","methodNames","methodName","newMethodName","finalized","blockCount","byteCount","outputBlocks","lastByteIndex","encodeString","strs","paddingBytes","finalize","c3","c4","c5","c6","c7","c9","b16","b17","b18","b19","b21","b23","b24","b25","b26","b27","b28","b29","b30","b31","b33","b34","b35","b36","b37","b38","b39","b41","b42","b43","b45","b46","b47","b48","b49","dbits","BigInteger","fromNumber","nbi","inBrowser","appName","am","DB","DM","DV","FV","F1","F2","vv","BI_RC","int2char","intAt","nbv","fromInt","nbits","Classic","Montgomery","mp","invDigit","mpl","mph","um","mt2","op_and","op_or","op_xor","op_andnot","lbit","cbit","NullExp","nNop","Barrett","q3","dlShiftTo","mu","divide","convert","compareTo","revert","divRemTo","multiplyTo","sqrTo","squareTo","subTo","copyTo","u0","clamp","drShiftTo","fromRadix","lShiftTo","bs","cbs","bm","rShiftTo","pm","nsh","ys","y0","yt","toRadix","km","modPowInt","multiplyUpperTo","multiplyLowerTo","dAddOffset","rng_state","rng_pool","rng_pptr","lowprimes","lplim","rng_seed_time","rng_psize","chunkSize","signum","intValue","dMultiply","testBit","bitwiseTo","shiftLeft","isProbablePrime","nextBytes","changeBit","addTo","modInt","getLowestSetBit","shiftRight","modPow","byteValue","shortValue","andNot","not","bitCount","setBit","clearBit","flipBit","divideAndRemainder","is1","modInverse","appVersion","rng_get_byte","Arcfour","SecureRandom","PeerId","mafmt","_interval","interval","_timer","_discoverBootstrapPeers","candidate","P2P","errcode","CIPHER_MODES","forge","uint8ArrayToString","uint8ArrayFromString","cipher2","cipherMode","webcrypto","keyLength","aesGcm","deriveParams","rawKey","deriveKey","lengths","hashTypes","base64urlToBuffer","validateCurveType","uint8ArrayConcat","uint8ArrayEquals","generateEphmeralKeyPair","pair","generateKey","marshalPublicKey","exportKey","genSharedKey","theirPub","forcePrivate","unmarshalPrivateKey","unmarshalPublicKey","public","curveLengths","jwk","byteLen","crv","kty","private","base58btc","identity","pbm","exporter","Ed25519PublicKey","ensureKey","publicKeyLength","hashAndVerify","KeyType","Ed25519","Ed25519PrivateKey","privateKeyLength","hashAndSign","export","unmarshalEd25519PrivateKey","privateKeyBytes","publicKeyBytes","unmarshalEd25519PublicKey","generateKeyFromSeed","concatKeys","privateKeyRaw","ecdh","encryptedKey","import","importer","rsa","ErrMissingSecp256K1","typeToKey","supported","RSA","unmarshalRsaPrivateKey","Secp256k1","unmarshalSecp256k1PrivateKey","keyStretcher","generateEphemeralKeyPair","unmarshalRsaPublicKey","unmarshalSecp256k1PublicKey","marshalPrivateKey","pki","decryptRsaPrivateKey","toDer","privateKeyToAsn1","base64urlToBigInteger","jwk2pub","setRsaPublicKey","jwk2priv","setRsaPrivateKey","cipherMap","ivSize","Blowfish","cipherKeySize","cipherType","allowed","todo","resultBuffer","createKey","valuesById","ks","ProtocolError","enums","modulusLength","jwKey","convertKey","handle","fkey","fomsg","RsaPublicKey","jwkToPkix","RsaPrivateKey","genSecret","jwkToPkcs1","ByteBuffer","fromDer","privateKeyFromAsn1","saltSize","prfAlgorithm","encryptRsaPrivateKey","pkixToJwk","pkcs1ToJwk","fromJwk","bigIntegerToUintBase64url","dP","dq","dQ","qInv","kid","publicKeyFromAsn1","publicKeyToAsn1","keysProtobuf","validatePublicKey","compressPublicKey","computePublicKey","validatePrivateKey","secp","decompressPublicKey","curveTypes","forgePbkdf2","forgeUtil","hashName","hasher","dek","encode64","jsbn","win","nativeCrypto","ACCEPT_FROM_WHITELIST_DURATION_MS","ACCEPT_FROM_WHITELIST_MAX_MESSAGES","ACCEPT_FROM_WHITELIST_THRESHOLD_SCORE","ERR_TOPIC_VALIDATOR_IGNORE","ERR_TOPIC_VALIDATOR_REJECT","TimeCacheDuration","GossipsubSeenTTL","GossipsubIWantFollowupTime","GossipsubMaxIHaveMessages","GossipsubMaxIHaveLength","GossipsubGraftFloodThreshold","GossipsubOpportunisticGraftPeers","GossipsubOpportunisticGraftTicks","GossipsubDirectConnectInitialDelay","GossipsubDirectConnectTicks","GossipsubConnectionTimeout","GossipsubMaxPendingConnections","GossipsubConnectors","GossipsubPruneBackoffTicks","GossipsubPruneBackoff","GossipsubPrunePeers","GossipsubFanoutTTL","GossipsubHeartbeatInterval","GossipsubHeartbeatInitialDelay","GossipsubGossipRetransmission","GossipsubGossipFactor","GossipsubDlazy","GossipsubHistoryGossip","GossipsubHistoryLength","GossipsubDout","GossipsubDscore","GossipsubDhi","GossipsubDlo","GossipsubD","GossipsubIDv11","GossipsubIDv10","FloodsubID","getGossipPeers","utils_1","hasGossipProtocol","__setModuleDefault","__importStar","get_gossip_peers_1","heartbeatInterval","fanoutTTL","tograft","toprune","lastpb","pubsub_1","message_cache_1","rpc_1","heartbeat_1","score_1","tracer_1","time_cache_1","Envelope","constants_1","Gossipsub","gossipIncoming","fallbackToFloodsub","floodPublish","directPeers","mcacheLength","mcacheGossip","seenTTL","scoreParams","createPeerScoreParams","createPeerScoreThresholds","debugName","acceptFromWhitelist","addrs","SimpleTimeCache","validityMs","gossip","control","MessageCache","getFastMsgIdStr","fastMsgIdFn","fastMsgIdCache","IWantTracer","PeerScore","_decodeRpc","RPC","_encodeRpc","_addPeer","addPeer","getAll","stat","registry","rvalue","_removePeer","removePeer","_processRpc","_super","_processRpcControlMessage","controlMsg","iwant","_handleIHave","_handleIWant","_handleGraft","_handlePrune","outRpc","_processRpcMessage","canonicalMsgIdStr","fastMsgIdStr","duplicateMessage","messageIdToString","getMsgId","validateMessage","_acceptFrom","messagesAccepted","acceptUntil","graylistThreshold","rejectMessage","msgId","iask","iwantList","addPromise","getForPeer","peersInMesh","addPenalty","floodCutoff","_makePrune","_doAddBackoff","acceptPXThreshold","_pxConnect","getBrokenPromises","toconnect","isWritable","_connect","createFromBytes","openAndCertify","eid","consumePeerRecord","_directPeerInitial","unsubscribe","leave","_sendPrune","getCachedMsgIdStr","_publish","tosend","ctrl","_piggybackControl","_piggybackGossip","pruning","controlIHaveMsgs","multicodec","history","msgs","peertx","messageIdFromString","msgIds","subscriptions","$oneOfFields","emptyArray","oneOfGetter","oneOfSetter","SubOpts","Message","ControlMessage","oneofs","_control","_subscribe","_topicID","seqno","_from","_data","_seqno","ControlIHave","ControlIWant","ControlGraft","ControlPrune","PeerInfo","fromValue","unsigned","LongBits","low","high","longs","_backoff","_peerID","_signedPeerRecord","computeScore","pstats","peerIPs","tstats","topicParams","topicScore","inMesh","meshTime","timeInMeshQuantum","timeInMeshCap","timeInMeshWeight","firstMessageDeliveries","firstMessageDeliveriesWeight","meshMessageDeliveriesActive","meshMessageDeliveries","meshMessageDeliveriesThreshold","deficit","meshMessageDeliveriesWeight","meshFailurePenalty","meshFailurePenaltyWeight","invalidMessageDeliveries","invalidMessageDeliveriesWeight","topicWeight","topicScoreCap","p5","appSpecificScore","appSpecificWeight","ips","IPColocationFactorWhitelist","peersInIP","numPeersInIP","IPColocationFactorThreshold","surplus","IPColocationFactorWeight","p7","behaviourPenalty","behaviourPenaltyWeight","ERR_INVALID_PEER_SCORE_THRESHOLDS","ERR_INVALID_PEER_SCORE_PARAMS","MessageDeliveries","DeliveryRecordStatus","denque_1","records","ensureRecord","drec","firstSeen","validated","validateTopicScoreParams","validatePeerScoreParams","createTopicScoreParams","defaultTopicScoreParams","defaultPeerScoreParams","firstMessageDeliveriesDecay","firstMessageDeliveriesCap","meshMessageDeliveriesDecay","meshMessageDeliveriesCap","meshMessageDeliveriesWindow","meshMessageDeliveriesActivation","meshFailurePenaltyDecay","invalidMessageDeliveriesDecay","behaviourPenaltyDecay","decayInterval","decayToZero","retainScore","topicScoreParams","validatePeerScoreThresholds","defaultPeerScoreThresholds","peer_score_params_1","peer_stats_1","compute_score_1","message_deliveries_1","peer_id_1","pubsubErrors","ERR_INVALID_SIGNATURE","ERR_MISSING_SIGNATURE","_connectionManager","peerStats","scoreCache","deliveryRecords","_backgroundInterval","background","_refreshScores","_updateIPs","tparams","graftTime","cacheUntil","_removeIPs","cacheEntry","penalty","createPeerStats","_getIPs","_setIPs","threshold","ensureTopicStats","_markFirstMessageDelivery","_markDuplicateMessageDelivery","_markInvalidMessageDelivery","invalid","ignored","cap","validatedTime","toOptions","newIPs","oldIPs","addNewIPs","xip","removeOldIPs","createTopicStats","topicStats","from_string_1","to_string_1","lastPruneTime","validUntilMs","errCode","OPEN","CLOSING","CLOSED","connectionSymbol","Connection","localAddr","getStreams","isMultiaddr","isPeerId","timeline","upgraded","validateArgs","_stat","_newStream","_close","_getStreams","addStream","muxedStream","metadata","removeStream","_closing","ERR_INVALID_SIGNATURE_POLICY","ERR_UNHANDLED_SIGNATURE_POLICY","ERR_MISSING_SEQNO","ERR_UNEXPECTED_FROM","ERR_UNEXPECTED_SIGNATURE","ERR_UNEXPECTED_KEY","ERR_UNEXPECTED_SEQNO","Queue","MulticodecTopology","PeerStreams","signMessage","verifySignature","PubsubBaseProtocol","StrictSign","canRelayMessage","emitSelf","messageProcessingConcurrency","ensureArray","registrar","topicValidators","concurrency","_registrarId","_onIncomingStream","_onPeerConnected","_onPeerDisconnected","topology","onConnect","onDisconnect","register","unregister","idB58Str","inboundStream","attachInboundStream","_processMessages","attachOutboundStream","_sendSubscriptions","rpcBytes","rpcMsg","subs","subOpt","_processRpcSubOpt","addAll","normalizeInRpcMessage","topicSet","_emitMessage","signaturePolicy","noSignMsgId","validatorFn","_buildMessage","randomSeqno","getSubscribers","msgObject","outMsg","getTopics","SignPrefix","messagePublicKey","keyPeerId","_rawOutboundStream","_rawInboundStream","_inboundAbortController","outboundStream","isReadable","_prevStream","shouldEmit","anyMatch","bHas","maybeArray","topologySymbol","Topology","_onConnect","_onDisconnect","_registrar","disconnect","multicodecTopologySymbol","_onProtocolChange","_onPeerConnect","_updatePeers","peerDataIterable","getConnection","hadPeer","hasProtocol","peerData","protoBook","varint","Decoder","_bufferProxy","_headerInfo","_decodeHeader","POOL_SIZE","encoder","_pool","_poolOffset","MessageTypes","NEW_STREAM","MESSAGE_RECEIVER","MESSAGE_INITIATOR","CLOSE_RECEIVER","CLOSE_INITIATOR","RESET_RECEIVER","RESET_INITIATOR","InitiatorMessageTypes","MESSAGE","CLOSE","RESET","ReceiverMessageTypes","MessageTypeNames","Coder","restrictSize","createStream","Mplex","onStream","_streamId","_streams","initiators","receivers","_createSink","_createSource","onStreamEnd","_newReceiverStream","maxMsgSize","_handleIncoming","MAX_MSG_SIZE","checkSize","ERR_MPLEX_STREAM_RESET","abortController","resetController","Types","externalId","endErr","sourceEnded","sinkEnded","onSinkEnd","isPrivate","addressesPublicFirstCompareFunction","isAPrivate","isBPrivate","isCertified","publicAddressesFirst","Address4","ERR_INVALID_IP_PARAMETER","ERR_INVALID_PORT_PARAMETER","ERR_INVALID_IP","is4","to4","correctForm","errMsg","Errors","isLoopbackAddr","address","nodeAddress","isIpPrivate","maConn","CODE_P2P","CODE_CIRCUIT","CODE_TCP","CODE_WS","CODE_WSS","CLOSE_TIMEOUT","protoCodes","testMa","decapsulateCode","WebSockets","WebSocketsSecure","dnsWss","DNS","dnsWsOrWss","withIs","toUri","pDefer","createListener","toConnection","filters","upgrader","_upgrader","_filter","upgradeOutbound","cOpts","errorPromise","errfn","rawSocket","toMultiaddr","pTimeout","localAddress","localPort","remotePort","anySignal","controller","_batch","dataBatch","_syncBatch","batch","curriedIterable","resolveFunc","rejectFunc","resultQueue","readQueue","fulfillReadQueue","readDeferred","fillQueue","deferred","asyncIterableIterator","syncBuffer","valueQueue","_collect","collect","_concat","iterables","_syncConcat","itr","_consume","filterFunc","flatten","maybeItr","_map","flatMap","_flatTransform","inflightCount","lastError","mapAndQueue","itrValue","asyncVal","flatTransform","curriedFunc","onceReadable","_fromStream","fromStream","merge","nextVal","firstFn","previousFn","_parallelMap","transformError","wrapFunc","stopOnError","parallelMap","parallelFlatMap","parallelMerge","inputs","concurrentWork","errCb","valueCb","notifyError","notifyDone","waitForQueue","queueNext","_reduce","nextItem","curriedStart","_take","taken","_syncTake","take","_asyncTap","tap","addTime","seconds","nanoseconds","_asyncTime","hrtime","progress","_syncTime","_writeToStream","drainCb","notifyDrain","waitForDrain","writeToStream","announce","observed","getListenAddrs","getAnnounceAddrs","getObservedAddrs","addObservedAddr","decapsulate","addrString","canHop","namespaceToCid","CIRCUIT_PROTO_CODE","HOP_METADATA_KEY","HOP_METADATA_VALUE","RELAY_RENDEZVOUS_NS","maxListeners","_peerId","_peerStore","_transportManager","transportManager","_addressSorter","dialer","addressSorter","_listenRelays","_onError","metadataBook","_addListenRelay","_removeListenRelay","remoteAddrs","getMultiaddrsForPeer","_listenOnAvailableHopRelays","peersToIgnore","knownHopsToDial","idStr","supportsHop","_tryToListenOnRelay","cid","provider","contentRouting","findProviders","dial","validateAddrs","StreamHandler","CircuitRelay","CircuitPB","handleHop","streamHandler","circuit","hop","STATUS","Status","HOP_CANT_SPEAK_RELAY","dstPeer","destinationPeer","destinationConnection","active","HOP_NO_CONN_TO_DST","stopRequest","STOP","srcPeer","destinationStream","SUCCESS","sourceStream","ERR_HOP_REQUEST_FAILED","CAN_HOP","handleCanHop","handleStop","maxLength","writeResponse","HOP","HOP_DST_MULTIADDR_INVALID","STOP_DST_MULTIADDR_INVALID","HOP_SRC_MULTIADDR_INVALID","STOP_SRC_MULTIADDR_INVALID","ADVERTISE_BOOT_DELAY","ADVERTISE_TTL","setDelayedInterval","clearDelayedInterval","AutoRelay","_config","_autoRelay","autoRelay","_advertiseService","advertise","_timeout","bootDelay","provide","ERR_NO_ROUTERS_AVAILABLE","listeningAddrs","relayConn","relayedAddr","getAddrs","Peer","transportSymbol","Circuit","_dialer","_onProtocol","virtualConnection","upgradeInbound","relayAddr","destinationAddr","relayId","destinationId","ERR_RELAYED_DIAL","relayPeer","disconnectOnFailure","relayConnection","connectToPeer","CID","TextEncoder","createV0","mergeOptions","dnsaddrResolver","Constants","AGENT_VERSION","RelayConstants","FaultTolerance","DefaultConfig","noAnnounce","announceFilter","minConnections","connectionGater","faultTolerance","FATAL_ALL","maxParallelDials","MAX_PARALLEL_DIALS","maxDialsPerPeer","MAX_PER_PEER_DIALS","dialTimeout","DIAL_TIMEOUT","resolvers","dnsaddr","agentVersion","metrics","persistence","peerRouting","refreshManager","protocolPrefix","dht","kBucketSize","nat","keepAlive","gateway","externalIp","pmp","autoDial","resultingOptions","retimer","defaultOptions","autoDialInterval","ignoreUndefined","_running","_autoDialTimeout","_autoDial","connections","LatencyMonitor","trackedMap","ERR_INVALID_PARAMETERS","maxConnections","maxData","maxSentData","maxReceivedData","maxEventLoopDelay","pollInterval","movingAverageInterval","defaultPeerValue","METRICS_COMPONENT","_peerValues","metric","_started","_checkMetrics","_latencyMonitor","latencyCheckIntervalMs","dataEmitIntervalMs","accumulator","_onLatencyMeasure","tasks","connectionList","setPeerValue","movingAverages","dataReceived","_checkMaxLimit","dataSent","storedConn","keyBook","onPeerDisconnected","summary","avgMs","_maybeDisconnectOne","peerValues","disconnectPeer","VisibilityChangeEmitter","asyncTestFn","latencyRandomPercentage","_latecyCheckMultiply","_latecyCheckSubtract","getDeltaMS","_latencyData","_initLatencyData","_visibilityChangeEmitter","pageInFocus","_startTimers","_emitSummary","_stopTimers","isVisible","_checkLatencyID","_checkLatency","_emitIntervalID","unref","getSummary","latency","minMs","maxMs","totalMs","POSITIVE_INFINITY","lengthMs","randomness","localData","deltaOffset","deltaMS","NEGATIVE_INFINITY","_initializeVisibilityVarNames","_addVisibilityChangeListener","hidden","visibilityChange","mozHidden","msHidden","webkitHidden","_hidden","_visibilityChange","_handleVisibilityChange","visible","MAX_ADDRS_TO_DIAL","METRICS","computeThrottleMaxQueueSize","computeThrottleTimeout","movingAverageIntervals","maxOldPeersRetention","storeAddresses","uniquePeers","requirePeers","maybeLimitSource","drain","DHTContentRouting","routers","_modules","_dht","maxNumProviders","isStarted","NOT_STARTED_YET","DHT_NOT_STARTED","NOT_FOUND","ERR_NOT_FOUND","nVals","gotValues","seen","providers","DHTPeerRouting","findPeer","getClosestPeers","closer","pAny","dialAction","tokens","getTokens","ERR_NO_DIAL_TOKENS","tokenHolder","token","dialAbortControllers","completedDials","releaseToken","TimeoutController","DialRequest","getPeer","maxAddrsToDial","_pendingDials","_pendingDialTargets","pendingTarget","denyDialPeer","ERR_PEER_DIAL_INTERCEPTED","dialTarget","_createCancellableDialTarget","ERR_NO_VALID_ADDRESSES","pendingDial","_createPendingDial","ERR_TIMEOUT","cancellablePromise","_createDialTarget","knownAddrs","denyDialMultiaddr","_resolve","supportedAddrs","transportForMultiaddr","ERR_TOO_MANY_ADDRESSES","dialRequest","ERR_ALREADY_ABORTED","timeoutController","resolvedMultiaddrs","_resolveRecord","nm","newM","DHT_DISABLED","CONN_ENCRYPTION_REQUIRED","PUBSUB_NOT_STARTED","ERR_CONNECTION_INTERCEPTED","ERR_INVALID_PROTOCOLS_FOR_STREAM","ERR_CONNECTION_ENDED","ERR_CONNECTION_FAILED","ERR_NODE_NOT_STARTED","ERR_DIALED_SELF","ERR_DISCOVERED_SELF","ERR_DUPLICATE_TRANSPORT","ERR_ENCRYPTION_FAILED","ERR_INVALID_KEY","ERR_INVALID_MESSAGE","ERR_INVALID_PEER","ERR_MUXER_UNAVAILABLE","ERR_TRANSPORT_UNAVAILABLE","ERR_TRANSPORT_DIAL_FAILED","ERR_UNSUPPORTED_PROTOCOL","ERR_INVALID_MULTIADDR","ERR_SIGNATURE_NOT_VALID","ERR_FIND_SELF","ERR_CONNECTION_NOT_MULTIPLEXED","ERR_KEYCHAIN_REQUIRED","ERR_INVALID_CMS","ERR_MISSING_KEYS","ERR_NO_KEY","ERR_INVALID_KEY_NAME","ERR_INVALID_KEY_TYPE","ERR_KEY_ALREADY_EXISTS","ERR_INVALID_KEY_SIZE","ERR_KEY_NOT_FOUND","ERR_OLD_KEY_NAME_INVALID","ERR_NEW_KEY_NAME_INVALID","ERR_PASSWORD_REQUIRED","ERR_PEM_REQUIRED","ERR_CANNOT_READ_KEY","ERR_MISSING_PRIVATE_KEY","ERR_INVALID_OLD_PASS_TYPE","ERR_INVALID_NEW_PASS_TYPE","ERR_INVALID_PASS_LENGTH","ERR_NOT_IMPLEMENTED","ERR_WRONG_PING_ACK","PROTOCOL","FetchRequest","FetchResponse","FetchProtocol","_lookupFunctions","handleMessage","_protocol","identifier","StatusCode","OK","ERROR","errmsg","TextDecoder","_getLookupFunction","registerLookupFunction","unregisterLookupFunction","libp2pVersion","PROTOCOL_VERSION","MULTICODEC_IDENTIFY","MULTICODEC_IDENTIFY_PUSH","IDENTIFY_PROTOCOL_VERSION","MULTICODEC_IDENTIFY_PROTOCOL_NAME","MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME","MULTICODEC_IDENTIFY_PROTOCOL_VERSION","MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION","PeerRecord","IdentifyService","identifyProtocolStr","identifyPushProtocolStr","addressManager","protocolStr","getProtocolStr","_host","protocolVersion","identify","pushToPeerStore","listenAddrs","pushes","Identify","observedAddr","cleanObservedAddr","getCleanMultiaddr","DOMAIN","_handleIdentify","_handlePush","IDENTIFY","IDENTIFY_PUSH","Messsage","MemoryDatastore","PeerRouting","ContentRouting","validateConfig","AddressManager","ConnectionManager","AutoDialler","Dialer","Keychain","Metrics","TransportManager","Upgrader","PeerStore","PubsubAdapter","Registrar","FetchService","PingService","NatManager","updateSelfPeerRecord","Libp2p","datastore","denyInboundConnection","denyOutboundConnection","denyInboundEncryptedConnection","denyOutboundEncryptedConnection","denyInboundUpgradedConnection","denyOutboundUpgradedConnection","filterMultiaddrForPeer","addressFilter","_transport","_discovery","_autodialler","keychain","keychainOpts","generateOptions","onConnection","onConnectionEnd","natManager","cryptos","Transport","transportOptions","muxer","muxers","identifyService","connProtector","protector","LIBP2P_FORCE_PNET","DHT","Pubsub","_onDiscoveryPeer","fetchService","eventName","_onStarting","_onDidStart","_isStarted","service","unhandle","findKeyByName","importPeer","_dial","addrSet","_maybeConnect","_setupPeerDiscovery","setupService","DiscoveryService","discoveryService","getTransports","discovery","certificateForKey","findAsync","privates","plain","_getPrivateKey","pkcs7","createEnvelopedData","addRecipient","toAsn1","cmsData","cms","messageFromAsn1","recipients","issuer","shortName","recipient","keyId","findKeyById","missingKeys","sanitize","Key","CMS","infoPrefix","NIST","iterationCount","validateKeyName","throwDelayed","DsName","DsInfoName","pass","dsname","keyInfo","commit","listKeys","oldName","newName","oldDsname","newDsname","oldInfoName","newInfoName","oldPass","newPass","oldDek","newDek","keyAsPEM","cert","createCertificate","serialNumber","validity","notBefore","notAfter","setFullYear","getFullYear","attrs","setSubject","setIssuer","setExtensions","cA","keyCertSign","digitalSignature","nonRepudiation","keyEncipherment","dataEncipherment","serverAuth","clientAuth","codeSigning","emailProtection","timeStamping","client","objsign","sslCA","emailCA","objCA","asyncCompare","findIndex","oldPeerLRU","Stats","initialCounters","directionToEvent","in","_globalStats","_peerStats","_protocolStats","_oldPeers","_onMessage","_systems","stats","getComponentMetrics","updateComponentMetric","system","systemMetrics","forPeer","idString","forProtocol","protocolStats","updatePlaceholder","placeholderStats","peerIdString","existingStats","mergedStats","mergeStats","trackStream","_sink","_queue","LRU","maxSize","patched","Big","MovingAverage","_stats","_frequencyLastTime","_frequencyAccumulators","_movingAverages","intervals","_resetComputeTimeout","snapshot","counters","inc","_nextTimeout","urgency","_applyOp","_updateFrequency","latestTime","timeDiff","_updateFrequencyFor","timeDiffMS","hz","TrackedMap","_system","_component","_metric","_metrics","deleted","NatAPI","isPrivateIp","pkg","isLoopback","DEFAULT_TTL","highPort","_addressManager","_enabled","_externalIp","description","autoUpdate","enablePMP","_start","isThinWaistAddress","_getClient","publicIp","publicPort","privatePort","fromNodeAddress","_client","onFailedAttempt","_routers","_refreshManagerOptions","_findClosestPeersTask","_timeoutId","each","EVENT_NAME","filterMultiaddrs","_emit","_store","_addressFilter","lock","writeLock","updatedPeer","peerRecord","createFromProtobuf","peerRecordEnvelope","storedEnvelope","seqNumber","patchOrCreate","readLock","hasPeer","mergeOrCreate","AddressBook","KeyBook","MetadataBook","ProtoBook","uint8arrayEquals","updatedKey","existingValue","patch","Address","Metadata","_pubKey","_peerRecordEnvelope","_isCertified","protocolSet","PeerPB","mortice","NAMESPACE_COMMON","_datastore","singleProcess","_peerIdToDatastoreKey","b32key","addressSet","_patch","_merge","addrStr","queryKeys","PING_LENGTH","PROTOCOL_NAME","PubsubRouter","_subscribeAdapter","_unsubscribeAdapter","payloadType","uint8arraysConcat","uint8arraysFromString","cryptoKeys","uint8arraysEquals","Protobuf","_marshal","signData","formatSignaturePayload","domainUint8Array","domainLength","payloadTypeLength","payloadLength","envelopeData","ENVELOPE_DOMAIN_PEER_RECORD","ENVELOPE_PAYLOAD_TYPE_PEER_RECORD","arrayEquals","fromBits","AddressInfo","topologies","_handle","isTopology","setRegistrar","pSettle","FAULT_TOLERANCE","_transports","_listenerOptions","listenerOptions","couldNotListen","isFulfilled","NO_FATAL","Multistream","mutableProxy","encryptedConn","upgradedConn","Muxer","cryptoProtocol","setPeer","proxyPeer","setTarget","proxy","protectedConn","protect","_encryptInbound","_multiplexInbound","_createConnection","remotePeerId","_encryptOutbound","_multiplexOutbound","mss","Listener","_onStream","select","_timeline","errConnectionNotMultiplexed","multiplexer","secureInbound","secureOutbound","wasm","WebAssembly","Instance","Module","isLong","__isLong__","INT_CACHE","UINT_CACHE","cachedObj","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","MIN_VALUE","MAX_VALUE","TWO_PWR_32_DBL","pow_dbl","radix","radixToPower","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toInt","radixLong","rem1","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","eqz","notEquals","neq","lessThan","comp","lessThanOrEqual","greaterThan","greaterThanOrEqual","thisNeg","otherNeg","addend","a48","a32","a16","a00","c48","c32","c16","c00","subtrahend","multiplier","get_high","b00","divisor","approx","div_u","div_s","toUnsigned","shru","shr","log2","approxRes","approxRem","rem_u","rem_s","numBits","shiftRightUnsigned","shr_u","toSigned","toBytesLE","toBytesBE","fromBytesLE","fromBytesBE","DNS4","DNS6","DNSADDR","IP","TCP","UDP","UTP","QUIC","HTTP","HTTPS","WebRTCStar","WebSocketStar","WebRTCDirect","Reliable","Stardust","_P2P","_Circuit","CircuitRecursive","makeMatchesFunction","partialMatch","pnames","protos","IPFS","isOptionObject","defaultMergeOptions","concatArrays","getEnumerableOwnPropertyKeys","cloneArray","cloneOptionObject","mergeKeys","merged","resultIndex","indices","nanoid","WORKER_REQUEST_READ_LOCK","WORKER_RELEASE_READ_LOCK","MASTER_GRANT_READ_LOCK","WORKER_REQUEST_WRITE_LOCK","WORKER_RELEASE_WRITE_LOCK","MASTER_GRANT_WRITE_LOCK","observer","handleWorkerLockRequest","masterEvent","requestType","releaseType","grantType","worker","requestEvent","releaseEventListener","releaseEvent","makeWorkerLockRequest","responseEvent","isWorker","observe","mutexes","createReleaseable","finally","masterQueue","autoStart","localReadQueue","readPromise","onIdle","createMutex","Worker","script","Impl","cluster","isMaster","plural","msAbs","isPlural","fmtLong","fmtShort","reduceValue","Reducers","assumeHttp","explicitPort","tcpUri","dns4","dns6","ipfs","p2p","wss","tuple","stringToStringTuples","ParseError","cleanPath","stringTuplesToString","tup","protoFromTuple","stringTuplesToTuples","tuplesToStringTuples","tuplesToBytes","sizeForAddr","bytesToTuples","stringToBytes","validateBytes","bytesToString","isValidBytes","Digest","Convert","ip2bytes","ipString","isIP","port2bytes","bytes2port","bytes2onion","addrBytes","portBytes","ipBuff","bytes2ip","bytes2str","bytes2mh","str2bytes","multihash","mh2bytes","portBuf","onion2bytes","onion32bytes","stringTuples","getPath","resolvableProto","resolvable","isV4","isV6","sections","v4Buffer","lengthPrefixedVarSize","row","dnsaddrCode","encodeText","codeBuf","baseX","rfc4648","decodeText","tupple","nameOrCode","validEncode","isEncoded","encodingFromData","bitsPerChar","textDecoder","textEncoder","arrs","INT","N1","N2","N3","N4","N5","N6","N7","N8","N9","multibase","isValidCode","coerceCode","isAppCode","fromHexString","fromB58String","hashfn","PROTOCOL_ID","multistream","shakeStream","ls","MultistreamSelect","_stream","_shaken","_handshake","protocolsReader","NewLine","writeAll","protocolId","_toConsumableArray","arr2","defaultTarget","mutableHandler","mutableTarget","setHandler","property","getTarget","getHandler","Request","Response","Netmask","chr","chr0","chrA","chra","ip2long","long2ip","dmax","net","maskLong","error1","bitmask","netLong","hostmask","broadcast","lastLong","getGlobal","registerAlgorithm","startEncrypting","_createCipher","createEncryptionCipher","startDecrypting","createDecryptionCipher","initialize","inBlock","outBlock","_updateBlock","putByte","getInt32","encryptOp","_expandKey","ecb","cbc","cfb","ofb","gcm","sbox","isbox","rcon","mix","imix","xtime","e2","e4","e8","sx2","ime","iNk","Nk","m0","m3","wnew","Nr","_checkBufferLength","available","requested","UNIVERSAL","APPLICATION","CONTEXT_SPECIFIC","PRIVATE","NONE","BOOLEAN","INTEGER","BITSTRING","OCTETSTRING","NULL","OID","ODESC","EXTERNAL","REAL","ENUMERATED","EMBEDDED","UTF8","ROID","SEQUENCE","SET","PRINTABLESTRING","IA5STRING","UTCTIME","GENERALIZEDTIME","BMPSTRING","constructed","composed","bitStringContents","original","excludeBitStringContents","obj1","obj2","includeBitStringContents","getBerValueLength","getInt","_fromDer","longFormBytes","_getValueLength","decodeBitStrings","savedRead","savedRemaining","verbose","ex","getInt16","asn1Options","useBitStringContents","putBytes","putBuffer","putInt16","lenBytes","oidToDer","oid","valueBytes","derToOid","utcTimeToDate","utc","MM","DD","setUTCFullYear","setUTCHours","setTime","generalizedTimeToDate","YYYY","fff","isUTC","setHours","dateToUtcTime","rval","dateToGeneralizedTime","integerToDer","putSignedInt","integer","derToInteger","getSignedInt","captureAsn1","captureBitStringContents","captureBitStringValue","_nonLatinRegex","prettyPrint","indentation","IA5String","subvalues","oids","decodeUtf8","api","_reverseAlphabets","maxline","at","_encodeWithByteBuffer","getAlgorithm","BlockCipher","_finish","_input","_op","overflow","afterFinish","transformIV","ints","inc32","from64To32","_ints","_inBlock","_outBlock","putInt32","fillWithByte","truncate","_iv","_partialBlock","_partialOutput","_partialBytes","partialBytes","additionalData","_cipherLength","_tagLength","_hashBlock","_hashSubkey","componentBits","_m","generateHashTable","ivLength","_j0","_aDataLength","z_i","v_i","lsb","tableMultiply","x_i","perInt","shft","generateSubHashTable","m_i","m_j","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","looping","endloop","loopinc","right1","right2","usePureJavaScript","_md","_ipadding","_opadding","blockLength","getMac","am3","mgf1","maskLen","_IN","_I_","pbe","encryptedPrivateKeyValidator","PBES2AlgorithmsValidator","pkcs12PbeParamsValidator","prfOidToMessageDigest","prfOid","prfAlgorithmToMessageDigest","encryptPrivateKeyInfo","dkLen","encryptionAlgorithm","encryptedData","getBytesSync","countBytes","encOid","cipherFn","pkcs5","createPbkdf2Params","saltBytes","generatePkcs12Key","decryptPrivateKeyInfo","encryptionOid","getCipher","encryptionParams","encryptedPrivateKeyToPem","epki","encryptedPrivateKeyFromPem","headerType","procType","rsaKey","legacy","wrapRsaPrivateKey","opensslDeriveBytes","dekInfo","rc2","passBuf","Slen","Plen","Inew","setAt","getCipherForPBES2","getCipherForPKCS12PBE","supportedOids","kdfOid","kdfSalt","kdfIterationCount","encIv","dIvLen","digests","isNodejs","prf","u_c","u_c1","int32ToBytes","xorBytes","foldHeader","insertSpace","insert","ltrim","contentDomain","rMessage","rHeader","rCRLF","decode64","nl","rsa_mgf1","maskLength","encode_rsa_oaep","mgf1Md","lHash","PS","PS_length","seedLength","dbMask","maskedDB","seedMask","decode_rsa_oaep","em","expectedLength","lHashPrime","in_ps","is_0","error_mask","_recipientFromAsn1","recipientInfoValidator","RDNAttributesAsArray","encryptedContent","encAlgorithm","parameter","encParameter","encKey","_recipientsToAsn1","distinguishedNameToAsn1","attributes","_signerToAsn1","digestAlgorithm","authenticatedAttributesAsn1","signatureAlgorithm","unauthenticatedAttributes","attrsAsn1","attr","_attributeToAsn1","messageDigest","signingTime","jan_1_1950","jan_1_2050","_fromAsn1","validator","rawCapture","_decryptContent","ciph","messageFromPem","messageToPem","pemObj","contentInfoValidator","envelopedData","createEncryptedData","signedData","createSignedData","fromAsn1","certificates","crls","signers","digestAlgorithmIdentifiers","contentInfo","signerInfos","signedDataValidator","certs","certificateFromAsn1","certificateToAsn1","addSigner","signer","certificateFromPem","privateKeyFromPem","authenticatedAttributes","rsaEncryption","detached","detachedContent","mds","_signersToAsn1","addSignerInfos","addDigestAlgorithmIds","addCertificate","addCertificateRevokationList","crl","encryptedDataValidator","envelopedDataValidator","infos","_recipientsFromAsn1","recipientInfos","findRecipient","sAttr","rAttr","desCBC","ciphFn","p7v","pkcs7asn1","encryptedContentInfoValidator","signerValidator","GCD_30_DELTA","THIRTY","generateProbablePrime","primeincFindPrimeWithoutWorkers","generateRandom","numWorkers","workers","workLoad","workerScript","estimateCores","cores","workerMessage","primeincFindPrimeWithWorkers","primeincFindPrime","mrTests","getMillerRabinTests","millerRabinTests","maxBlockTime","_primeinc","deltaIdx","bits1","plugin","reseeds","keyBytes","pools","_reseedSync","messageLength","_seed","needed","seedFileSync","_2powK","seedBytes","formatKey","formatSeed","defaultSeedFile","globalScope","QuotaExceededError","generateSync","seedFile","collectInt","registerWorker","pss","salt_","pssobj","modBits","emBits","emLen","mHash","m_","checkLen","jQuery","prng_aes","_prng_aes_output","_prng_aes_buffer","spawnPrng","_ctx","_navBytes","mousemove","keypress","createInstance","piTable","rol","ror","expandKey","effKeyBits","T8","TM","mixRound","mashRound","_output","getInt16Le","runPlan","plan","putInt16Le","privateKeyValidator","rsaPrivateKeyValidator","rsaPublicKeyValidator","publicKeyValidator","emsaPkcs1v15encode","oidBytes","digestInfo","_modPow","xq","_encodePkcs1_v1_5","bt","padByte","numZeros","padBytes","_decodePkcs1_v1_5","ml","_generateKeyPair","pBits","qBits","phi","_bnToBytes","_getMillerRabinTests","_detectNodeCrypto","_detectSubtleCrypto","_detectSubtleMsCrypto","_intToUint8Array","yhex","xhex","createKeyPairGenerationState","eInt","pqState","stepKeyPairGenerationState","publicKeyEncoding","privateKeyEncoding","publicKeyFromPem","pkcs8","genOp","oncomplete","exportOp","generateKeyPairSync","scheme","schemeOptions","privateKeyModulus","privateKeyPublicExponent","privateKeyPrivateExponent","privateKeyPrime1","privateKeyPrime2","privateKeyExponent1","privateKeyExponent2","privateKeyCoefficient","privateKeyToRSAPrivateKey","publicKeyOid","rsaPublicKey","publicKeyModulus","publicKeyExponent","publicKeyToSubjectPublicKeyInfo","publicKeyToRSAPublicKey","_initialized","_padding","fillString","fullMessageLength","messageLengthSize","messageLength64","int32s","finalBlock","_k","_states","messageLength128","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","baseN","_checkBitsParam","ByteStringBuffer","isArrayBuffer","_constructedStringLength","callbacks","MutationObserver","oldSetImmediate","_optimizeConstructedString","putString","putInt24","putInt24Le","putInt32Le","putInt","getInt24","getInt24Le","getInt32Le","DataBuffer","readOffset","growSize","writeOffset","accommodate","amount","setUint8","utf16","setInt16","setInt8","setInt32","getInt8","getUint8","_base64","_base64Idx","_base58","chr1","chr2","chr3","enc1","enc2","enc3","enc4","unescape","base58","deflate","inflate","_setStorageObject","_getStorageObject","_setItem","_getItem","_removeItem","empty","_clearItems","_callStorageFunction","clearItems","argi","lastIndex","formatNumber","decimals","dec_point","thousands_sep","formatSize","bytesFromIP","bytesFromIPv4","bytesFromIPv6","blanks","bytesToIP","bytesToIPv4","bytesToIPv6","zeroGroups","zeroMaxGroup","hardwareConcurrency","blobUrl","st","et","sample","samples","avg","results","overlaps","overlap","_shortNames","x509CertificateValidator","rsassaPssParameterValidator","certificationRequestInfoValidator","certificationRequestValidator","_getAttribute","rdn","valueTagClass","CRIAttributesAsArray","extensionRequest","extensions","certificateExtensionFromAsn1","_readSignatureParameters","fillDefaults","algorithmOid","hashOid","maskGenOid","maskGenHashOid","_createSignatureDigest","signatureOid","_verifySignature","sha1WithRSAEncryption","sha1WithRSASignature","signatureParameters","_dnToAsn1","_fillMissingFields","attribute","valueConstructed","certificateExtensionToAsn1","_fillMissingExtensionFields","extension","keyAgreement","cRLSign","encipherOnly","decipherOnly","pathLenConstraint","reserved","altNames","altName","comment","ski","generateSubjectKeyIdentifier","subjectKeyIdentifier","keyIdentifier","authorityCertIssuer","subSeq","fullNameGeneralNames","_signatureParametersToAsn1","_CRIAttributesToAsn1","csr","computeHash","certificateToPem","publicKeyToPem","publicKeyToRSAPublicKeyPem","getPublicKeyFingerprint","certificationRequestFromPem","certificationRequestFromAsn1","certificationRequestToPem","certificationRequestToAsn1","siginfo","getField","sn","addField","uniqueId","exts","getExtension","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","critical","gn","createCertificationRequest","csrVersion","csrSignatureOid","csrSignatureParams","csrSignature","certificationRequestInfo","certificationRequestInfoSubject","getAttribute","addAttribute","certificationRequestInfoAttributes","setAttributes","getCertificationRequestInfo","cri","_dateToAsn1","tbs","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","chain","validityCheckDate","selfSigned","parents","verified","keyUsage","basicConstraints","bcExt","keyUsageExt","vfd","keysShim","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","isObject","isFunction","isArguments","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","origKeys","originalKeys","keysWorksWithArguments","observable","dispatchEvent","pSome","PCancelable","anyCancelable","onCancel","CancelError","isCanceled","userFn","arguments_","executor","_cancelHandlers","_isPending","_isCanceled","_rejectOnCancel","_promise","_reject","shouldReject","boolean","onFulfilled","onRejected","onFinally","Fifo","_waitingConsumers","nextConsumer","p_timeout_1","priority_queue_1","timeoutError","_intervalCount","_intervalEnd","_pendingCount","_resolveEmpty","_resolveIdle","carryoverConcurrencyCount","intervalCap","queueClass","_carryoverConcurrencyCount","_isIntervalIgnored","_intervalCap","_queueClass","_throwOnTimeout","throwOnTimeout","_isPaused","_doesIntervalAllowAnother","_doesConcurrentAllowAnother","_concurrency","_next","_tryToStartAnother","_resolvePromises","_onResumeInterval","_onInterval","_initializeIntervalIfNeeded","_isIntervalPaused","canInitializeInterval","job","dequeue","_processQueue","newConcurrency","enqueue","functions","function_","existingResolve","sizeBy","milliseconds","comparator","it","lower_bound_1","pFinally","timer","pReflect","isRejected","networkErrorMsgs","originalError","pRetry","attempt","attemptNumber","errorMessage","retriesLeft","decorateErrorWithCounts","mainError","pLimit","pTry","activeCount","pendingCount","clearQueue","FilterError","elementCount","isSettled","completed","cancelPending","cancelablePromise","customTimers","base16","PeerIdProto","bases","baseDecoder","PeerIdWithIs","_id","_idB58String","_privKey","marshalPrivKey","excludePriv","toPrint","pid","maxRunes","toB64Opt","_idCIDString","createV1","isEqual","hasInlinePublicKey","computeDigest","computePeerId","keyType","createFromHexString","validMulticodec","createFromCID","asCID","createFromPrivKey","createFromJSON","rawPrivKey","rawPubKey","privDigest","pubDigest","ip_regex","NETMASK_RANGES","ip_range","ip_addr","ipv6_check","ipv4_check","timeoutMillis","protobuf","_configure","BufferWriter","BufferReader","build","indexOutOfRange","writeLength","create_array","readLongVarint","readFixed32_end","readFixed64","_slice","sint32","fixed32","sfixed32","float","wireType","BufferReader_","int64","sint64","zzDecode","fixed64","sfixed64","Service","rpcImpl","requestDelimited","responseDelimited","rpcCall","requestCtor","responseCtor","asPromise","endedByRPC","zzEncode","zeroHash","toLong","fromHash","toHash","part0","part1","part2","ifNotSet","newError","CustomError","emptyObject","isset","_Buffer_from","_Buffer_allocUnsafe","sizeOrArray","dcodeIO","key2Re","key32Re","key64Re","longToHash","longFromHash","lcFirst","fieldNames","fieldMap","Op","State","states","writeByte","VarintOp","writeVarint64","writeFixed32","_push","writeBytes","BufferWriter_","writeStringBuffer","writeBytesBuffer","toMS","_lookup","lastModified","expires","oldRecord","Retimer","_rescheduled","_scheduled","_args","_triggered","_timerWrapper","_schedule","reschedule","RetryOperation","timeouts","forever","maxRetryTime","minTimeout","maxTimeout","randomize","createTimeout","_originalTimeouts","_timeouts","_maxRetryTime","_fn","_attempts","_operationTimeout","_operationTimeoutCb","_operationStart","_cachedTimeouts","currentTime","timeoutOps","try","attempts","counts","mainErrorCount","illegalRe","controlRe","reservedRe","windowsReservedRe","windowsTrailingRe","replacement","sanitized","ecparams","loadPublicKey","xbuf","loadCompressedPublicKey","ybuf","loadUncompressedPublicKey","savePublicKey","contextRandomize","seckey","privateKeyNegate","privateKeyTweakAdd","tweak","tweaked","privateKeyTweakMul","publicKeyNegate","publicKeyCombine","pubkeys","pairs","publicKeyTweakAdd","publicKeyTweakMul","signatureNormalize","signatureExport","sigR","sigS","lenR","posR","lenS","posS","outputlen","signatureImport","noncefn","_noncefn","msg32","sigObj","sigr","sigs","cond","isUint8Array","numbers","toTypeString","getAssertedOutput","compressed","task","_runPeriodically","_ms","isHighSurrogate","isLowSurrogate","segment","charLength","curByteLength","prevCodePoint","isArgumentsObject","isGeneratorFunction","whichTypedArray","isTypedArray","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","working","isDataViewToString","isDataView","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isBigInt64Array","isBigUint64Array","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","descriptors","formatRegExp","objects","isNull","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","NODE_DEBUG","debugEnv","stylize","stylizeNoColor","isBoolean","_extend","isUndefined","stylizeWithColor","formatValue","styleType","styles","simple","isNumber","formatPrimitive","visibleKeys","arrayToHash","formatError","braces","toUTCString","formatProperty","formatArray","numLinesEst","reduceToSingleString","isNullOrUndefined","isSymbol","isPrimitive","months","getHours","getMinutes","getSeconds","getDate","getMonth","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promiseResolve","promiseReject","callbackify","callbackified","maybeCb","rej","rnds8","uuid","REGEX","byteToHex","_clockseq","_lastMSecs","_lastNSecs","clockseq","msecs","nsecs","dt","tmh","hashfunc","generateUUID","getOutputLength","inputLength8","safeAdd","lsw","md5cmn","cnt","md5ff","md5gg","md5hh","md5ii","length32","hexTab","md5ToHexEncodedArray","olda","oldb","oldc","oldd","wordsToMd5","length8","bytesToWords","v35","rnds","ROTL","_t2","foundName","possibleNames","sortAll","puts","dels","putMany","deleteMany","_all","orders","_allKeys","pathSepS","pathSepB","pathSep","_buf","uint8Array","less","list1","list2","withNamespaces","baseNamespace","namespaceType","namespaceValue","isAncestorOf","isDecendantOf","isTopLevel","Encoder","baseEncode","baseDecode","ComposedDecoder","Codec","basex","base16upper","base32upper","base32pad","base32padupper","base32hex","base32hexupper","base32hexpad","base32hexpadupper","base32z","base36","base36upper","base58flickr","base64pad","base64url","base64urlpad","_baseCache","readonly","toV0","DAG_PB_CODE","SHA_256_CODE","toV1","toStringV0","toStringV1","IS_CID_DEPRECATION","cidSymbol","toBaseEncodedString","multibaseName","encodeCID","decodeFirst","specs","inspectBytes","prefixSize","multihashSize","multihashBytes","digestBytes","digestSize","multihashCode","initialBytes","parseCIDtoBytes","codeOffset","hashOffset","sizeOffset","digestOffset","Hasher","encode_1","encodeTo","urlAlphabet","customRandom","getRandom","customAlphabet","base2","base8","base10","identityBase","createCodec","ascii","latin1","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","amdO","definition","nmd","paths","handleCommand","waku","setNick","replaceAll","parseInput","command","nick","peerMultiaddr","strConnections","reactPropsRegex","memoize","StyleSheet","_insertTag","before","insertionPoint","container","isSpeedy","speedy","_proto","rule","createStyleElement","sheet","styleSheets","ownerNode","sheetForTag","insertRule","cssRules","pattern","indexof","charat","begin","strlen","sizeof","column","character","characters","caret","dealloc","delimit","whitespace","escaping","commenter","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","KEYFRAMES","serialize","compile","rules","rulesets","pseudo","declarations","atrule","previous","variable","scanning","ampersand","reference","declaration","ruleset","post","identifierWithPointTracking","getRules","toRules","fixedElements","isImplicitRule","parentRules","removeLabel","defaultStylisPlugins","ssrStyles","stylisPlugins","_insert","inserted","nodesToHydrate","attrib","currentSheet","finalizingPlugins","serializer","collection","middleware","selector","serialized","shouldCache","registered","getRegisteredStyles","registeredStyles","classNames","rawClassName","insertStyles","isStringTag","msGridRow","msGridRowSpan","msGridColumn","msGridColumnSpan","WebkitLineClamp","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","unitless","handleInterpolation","mergedProps","interpolation","__emotion_styles","anim","interpolated","createStringFromObject","previousCursor","labelPattern","serializeStyles","stringMode","strings","identifierName","hashString","EmotionCacheContext","HTMLElement","createCache","withEmotionCache","ThemeContext","useTheme","createCacheWithTheme","weakMemoize","outerTheme","theme","_extends","getTheme","ThemeProvider","typePropName","createEmotionProps","newProps","Noop","Emotion","cssProp","css","ele","possiblyStyleElement","testOmitPropsOnStringTag","isPropValid","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","__emotion_forwardProp","createStyled","targetClassName","__emotion_real","baseTag","__emotion_base","defaultShouldForwardProp","shouldUseAs","Styled","finalTag","as","classInterpolations","finalShouldForwardProp","withComponent","nextTag","nextOptions","newStyled","mapValues","mapper","forOwn","mapKeys$1","objA","objB","memoizeOne","memoized","cacheKey","omitByIndexed","pickByIndexed","trailingWhiteSpace","trimEnd","argsLength","createElementArgArray","classnames","toAdd","ClassNames","cx","_objectWithoutPropertiesLoose","excluded","sourceKeys","_inheritsLoose","React","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","initialStatus","appear","isMounting","enter","appearStatus","unmountOnExit","mountOnEnter","nextCallback","_ref","prevState","updateStatus","prevProps","nextStatus","cancelNextCallback","getTimeouts","exit","mounting","performEnter","performExit","appearing","_ref2","nodeRef","ReactDOM","maybeNode","maybeAppearing","enterTimeout","safeSetState","onEntered","onEnter","onEntering","onTransitionEnd","_this3","onExit","onExiting","onExited","nextState","setNextCallback","_this4","doesNotHaveTimeoutOrListener","addEndListener","_ref3","maybeNextCallback","_this$props","childProps","TransitionGroupContext","replaceClassName","origClass","classToRemove","removeClass","classList","baseVal","CSSTransition","appliedClasses","_this$resolveArgument","resolveArguments","removeClasses","addClass","_this$resolveArgument2","_this$resolveArgument3","getClassNames","isStringClassNames","baseClassName","activeClassName","doneClassName","phase","hasClass","_addClass","_this$appliedClasses$","getChildMapping","mapFn","getProp","getNextChildMapping","nextProps","prevChildMapping","nextChildMapping","getValueForKey","nextKeysPending","pendingKeys","childMapping","pendingNextKey","mergeChildMappings","hasPrev","hasNext","prevChild","isLeaving","TransitionGroup","handleExited","contextValue","firstRender","mounted","currentChildMapping","childFactory","toVal","idsUpdaterMap","mergeIds","idA","setIdA","setIdB","clsx","DOMPropNames","labelablePropNames","propRe","supportsPreventScrollCached","focusElem","supportsPreventScroll","preventScroll","scrollableElements","rootScrollingElement","getScrollableElements","restoreScrollPosition","transitionsByElement","transitionCallbacks","transitions","setupGlobalEvents","isMac","testPlatform","isIOS","savedUserSelect","modifiedElementMap","targetOldUserSelect","PressResponderContext","usePress","mergeProps","useSyncRef","usePressResponderContext","isPressed","allowTextSelectionOnPress","domProps","propsRef","shouldCancelOnPointerExit","setPressed","ignoreEmulatedMouseEvents","ignoreClickAfterPress","didFirePressStart","activePointerId","isOverTarget","removeAllGlobalListeners","globalListeners","addGlobalListener","eventTarget","removeGlobalListener","useGlobalListeners","pressProps","triggerPressStart","originalEvent","onPressStart","onPressChange","triggerPressEnd","wasPressed","onPressEnd","onPress","triggerPressUp","onPressUp","createEvent","onKeyDown","isValidKeyboardEvent","onKeyUp","focusWithoutScrolling","isHTMLAnchorLink","PointerEvent","shouldPreventDefault","onPointerMove","onPointerUp","onPointerCancel","onMouseUp","touch","getTouchFromEvent","onScroll","getTouchById","preventFocusOnPress","isPressedProp","isContentEditable","role","rect","pointRect","offsetX","offsetY","bottom","getPointClientRect","areRectanglesOverlapping","currentModality","changeHandlers","hasSetupGlobalListeners","hasEventBeforeFocus","hasBlurredWindowRecently","FOCUS_VISIBLE_INPUT_KEYS","Tab","Escape","modality","isValidKey","triggerChangeHandlers","isFocusVisible","isFocusVisibleState","setFocusVisible","isTextInput","setupGlobalFocusEvents","isKeyboardFocusEvent","shouldStopPropagation","continuePropagation","updateRef","libRef","userRef","prevUserRef","useIsomorphicLayoutEffect","__assign","singleColorRegex","createUnitType","unit","percent","clampRgbUnit","isRgba","isHsla","hue","splitColorValues","terms","valuesArray","getValueFromFunctionString","rgbUnit","isColorString","colorType","rgba","alpha$1","rgbaTemplate","curryRange","cv","clamp$1","springForce","alterDisplacement","constant","displacement","springModifiedDisplacement","rangeSize","currentStyle","supportsPassiveEvents","arePassiveEventsSupported","Context","_isNativeReflectConstruct","PolishedError","colorToInt","convertToInt","hslToRgb","saturation","lightness","huePrime","chroma","secondComponent","lightnessModification","namedColorMap","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","hexRegex","hexRgbaRegex","reducedHexRegex","reducedRgbaHexRegex","rgbRegex","rgbaRegex","hslRegex","hslaRegex","parseToRgb","normalizedColor","normalizedColorName","nameToHex","_alpha","rgbMatched","rgbaMatched","hslMatched","rgbColorString","hslRgbMatched","hslaMatched","_rgbColorString","_hslRgbMatched","parseToHsl","rgbToHsl","reduceHexValue","colorToHex","convertToHex","hslToHex","hsl","hsla","rgb","firstValue","secondValue","thirdValue","fourthValue","rgbValue","toColorString","isRgb","isHsl","curried","combined","curry","guard","lowerBoundary","upperBoundary","darken","hslColor","curriedDarken","focusableElements","FocusableContext","useFocusable","focusProps","onFocus","onBlur","useFocus","keyboardProps","useKeyboard","interactions","useFocusableContext","interactionProps","autoFocusRef","domRef","focusableProps","tabIndex","useButton","additionalProps","rel","buttonProps","propNames","filteredProps","labelable","filterDOMProps","deprecatedOnClick","HIDDEN_TEXTAREA_STYLE","visibility","forceHiddenStyles","hiddenTextarea","SIZING_STYLE","isIE","TextareaAutosize","cacheMeasurements","maxRows","minRows","_ref$onChange","onChange","_ref$onHeightChange","onHeightChange","isControlled","useComposedRef","heightRef","measurementsCacheRef","resizeTextarea","nodeSizingData","getComputedStyle","sizingStyle","boxSizing","borderRightWidth","borderLeftWidth","paddingRight","paddingLeft","paddingBottom","paddingTop","borderSize","borderBottomWidth","borderTopWidth","getSizingData","_calculateNodeHeight","sizingData","scrollHeight","getHeight","rowHeight","minHeight","maxHeight","calculateNodeHeight","latestListener","useLatest","useWindowResizeListener","MapShim","getIndex","class_1","__entries__","global$1","requestAnimationFrame$1","transitionKeys","mutationObserverSupported","ResizeObserverController","connected_","mutationEventsAdded_","mutationsObserver_","observers_","onTransitionEnd_","leadingCall","trailingCall","lastCallTime","resolvePending","timeoutCallback","throttle","connect_","removeObserver","disconnect_","updateObservers_","activeObservers","gatherActive","hasActive","broadcastActive","childList","characterData","subtree","getInstance","instance_","defineConfigurable","getWindowOf","emptyRect","createRectInit","toFloat","getBordersSize","positions","getHTMLElementContentRect","clientWidth","clientHeight","paddings","positions_1","getPaddings","horizPad","vertPad","isDocumentElement","vertScrollbar","horizScrollbar","isSVGGraphicsElement","SVGGraphicsElement","SVGElement","getBBox","getContentRect","bbox","getSVGContentRect","ResizeObservation","broadcastWidth","broadcastHeight","contentRect_","isActive","broadcastRect","ResizeObserverEntry","rectInit","contentRect","Constr","DOMRectReadOnly","createReadOnlyRect","ResizeObserverSPI","callbackCtx","activeObservations_","observations_","callback_","controller_","callbackCtx_","observations","unobserve","clearActive","observation","ResizeObserver","grouped","groupKey","objs","iteratee","keyResolver","memoizeWith","insertable","trailingId","lastCall","invoke","_React$useState","ChatList","renderedMessages","authorName","formatDisplayDate","sentTimestamp","MessageList","containScrollInSubtree","AlwaysScrollToBottom","hour12","elementRef","scrollIntoView","WakuContext","useWaku","MessageInput","inputText","setInputText","activeButton","TextComposer","onButtonClick","Fill","TextInput","Fit","SendButton","createBaseChatMessage","ChatMessage","_m0","timestampNumber","Room","setPeers","storePeers","setStorePeers","relayPeers","setRelayPeers","flexDirection","TitleBar","leftIcons","commandHandler","messageSender","chatMessage","fromUtf8String","ChatContentTopic","messageToSend","chatMsg","themes","AuthorName","fontSize","margin","MessageText","MessageGroup","App","dispatchMessages","reduceMessages","setWaku","persistedNick","historicalMessagesRetrieved","setHistoricalMessagesRetrieved","setter","NODE_ENV","selectFleetEnv","initWaku","handleRelayMessage","waitForRemotePeer","setArchivedMessages","wakuMessages","queryHistory","retrieveStoreMessages","retrieveMessages","commandMessages","newMessages","getElementById"],"sourceRoot":""}