diff --git a/src/about.html b/src/about.html
index 05a0e17..1072936 100644
--- a/src/about.html
+++ b/src/about.html
@@ -158,12 +158,12 @@
Roadmap
- βTorrent
+ βeacon
- βTorrent
+ βeacon
- βTorrent
+ βeacon
- βTorrent
+ βeacon
- βTorrent
+ βeacon
{this._notify()})}_read(cb){this._reading||(this._reading=!0,this._notify(cb))}_notify(cb=()=>{}){if(!this._reading||0===this._missing)return cb();if(!this._torrent.bitfield.get(this._piece))return cb(),this._torrent.critical(this._piece,this._piece+this._criticalLength);if(this._notifying)return cb();if(this._notifying=!0,this._torrent.destroyed)return this.destroy(new Error("Torrent removed"));const p=this._piece,getOpts={};p===this._torrent.pieces.length-1&&(getOpts.length=this._torrent.lastPieceLength),this._torrent.store.get(p,getOpts,(err,buffer)=>{if(this._notifying=!1,!this.destroyed)return debug("read %s (length %s) (err %s)",p,buffer&&buffer.length,err&&err.message),err?this.destroy(err):void(this._offset&&(buffer=buffer.slice(this._offset),this._offset=0),this._missingpieceIndex===pieces.length-1?lastPieceLength:pieceLength,getPieceDownloaded=pieceIndex=>{const len=pieceIndex===pieces.length-1?lastPieceLength:pieceLength;return bitfield.get(pieceIndex)?len:len-pieces[pieceIndex].missing};let downloaded=0;for(let index=start;index<=end;index+=1){const pieceDownloaded=getPieceDownloaded(index);if(downloaded+=pieceDownloaded,index===start){const irrelevantFirstPieceBytes=this.offset%pieceLength;downloaded-=_Mathmin(irrelevantFirstPieceBytes,pieceDownloaded)}if(index===end){const irrelevantLastPieceBytes=getPieceLength(end)-(this.offset+this.length)%pieceLength;downloaded-=_Mathmin(irrelevantLastPieceBytes,pieceDownloaded)}}return downloaded}get progress(){return this.length?this.downloaded/this.length:0}select(priority){0===this.length||this._torrent.select(this._startPiece,this._endPiece,priority)}deselect(){0===this.length||this._torrent.deselect(this._startPiece,this._endPiece,!1)}createReadStream(opts){if(0===this.length){const empty=new PassThrough;return queueMicrotask(()=>{empty.end()}),empty}const fileStream=new FileStream(this,opts);return this._fileStreams.add(fileStream),fileStream.once("close",()=>{this._fileStreams.delete(fileStream)}),fileStream}getBuffer(cb){streamToBuffer(this.createReadStream(),this.length,cb)}getBlob(cb){if("undefined"==typeof window)throw new Error("browser-only method");const writeStream=new BlobWriteStream(blob=>{cb(null,blob)},{mimeType:this._getMimeType()});this.createReadStream().pipe(writeStream)}getBlobURL(cb){this.getBlob((_err,blob)=>{cb(null,URL.createObjectURL(blob))})}appendTo(elem,opts,cb){if("undefined"==typeof window)throw new Error("browser-only method");render.append(this,elem,opts,cb)}renderTo(elem,opts,cb){if("undefined"==typeof window)throw new Error("browser-only method");render.render(this,elem,opts,cb)}_serve(req){const res={status:200,headers:{"Accept-Ranges":"bytes","Content-Type":mime.getType(this.name),"Cache-Control":"no-cache, no-store, must-revalidate, max-age=0",Expires:"0"},body:"HEAD"===req.method?"":"STREAM"};"document"===req.destination&&(res.headers["Content-Type"]="application/octet-stream",res.headers["Content-Disposition"]="attachment",res.body="DOWNLOAD");let range=rangeParser(this.length,req.headers.range||"");range.constructor===Array?(res.status=206,range=range[0],res.headers["Content-Range"]=`bytes ${range.start}-${range.end}/${this.length}`,res.headers["Content-Length"]=`${range.end-range.start+1}`):res.headers["Content-Length"]=this.length;const stream="GET"===req.method&&this.createReadStream(range);let pipe=null;return stream&&this.emit("stream",{stream,req,file:this},piped=>{pipe=piped,eos(piped,()=>{piped&&piped.destroy(),stream.destroy()})}),[res,pipe||stream,pipe&&stream]}getStreamURL(cb=()=>{}){if("undefined"==typeof window)throw new Error("browser-only method");if(!this._serviceWorker)throw new Error("No worker registered");if("activated"!==this._serviceWorker.state)throw new Error("Worker isn't activated");const workerPath=this._serviceWorker.scriptURL.slice(0,this._serviceWorker.scriptURL.lastIndexOf("/")+1).slice(window.location.origin.length),url=`${workerPath}webtorrent/${this._torrent.infoHash}/${encodeURI(this.path)}`;cb(null,url)}streamTo(elem,cb=()=>{}){if("undefined"==typeof window)throw new Error("browser-only method");if(!this._serviceWorker)throw new Error("No worker registered");if("activated"!==this._serviceWorker.state)throw new Error("Worker isn't activated");const workerPath=this._serviceWorker.scriptURL.slice(0,this._serviceWorker.scriptURL.lastIndexOf("/")+1).slice(window.location.origin.length);elem.src=`${workerPath}webtorrent/${this._torrent.infoHash}/${encodeURI(this.path)}`,cb(null,elem)}_getMimeType(){return render.mime[path.extname(this.name).toLowerCase()]}_destroy(){this._destroyed=!0,this._torrent=null;for(const fileStream of this._fileStreams)fileStream.destroy();this._fileStreams.clear()}}},{"./file-stream.js":1,"end-of-stream":121,events:123,"fast-blob-stream":125,mime:165,path:185,"queue-microtask":206,"range-parser":211,"render-media":229,"stream-with-known-length-to-buffer":263,streamx:264}],3:[function(require,module,exports){const EventEmitter=require("events"),{Transform}=require("stream"),arrayRemove=require("unordered-array-remove"),debugFactory=require("debug"),Wire=require("bittorrent-protocol"),debug=debugFactory("webtorrent:peer");let secure=!1;exports.enableSecure=()=>{secure=!0},exports.createWebRTCPeer=(conn,swarm,throttleGroups)=>{const peer=new Peer(conn.id,"webrtc");if(peer.conn=conn,peer.swarm=swarm,peer.throttleGroups=throttleGroups,peer.conn.connected)peer.onConnect();else{const cleanup=()=>{peer.conn.removeListener("connect",onConnect),peer.conn.removeListener("error",onError)},onConnect=()=>{cleanup(),peer.onConnect()},onError=err=>{cleanup(),peer.destroy(err)};peer.conn.once("connect",onConnect),peer.conn.once("error",onError),peer.startConnectTimeout()}return peer},exports.createTCPIncomingPeer=(conn,throttleGroups)=>_createIncomingPeer(conn,"tcpIncoming",throttleGroups),exports.createUTPIncomingPeer=(conn,throttleGroups)=>_createIncomingPeer(conn,"utpIncoming",throttleGroups),exports.createTCPOutgoingPeer=(addr,swarm,throttleGroups)=>_createOutgoingPeer(addr,swarm,"tcpOutgoing",throttleGroups),exports.createUTPOutgoingPeer=(addr,swarm,throttleGroups)=>_createOutgoingPeer(addr,swarm,"utpOutgoing",throttleGroups);const _createIncomingPeer=(conn,type,throttleGroups)=>{const addr=`${conn.remoteAddress}:${conn.remotePort}`,peer=new Peer(addr,type);return peer.conn=conn,peer.addr=addr,peer.throttleGroups=throttleGroups,peer.onConnect(),peer},_createOutgoingPeer=(addr,swarm,type,throttleGroups)=>{const peer=new Peer(addr,type);return peer.addr=addr,peer.swarm=swarm,peer.throttleGroups=throttleGroups,peer};exports.createWebSeedPeer=(conn,id,swarm,throttleGroups)=>{const peer=new Peer(id,"webSeed");return peer.swarm=swarm,peer.conn=conn,peer.throttleGroups=throttleGroups,peer.onConnect(),peer};class Peer extends EventEmitter{constructor(id,type){super(),this.id=id,this.type=type,debug("new %s Peer %s",type,id),this.addr=null,this.conn=null,this.swarm=null,this.wire=null,this.connected=!1,this.destroyed=!1,this.timeout=null,this.retries=0,this.sentPe1=!1,this.sentPe2=!1,this.sentPe3=!1,this.sentPe4=!1,this.sentHandshake=!1}onConnect(){if(!this.destroyed){this.connected=!0,debug("Peer %s connected",this.id),clearTimeout(this.connectTimeout);const conn=this.conn;conn.once("end",()=>{this.destroy()}),conn.once("close",()=>{this.destroy()}),conn.once("finish",()=>{this.destroy()}),conn.once("error",err=>{this.destroy(err)});const wire=this.wire=new Wire(this.type,this.retries,secure);wire.once("end",()=>{this.destroy()}),wire.once("close",()=>{this.destroy()}),wire.once("finish",()=>{this.destroy()}),wire.once("error",err=>{this.destroy(err)}),wire.once("pe1",()=>{this.onPe1()}),wire.once("pe2",()=>{this.onPe2()}),wire.once("pe3",()=>{this.onPe3()}),wire.once("pe4",()=>{this.onPe4()}),wire.once("handshake",(infoHash,peerId)=>{this.onHandshake(infoHash,peerId)}),this.startHandshakeTimeout(),this.setThrottlePipes(),this.swarm&&("tcpOutgoing"===this.type?secure&&0===this.retries&&!this.sentPe1?this.sendPe1():!this.sentHandshake&&this.handshake():"tcpIncoming"!==this.type&&!this.sentHandshake&&this.handshake())}}sendPe1(){this.wire.sendPe1(),this.sentPe1=!0}onPe1(){this.sendPe2()}sendPe2(){this.wire.sendPe2(),this.sentPe2=!0}onPe2(){this.sendPe3()}sendPe3(){this.wire.sendPe3(this.swarm.infoHash),this.sentPe3=!0}onPe3(infoHashHash){this.swarm&&(this.swarm.infoHashHash!==infoHashHash&&this.destroy(new Error("unexpected crypto handshake info hash for this swarm")),this.sendPe4())}sendPe4(){this.wire.sendPe4(this.swarm.infoHash),this.sentPe4=!0}onPe4(){this.sentHandshake||this.handshake()}clearPipes(){this.conn.unpipe(),this.wire.unpipe()}setThrottlePipes(){const self=this;this.conn.pipe(this.throttleGroups.down.throttle()).pipe(new Transform({transform(chunk,_,callback){self.emit("download",chunk.length);self.destroyed||callback(null,chunk)}})).pipe(this.wire).pipe(this.throttleGroups.up.throttle()).pipe(new Transform({transform(chunk,_,callback){self.emit("upload",chunk.length);self.destroyed||callback(null,chunk)}})).pipe(this.conn)}onHandshake(infoHash,peerId){if(!this.swarm)return;if(this.destroyed)return;if(this.swarm.destroyed)return this.destroy(new Error("swarm already destroyed"));if(infoHash!==this.swarm.infoHash)return this.destroy(new Error("unexpected handshake info hash for this swarm"));if(peerId===this.swarm.peerId)return this.destroy(new Error("refusing to connect to ourselves"));debug("Peer %s got handshake %s",this.id,infoHash),clearTimeout(this.handshakeTimeout),this.retries=0;let addr=this.addr;!addr&&this.conn.remoteAddress&&this.conn.remotePort&&(addr=`${this.conn.remoteAddress}:${this.conn.remotePort}`),this.swarm._onWire(this.wire,addr);this.swarm&&!this.swarm.destroyed&&(this.sentHandshake||this.handshake())}handshake(){const opts={dht:!this.swarm.private&&!!this.swarm.client.dht,fast:!0};this.wire.handshake(this.swarm.infoHash,this.swarm.client.peerId,opts),this.sentHandshake=!0}startConnectTimeout(){clearTimeout(this.connectTimeout);this.connectTimeout=setTimeout(()=>{this.destroy(new Error("connect timeout"))},{webrtc:25e3,tcpOutgoing:5e3,utpOutgoing:5e3}[this.type]),this.connectTimeout.unref&&this.connectTimeout.unref()}startHandshakeTimeout(){clearTimeout(this.handshakeTimeout),this.handshakeTimeout=setTimeout(()=>{this.destroy(new Error("handshake timeout"))},25e3),this.handshakeTimeout.unref&&this.handshakeTimeout.unref()}destroy(err){if(this.destroyed)return;this.destroyed=!0,this.connected=!1,debug("destroy %s %s (error: %s)",this.type,this.id,err&&(err.message||err)),clearTimeout(this.connectTimeout),clearTimeout(this.handshakeTimeout);const swarm=this.swarm,conn=this.conn,wire=this.wire;this.swarm=null,this.conn=null,this.wire=null,swarm&&wire&&arrayRemove(swarm.wires,swarm.wires.indexOf(wire)),conn&&(conn.on("error",()=>{}),conn.destroy()),wire&&wire.destroy(),swarm&&swarm.removePeer(this.id)}}},{"bittorrent-protocol":32,debug:91,events:123,stream:256,"unordered-array-remove":273}],4:[function(require,module){module.exports=class{constructor(torrent){this._torrent=torrent,this._numPieces=torrent.pieces.length,this._pieces=Array(this._numPieces),this._onWire=wire=>{this.recalculate(),this._initWire(wire)},this._onWireHave=index=>{this._pieces[index]+=1},this._onWireBitfield=()=>{this.recalculate()},this._torrent.wires.forEach(wire=>{this._initWire(wire)}),this._torrent.on("wire",this._onWire),this.recalculate()}getRarestPiece(pieceFilterFunc){let candidates=[],min=1/0;for(let i=0;i{this._cleanupWireEvents(wire)}),this._torrent=null,this._pieces=null,this._onWire=null,this._onWireHave=null,this._onWireBitfield=null}_initWire(wire){wire._onClose=()=>{this._cleanupWireEvents(wire);for(let i=0;i{this.destroyed||this._onParsedTorrent(parsedTorrent)})):parseTorrent.remote(torrentId,(err,parsedTorrent)=>this.destroyed?void 0:err?this._destroy(err):void this._onParsedTorrent(parsedTorrent))}_onParsedTorrent(parsedTorrent){if(!this.destroyed){if(this._processParsedTorrent(parsedTorrent),!this.infoHash)return this._destroy(new Error("Malformed torrent data: No info hash"));(this._rechokeIntervalId=setInterval(()=>{this._rechoke()},1e4),this._rechokeIntervalId.unref&&this._rechokeIntervalId.unref(),this.emit("_infoHash",this.infoHash),!this.destroyed)&&(this.emit("infoHash",this.infoHash),this.destroyed||(this.client.listening?this._onListening():this.client.once("listening",()=>{this._onListening()})))}}_processParsedTorrent(parsedTorrent){this._debugId=parsedTorrent.infoHash.toString("hex").substring(0,7),"undefined"!=typeof this.private&&(parsedTorrent.private=this.private),this.announce&&(parsedTorrent.announce=parsedTorrent.announce.concat(this.announce)),this.client.tracker&&global.WEBTORRENT_ANNOUNCE&&!parsedTorrent.private&&(parsedTorrent.announce=parsedTorrent.announce.concat(global.WEBTORRENT_ANNOUNCE)),this.urlList&&(parsedTorrent.urlList=parsedTorrent.urlList.concat(this.urlList)),parsedTorrent.announce=Array.from(new Set(parsedTorrent.announce)),parsedTorrent.urlList=Array.from(new Set(parsedTorrent.urlList)),Object.assign(this,parsedTorrent),this.magnetURI=parseTorrent.toMagnetURI(parsedTorrent),this.torrentFile=parseTorrent.toTorrentFile(parsedTorrent)}_onListening(){this.destroyed||(this.info?this._onMetadata(this):(this.xs&&this._getMetadataFromServer(),this._startDiscovery()))}_startDiscovery(){if(this.discovery||this.destroyed)return;let trackerOpts=this.client.tracker;trackerOpts&&(trackerOpts=Object.assign({},this.client.tracker,{getAnnounceOpts:()=>{if(!this.destroyed){const opts={uploaded:this.uploaded,downloaded:this.downloaded,left:_Mathmax(this.length-this.downloaded,0)};return this.client.tracker.getAnnounceOpts&&Object.assign(opts,this.client.tracker.getAnnounceOpts()),this._getAnnounceOpts&&Object.assign(opts,this._getAnnounceOpts()),opts}}})),this.peerAddresses&&this.peerAddresses.forEach(peer=>this.addPeer(peer)),this.discovery=new Discovery({infoHash:this.infoHash,announce:this.announce,peerId:this.client.peerId,dht:!this.private&&this.client.dht,tracker:trackerOpts,port:this.client.torrentPort,userAgent:USER_AGENT,lsd:this.client.lsd}),this.discovery.on("error",err=>{this._destroy(err)}),this.discovery.on("peer",(peer,source)=>{this._debug("peer %s discovered via %s",peer,source);"string"==typeof peer&&this.done||this.addPeer(peer)}),this.discovery.on("trackerAnnounce",()=>{this.emit("trackerAnnounce"),0===this.numPeers&&this.emit("noPeers","tracker")}),this.discovery.on("dhtAnnounce",()=>{this.emit("dhtAnnounce"),0===this.numPeers&&this.emit("noPeers","dht")}),this.discovery.on("warning",err=>{this.emit("warning",err)})}_getMetadataFromServer(){function getMetadataFromURL(url,cb){function onResponse(err,res,torrent){if(self.destroyed)return cb(null);if(self.metadata)return cb(null);if(err)return self.emit("warning",new Error(`http error from xs param: ${url}`)),cb(null);if(200!==res.statusCode)return self.emit("warning",new Error(`non-200 status code ${res.statusCode} from xs param: ${url}`)),cb(null);let parsedTorrent;try{parsedTorrent=parseTorrent(torrent)}catch(err){}return parsedTorrent?parsedTorrent.infoHash===self.infoHash?void(self._onMetadata(parsedTorrent),cb(null)):(self.emit("warning",new Error(`got torrent file with incorrect info hash from xs param: ${url}`)),cb(null)):(self.emit("warning",new Error(`got invalid torrent file from xs param: ${url}`)),cb(null))}if(0!==url.indexOf("http://")&&0!==url.indexOf("https://"))return self.emit("warning",new Error(`skipping non-http xs param: ${url}`)),cb(null);let req;try{req=get.concat({url,method:"GET",headers:{"user-agent":USER_AGENT}},onResponse)}catch(err){return self.emit("warning",new Error(`skipping invalid url xs param: ${url}`)),cb(null)}self._xsRequests.push(req)}const self=this,urls=Array.isArray(this.xs)?this.xs:[this.xs],tasks=urls.map(url=>cb=>{getMetadataFromURL(url,cb)});parallel(tasks)}_onMetadata(metadata){if(this.metadata||this.destroyed)return;this._debug("got metadata"),this._xsRequests.forEach(req=>{req.abort()}),this._xsRequests=[];let parsedTorrent;if(metadata&&metadata.infoHash)parsedTorrent=metadata;else try{parsedTorrent=parseTorrent(metadata)}catch(err){return this._destroy(err)}this._processParsedTorrent(parsedTorrent),this.metadata=this.torrentFile,this.client.enableWebSeeds&&this.urlList.forEach(url=>{this.addWebSeed(url)}),this._rarityMap=new RarityMap(this),this.files=this.files.map(file=>new File(this,file));let rawStore=this._preloadedStore;if(rawStore||(rawStore=new this._store(this.pieceLength,{...this.storeOpts,torrent:this,path:this.path,files:this.files,length:this.length,name:this.name+" - "+this.infoHash.slice(0,8),addUID:this.addUID})),0{this.so.includes(i)?this.files[i].select():this.files[i].deselect()}):0!==this.pieces.length&&this.select(0,this.pieces.length-1,!1),this._hashes=this.pieces,this.pieces=this.pieces.map((hash,i)=>{const pieceLength=i===this.pieces.length-1?this.lastPieceLength:this.pieceLength;return new Piece(pieceLength)}),this._reservations=this.pieces.map(()=>[]),this.bitfield=new BitField(this.pieces.length),this.emit("metadata"),!this.destroyed)if(this.skipVerify)this._markAllVerified(),this._onStore();else{const onPiecesVerified=err=>err?this._destroy(err):void(this._debug("done verifying"),this._onStore());this._debug("verifying existing torrent data"),this._fileModtimes&&this._store===FSChunkStore?this.getFileModtimes((err,fileModtimes)=>{if(err)return this._destroy(err);const unchanged=this.files.map((_,index)=>fileModtimes[index]===this._fileModtimes[index]).every(x=>x);unchanged?(this._markAllVerified(),this._onStore()):this._verifyPieces(onPiecesVerified)}):this._verifyPieces(onPiecesVerified)}}getFileModtimes(cb){const ret=[];parallelLimit(this.files.map((file,index)=>cb=>{const filePath=this.addUID?path.join(this.name+" - "+this.infoHash.slice(0,8)):path.join(this.path,file.path);fs.stat(filePath,(err,stat)=>err&&"ENOENT"!==err.code?cb(err):void(ret[index]=stat&&stat.mtime.getTime(),cb(null)))}),FILESYSTEM_CONCURRENCY,err=>{this._debug("done getting file modtimes"),cb(err,ret)})}_verifyPieces(cb){parallelLimit(this.pieces.map((piece,index)=>cb=>{if(this.destroyed)return cb(new Error("torrent is destroyed"));const getOpts={};index===this.pieces.length-1&&(getOpts.length=this.lastPieceLength),this.store.get(index,getOpts,(err,buf)=>this.destroyed?cb(new Error("torrent is destroyed")):err?queueMicrotask(()=>cb(null)):void sha1(buf,hash=>this.destroyed?cb(new Error("torrent is destroyed")):void(hash===this._hashes[index]?(this._debug("piece verified %s",index),this._markVerified(index)):this._debug("piece invalid %s",index),cb(null))))}),FILESYSTEM_CONCURRENCY,cb)}rescanFiles(cb){if(this.destroyed)throw new Error("torrent is destroyed");cb||(cb=noop),this._verifyPieces(err=>err?(this._destroy(err),cb(err)):void(this._checkDone(),cb(null)))}_markAllVerified(){for(let index=0;indexthreshold))return!0;return!1}_onStore(){this.destroyed||(this._debug("on store"),this._startDiscovery(),this.ready=!0,this.emit("ready"),this._checkDone(),this._updateSelections(),this.wires.forEach(wire=>{wire.ut_metadata&&wire.ut_metadata.setMetadata(this.metadata),this._onWireWithMetadata(wire)}))}destroy(opts,cb){return"function"==typeof opts?this.destroy(null,opts):void this._destroy(null,opts,cb)}_destroy(err,opts,cb){if("function"==typeof opts)return this._destroy(err,null,opts);if(!this.destroyed){for(const id in this.destroyed=!0,this._debug("destroy"),this.client._remove(this),clearInterval(this._rechokeIntervalId),this._xsRequests.forEach(req=>{req.abort()}),this._rarityMap&&this._rarityMap.destroy(),this._peers)this.removePeer(id);this.files.forEach(file=>{file instanceof File&&file._destroy()});const tasks=this._servers.map(server=>cb=>{server.destroy(cb)});if(this.discovery&&tasks.push(cb=>{this.discovery.destroy(cb)}),this.store){let destroyStore=this._destroyStoreOnDestroy;opts&&void 0!==opts.destroyStore&&(destroyStore=opts.destroyStore),tasks.push(cb=>{destroyStore?this.store.destroy(cb):this.store.close(cb)})}parallel(tasks,cb),err&&(0===this.listenerCount("error")?this.client.emit("error",err):this.emit("error",err)),this.emit("close"),this.client=null,this.files=[],this.discovery=null,this.store=null,this._rarityMap=null,this._peers=null,this._servers=null,this._xsRequests=null}}addPeer(peer){if(this.destroyed)throw new Error("torrent is destroyed");if(!this.infoHash)throw new Error("addPeer() must not be called before the `infoHash` event");let host;if(this.client.blocked){if("string"==typeof peer){let parts;try{parts=addrToIPPort(peer)}catch(e){return this._debug("ignoring peer: invalid %s",peer),this.emit("invalidPeer",peer),!1}host=parts[0]}else"string"==typeof peer.remoteAddress&&(host=peer.remoteAddress);if(host&&this.client.blocked.contains(host))return this._debug("ignoring peer: blocked %s",peer),"string"!=typeof peer&&peer.destroy(),this.emit("blockedPeer",peer),!1}const type=this.client.utp&&this._isIPv4(host)?"utp":"tcp",wasAdded=!!this._addPeer(peer,type);return wasAdded?this.emit("peer",peer):this.emit("invalidPeer",peer),wasAdded}_addPeer(peer,type){if(this.destroyed)return"string"!=typeof peer&&peer.destroy(),null;if("string"==typeof peer&&!this._validAddr(peer))return this._debug("ignoring peer: invalid %s",peer),null;const id=peer&&peer.id||peer;if(this._peers[id])return this._debug("ignoring peer: duplicate (%s)",id),"string"!=typeof peer&&peer.destroy(),null;if(this.paused)return this._debug("ignoring peer: torrent is paused"),"string"!=typeof peer&&peer.destroy(),null;this._debug("add peer %s",id);let newPeer;return newPeer="string"==typeof peer?"utp"===type?Peer.createUTPOutgoingPeer(peer,this,this.client.throttleGroups):Peer.createTCPOutgoingPeer(peer,this,this.client.throttleGroups):Peer.createWebRTCPeer(peer,this,this.client.throttleGroups),this._registerPeer(newPeer),"string"==typeof peer&&(this._queue.push(newPeer),this._drain()),newPeer}addWebSeed(urlOrConn){if(this.destroyed)throw new Error("torrent is destroyed");let id,conn;if("string"==typeof urlOrConn){if(id=urlOrConn,!/^https?:\/\/.+/.test(id))return this.emit("warning",new Error(`ignoring invalid web seed: ${id}`)),void this.emit("invalidPeer",id);if(this._peers[id])return this.emit("warning",new Error(`ignoring duplicate web seed: ${id}`)),void this.emit("invalidPeer",id);conn=new WebConn(id,this)}else{if(!(urlOrConn&&"string"==typeof urlOrConn.connId))return void this.emit("warning",new Error("addWebSeed must be passed a string or connection object with id property"));if(conn=urlOrConn,id=conn.connId,this._peers[id])return this.emit("warning",new Error(`ignoring duplicate web seed: ${id}`)),void this.emit("invalidPeer",id)}this._debug("add web seed %s",id);const newPeer=Peer.createWebSeedPeer(conn,id,this,this.client.throttleGroups);this._registerPeer(newPeer),this.emit("peer",id)}_addIncomingPeer(peer){return this.destroyed?peer.destroy(new Error("torrent is destroyed")):this.paused?peer.destroy(new Error("torrent is paused")):void(this._debug("add incoming peer %s",peer.id),this._registerPeer(peer))}_registerPeer(newPeer){newPeer.on("download",downloaded=>{this.destroyed||(this.received+=downloaded,this._downloadSpeed(downloaded),this.client._downloadSpeed(downloaded),this.emit("download",downloaded),this.destroyed||this.client.emit("download",downloaded))}),newPeer.on("upload",uploaded=>{this.destroyed||(this.uploaded+=uploaded,this._uploadSpeed(uploaded),this.client._uploadSpeed(uploaded),this.emit("upload",uploaded),this.destroyed||this.client.emit("upload",uploaded))}),this._peers[newPeer.id]=newPeer,this._peersLength+=1}removePeer(peer){const id=peer?.id||peer;(peer&&!peer.id&&(peer=this._peers?.[id]),!!peer)&&(peer.destroy(),this.destroyed||(this._debug("removePeer %s",id),delete this._peers[id],this._peersLength-=1,this._drain()))}select(start,end,priority,notify){if(this.destroyed)throw new Error("torrent is destroyed");if(0>start||endb.priority-a.priority),this._updateSelections()}deselect(start,end,priority){if(this.destroyed)throw new Error("torrent is destroyed");priority=+priority||0,this._debug("deselect %s-%s (priority %s)",start,end,priority);for(let i=0;ithis.destroyed||this.client.dht.destroyed?void 0:wire.remoteAddress?0===port||65536{this._debug("wire timeout (%s)",addr),wire.destroy()}),"webSeed"!==wire.type&&wire.setTimeout(3e4,!0),wire.setKeepAlive(!0),wire.use(utMetadata(this.metadata)),wire.ut_metadata.on("warning",err=>{this._debug("ut_metadata warning: %s",err.message)}),this.metadata||(wire.ut_metadata.on("metadata",metadata=>{this._debug("got metadata via ut_metadata"),this._onMetadata(metadata)}),wire.ut_metadata.fetch()),"function"!=typeof utPex||this.private||(wire.use(utPex()),wire.ut_pex.on("peer",peer=>{this.done||(this._debug("ut_pex: got peer: %s (from %s)",peer,addr),this.addPeer(peer))}),wire.ut_pex.on("dropped",peer=>{const peerObj=this._peers[peer];peerObj&&!peerObj.connected&&(this._debug("ut_pex: dropped peer: %s (from %s)",peer,addr),this.removePeer(peer))}),wire.once("close",()=>{wire.ut_pex.reset()})),wire.use(ltDontHave()),this.emit("wire",wire,addr),this.ready&&queueMicrotask(()=>{this._onWireWithMetadata(wire)})}_onWireWithMetadata(wire){let timeoutId=null;const onChokeTimeout=()=>{this.destroyed||wire.destroyed||(this._numQueued>2*(this._numConns-this.numPeers)&&wire.amInterested?wire.destroy():(timeoutId=setTimeout(onChokeTimeout,CHOKE_TIMEOUT),timeoutId.unref&&timeoutId.unref()))};let i;const updateSeedStatus=()=>{if(wire.peerPieces.buffer.length===this.bitfield.buffer.length){for(i=0;i{updateSeedStatus(),this._update(),this._updateWireInterest(wire)}),wire.on("have",()=>{updateSeedStatus(),this._update(),this._updateWireInterest(wire)}),wire.lt_donthave.on("donthave",()=>{updateSeedStatus(),this._update(),this._updateWireInterest(wire)}),wire.on("have-all",()=>{wire.isSeeder=!0,wire.choke(),this._update(),this._updateWireInterest(wire)}),wire.on("have-none",()=>{wire.isSeeder=!1,this._update(),this._updateWireInterest(wire)}),wire.on("allowed-fast",()=>{this._update()}),wire.once("interested",()=>{wire.unchoke()}),wire.once("close",()=>{clearTimeout(timeoutId)}),wire.on("choke",()=>{clearTimeout(timeoutId),timeoutId=setTimeout(onChokeTimeout,CHOKE_TIMEOUT),timeoutId.unref&&timeoutId.unref()}),wire.on("unchoke",()=>{clearTimeout(timeoutId),this._update()}),wire.on("request",(index,offset,length,cb)=>length>131072?wire.destroy():void(this.pieces[index]||this.store.get(index,{offset,length},cb))),wire.hasFast&&this._hasAllPieces()?wire.haveAll():wire.hasFast&&this._hasNoPieces()?wire.haveNone():wire.bitfield(this.bitfield),this._updateWireInterest(wire),wire.peerExtensions.dht&&this.client.dht&&this.client.dht.listening&&wire.port(this.client.dht.address().port),"webSeed"!==wire.type&&(timeoutId=setTimeout(onChokeTimeout,CHOKE_TIMEOUT),timeoutId.unref&&timeoutId.unref()),wire.isSeeder=!1,updateSeedStatus()}_updateSelections(){!this.ready||this.destroyed||(queueMicrotask(()=>{this._gcSelections()}),this._updateInterest(),this._update())}_gcSelections(){for(let i=0;ithis._updateWireInterest(wire));prev===this._amInterested||(this._amInterested?this.emit("interested"):this.emit("uninterested"))}_updateWireInterest(wire){let interested=!1;for(let index=0;index{self._updateWire(wire)},{timeout:250}):self._updateWire(wire)}_updateWire(wire){function genPieceFilterFunc(start,end,tried,rank){return i=>i>=start&&i<=end&&!(i in tried)&&wire.peerPieces.get(i)&&(!rank||rank(i))}function speedRanker(){const speed=wire.downloadSpeed()||1;if(speed>SPEED_THRESHOLD)return()=>!0;const secs=_Mathmax(1,wire.requests.length)*Piece.BLOCK_LENGTH/speed;let tries=10,ptr=0;return index=>{if(!tries||self.bitfield.get(index))return!0;for(let missing=self.pieces[index].missing;ptr=maxOutstandingRequests)return!0;const rank=speedRanker();for(let i=0;ipiece));){for(;self._request(wire,piece,self._critical[piece]||hotswap)&&wire.requests.length=minOutstandingRequests)return;const maxOutstandingRequests=getBlockPipelineLength(wire,PIPELINE_MAX_DURATION);return wire.peerChoking?void(wire.hasFast&&0=maxOutstandingRequests)return!1;for(const piece of wire.peerAllowedFastSet){if(wire.peerPieces.get(piece)&&!self.bitfield.get(piece))for(;self._request(wire,piece,!1)&&wire.requests.lengthpiece));){if(self._request(wire,piece,!1))return;tried[piece]=!0,tries+=1}}else for(piece=next.to;piece>=next.from+next.offset;--piece)if(wire.peerPieces.get(piece)&&self._request(wire,piece,!1))return}}()}_rechoke(){if(this.ready){const wireStack=this.wires.map(wire=>({wire,random:Math.random()})).sort((objA,objB)=>{const wireA=objA.wire,wireB=objB.wire;return wireA.downloadSpeed()===wireB.downloadSpeed()?wireA.uploadSpeed()===wireB.uploadSpeed()?wireA.amChoking===wireB.amChoking?objA.random-objB.random:wireA.amChoking?-1:1:wireA.uploadSpeed()-wireB.uploadSpeed():wireA.downloadSpeed()-wireB.downloadSpeed()}).map(obj=>obj.wire);0>=this._rechokeOptimisticTime?this._rechokeOptimisticWire=null:this._rechokeOptimisticTime-=1;for(let numInterestedUnchoked=0;0wire.peerInterested);if(0wire!==this._rechokeOptimisticWire).forEach(wire=>wire.choke())}}_hotswap(wire,index){const speed=wire.downloadSpeed();if(speed=SPEED_THRESHOLD||2*otherSpeed>speed||otherSpeed>minSpeed||(minWire=otherWire,minSpeed=otherSpeed)}if(!minWire)return!1;for(i=0;i{self._update()})}const self=this,numRequests=wire.requests.length,isWebSeed="webSeed"===wire.type;if(self.bitfield.get(index))return!1;const maxOutstandingRequests=isWebSeed?_Mathmin(getPiecePipelineLength(wire,PIPELINE_MAX_DURATION,self.pieceLength),self.maxWebConns):getBlockPipelineLength(wire,PIPELINE_MAX_DURATION);if(numRequests>=maxOutstandingRequests)return!1;const piece=self.pieces[index];let reservation=isWebSeed?piece.reserveRemaining():piece.reserve();if(-1===reservation&&hotswap&&self._hotswap(wire,index)&&(reservation=isWebSeed?piece.reserveRemaining():piece.reserve()),-1===reservation)return!1;let r=self._reservations[index];r||(r=self._reservations[index]=[]);let i=r.indexOf(null);-1===i&&(i=r.length),r[i]=wire;const chunkOffset=piece.chunkOffset(reservation),chunkLength=isWebSeed?piece.chunkLengthRemaining(reservation):piece.chunkLength(reservation);return wire.request(index,chunkOffset,chunkLength,function onChunk(err,chunk){if(self.destroyed)return;if(!self.ready)return self.once("ready",()=>{onChunk(err,chunk)});if(r[i]===wire&&(r[i]=null),piece!==self.pieces[index])return onUpdateTick();if(err)return self._debug("error getting piece %s (offset: %s length: %s) from %s: %s",index,chunkOffset,chunkLength,`${wire.remoteAddress}:${wire.remotePort}`,err.message),isWebSeed?piece.cancelRemaining(reservation):piece.cancel(reservation),void onUpdateTick();if(self._debug("got piece %s (offset: %s length: %s) from %s",index,chunkOffset,chunkLength,`${wire.remoteAddress}:${wire.remotePort}`),!piece.set(reservation,chunk,wire))return onUpdateTick();const buf=piece.flush();sha1(buf,hash=>{self.destroyed||(hash===self._hashes[index]?(self._debug("piece verified %s",index),self.store.put(index,buf,err=>err?void self._destroy(err):void(self.pieces[index]=null,self._markVerified(index),self.wires.forEach(wire=>{wire.have(index)}),self._checkDone()&&!self.destroyed&&self.discovery.complete(),onUpdateTick()))):(self.pieces[index]=new Piece(piece.length),self.emit("warning",new Error(`Piece ${index} failed verification`)),onUpdateTick()))})}),!0}_checkDone(){if(this.destroyed)return;this.files.forEach(file=>{if(!file.done){for(let i=file._startPiece;i<=file._endPiece;++i)if(!this.bitfield.get(i))return;file.done=!0,file.emit("done"),this._debug(`file done: ${file.name}`)}});let done=!0;for(const selection of this._selections){for(let piece=selection.from;piece<=selection.to;piece++)if(!this.bitfield.get(piece)){done=!1;break}if(!done)break}return!this.done&&done?(this.done=!0,this._debug(`torrent done: ${this.infoHash}`),this.emit("done")):this.done=!1,this._gcSelections(),done}load(streams,cb){if(this.destroyed)throw new Error("torrent is destroyed");if(!this.ready)return this.once("ready",()=>{this.load(streams,cb)});Array.isArray(streams)||(streams=[streams]),cb||(cb=noop);const readable=Readable.from(joinIterator(streams)),writable=new ChunkStoreWriteStream(this.store,this.pieceLength);pump(readable,writable,err=>err?cb(err):void(this._markAllVerified(),this._checkDone(),cb(null)))}createServer(requestListener){if("function"!=typeof Server)throw new Error("node.js-only method");if(this.destroyed)throw new Error("torrent is destroyed");const server=new Server(this,requestListener);return this._servers.push(server),server}pause(){this.destroyed||(this._debug("pause"),this.paused=!0)}resume(){this.destroyed||(this._debug("resume"),this.paused=!1,this._drain())}_debug(){const args=[].slice.call(arguments);args[0]=`[${this.client?this.client._debugId:"No Client"}] [${this._debugId}] ${args[0]}`,debug(...args)}_drain(){if(this._debug("_drain numConns %s maxConns %s",this._numConns,this.client.maxConns),"function"!=typeof net.connect||this.destroyed||this.paused||this._numConns>=this.client.maxConns)return;this._debug("drain (%s queued, %s/%s peers)",this._numQueued,this.numPeers,this.client.maxConns);const peer=this._queue.shift();if(!peer)return;this._debug("%s connect attempt to %s",peer.type,peer.addr);const parts=addrToIPPort(peer.addr),opts={host:parts[0],port:parts[1]};peer.conn=this.client.utp&&"utpOutgoing"===peer.type?utp.connect(opts.port,opts.host):net.connect(opts);const conn=peer.conn;conn.once("connect",()=>{this.destroyed||peer.onConnect()}),conn.once("error",err=>{peer.destroy(err)}),peer.startConnectTimeout(),conn.on("close",()=>{if(!this.destroyed){if(peer.retries>=RECONNECT_WAIT.length){if(this.client.utp){const newPeer=this._addPeer(peer.addr,"tcp");newPeer&&(newPeer.retries=0)}else this._debug("conn %s closed: will not re-add (max %s attempts)",peer.addr,RECONNECT_WAIT.length);return}const ms=RECONNECT_WAIT[peer.retries];this._debug("conn %s closed: will re-add to queue in %sms (attempt %s)",peer.addr,ms,peer.retries+1);const reconnectTimeout=setTimeout(()=>{if(!this.destroyed){const host=addrToIPPort(peer.addr)[0],type=this.client.utp&&this._isIPv4(host)?"utp":"tcp",newPeer=this._addPeer(peer.addr,type);newPeer&&(newPeer.retries=peer.retries+1)}},ms);reconnectTimeout.unref&&reconnectTimeout.unref()}})}_validAddr(addr){let parts;try{parts=addrToIPPort(addr)}catch(e){return!1}const host=parts[0],port=parts[1];return 0port&&("127.0.0.1"!==host||port!==this.client.torrentPort)}_isIPv4(addr){const IPv4Pattern=/^((?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])[.]){3}(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/;return IPv4Pattern.test(addr)}}}).call(this)}).call(this,require("_process"),"undefined"==typeof global?"undefined"==typeof self?"undefined"==typeof window?{}:window:self:global)},{"../package.json":282,"./file.js":2,"./peer.js":3,"./rarity-map.js":4,"./server.js":42,"./utp.js":42,"./webconn.js":6,_process:193,"addr-to-ip-port":7,bitfield:31,"cache-chunk-store":78,"chunk-store-stream/write":79,cpus:82,debug:91,events:123,fs:42,"fs-chunk-store":161,"immediate-chunk-store":146,"join-async-iterator":150,lt_donthave:157,"memory-chunk-store":161,net:42,os:42,"parse-torrent":184,path:185,pump:201,"queue-microtask":206,"random-iterate":208,"run-parallel":233,"run-parallel-limit":232,"simple-get":246,"simple-sha1":248,streamx:264,throughput:268,"torrent-discovery":270,"torrent-piece":271,ut_metadata:276,ut_pex:42}],6:[function(require,module,exports){(function(Buffer){(function(){const{default:BitField}=require("bitfield"),debugFactory=require("debug"),get=require("simple-get"),ltDontHave=require("lt_donthave"),sha1=require("simple-sha1"),Wire=require("bittorrent-protocol"),debug=debugFactory("webtorrent:webconn"),VERSION=require("../package.json").version,SOCKET_TIMEOUT=6e4,RETRY_DELAY=1e4;class WebConn extends Wire{constructor(url,torrent){super(),this.url=url,this.connId=url,this.webPeerId=sha1.sync(url),this._torrent=torrent,this._init()}_init(){this.setKeepAlive(!0),this.use(ltDontHave()),this.once("handshake",(infoHash,peerId)=>{if(this.destroyed)return;this.handshake(infoHash,this.webPeerId);const numPieces=this._torrent.pieces.length,bitfield=new BitField(numPieces);for(let i=0;i<=numPieces;i++)bitfield.set(i,!0);this.bitfield(bitfield)}),this.once("interested",()=>{debug("interested"),this.unchoke()}),this.on("uninterested",()=>{debug("uninterested")}),this.on("choke",()=>{debug("choke")}),this.on("unchoke",()=>{debug("unchoke")}),this.on("bitfield",()=>{debug("bitfield")}),this.lt_donthave.on("donthave",()=>{debug("donthave")}),this.on("request",(pieceIndex,offset,length,callback)=>{debug("request pieceIndex=%d offset=%d length=%d",pieceIndex,offset,length),this.httpRequest(pieceIndex,offset,length,(err,data)=>{if(err){this.lt_donthave.donthave(pieceIndex);const retryTimeout=setTimeout(()=>{this.destroyed||this.have(pieceIndex)},RETRY_DELAY);retryTimeout.unref&&retryTimeout.unref()}callback(err,data)})})}httpRequest(pieceIndex,offset,length,cb){const pieceOffset=pieceIndex*this._torrent.pieceLength,rangeStart=pieceOffset+offset,rangeEnd=rangeStart+length-1,files=this._torrent.files;let requests;if(1>=files.length)requests=[{url:this.url,start:rangeStart,end:rangeEnd}];else{const requestedFiles=files.filter(file=>file.offset<=rangeEnd&&file.offset+file.length>rangeStart);if(1>requestedFiles.length)return cb(new Error("Could not find file corresponding to web seed range request"));requests=requestedFiles.map(requestedFile=>{const fileEnd=requestedFile.offset+requestedFile.length-1,url=this.url+("/"===this.url[this.url.length-1]?"":"/")+requestedFile.path.replace(this._torrent.path,"");return{url,fileOffsetInRange:_Mathmax(requestedFile.offset-rangeStart,0),start:_Mathmax(rangeStart-requestedFile.offset,0),end:_Mathmin(fileEnd,rangeEnd-requestedFile.offset)}})}let numRequestsSucceeded=0,hasError=!1,ret;1{function onResponse(res,data){return 200>res.statusCode||300<=res.statusCode?hasError?void 0:(hasError=!0,cb(new Error(`Unexpected HTTP status code ${res.statusCode}`))):void(debug("Got data of length %d",data.length),1===requests.length?cb(null,data):(data.copy(ret,request.fileOffsetInRange),++numRequestsSucceeded===requests.length&&cb(null,ret)))}const url=request.url,start=request.start,end=request.end;debug("Requesting url=%s pieceIndex=%d offset=%d length=%d start=%d end=%d",url,pieceIndex,offset,length,start,end);const opts={url,method:"GET",headers:{"user-agent":`WebTorrent/${VERSION} (https://webtorrent.io)`,range:`bytes=${start}-${end}`},timeout:SOCKET_TIMEOUT};get.concat(opts,(err,res,data)=>hasError?void 0:err?"undefined"==typeof window||url.startsWith(`${window.location.origin}/`)?(hasError=!0,cb(err)):get.head(url,(errHead,res)=>hasError?void 0:errHead?(hasError=!0,cb(errHead)):200>res.statusCode||300<=res.statusCode?(hasError=!0,cb(new Error(`Unexpected HTTP status code ${res.statusCode}`))):res.url===url?(hasError=!0,cb(err)):void(opts.url=res.url,get.concat(opts,(err,res,data)=>hasError?void 0:err?(hasError=!0,cb(err)):void onResponse(res,data)))):void onResponse(res,data))})}destroy(){super.destroy(),this._torrent=null}}module.exports=WebConn}).call(this)}).call(this,require("buffer").Buffer)},{"../package.json":282,bitfield:31,"bittorrent-protocol":32,buffer:76,debug:91,lt_donthave:157,"simple-get":246,"simple-sha1":248}],7:[function(require,module,exports){const ADDR_RE=/^\[?([^\]]+)]?:(\d+)$/;let cache=new Map;module.exports=function addrToIPPort(addr){if(1e5===cache.size&&cache.clear(),!cache.has(addr)){const m=ADDR_RE.exec(addr);if(!m)throw new Error(`invalid addr: ${addr}`);cache.set(addr,[m[1],+m[2]])}return cache.get(addr)}},{}],8:[function(require,module,exports){"use strict";const asn1=exports;asn1.bignum=require("bn.js"),asn1.define=require("./asn1/api").define,asn1.base=require("./asn1/base"),asn1.constants=require("./asn1/constants"),asn1.decoders=require("./asn1/decoders"),asn1.encoders=require("./asn1/encoders")},{"./asn1/api":9,"./asn1/base":11,"./asn1/constants":15,"./asn1/decoders":17,"./asn1/encoders":20,"bn.js":22}],9:[function(require,module,exports){"use strict";function Entity(name,body){this.name=name,this.body=body,this.decoders={},this.encoders={}}const encoders=require("./encoders"),decoders=require("./decoders"),inherits=require("inherits"),api=exports;api.define=function define(name,body){return new Entity(name,body)},Entity.prototype._createNamed=function createNamed(Base){function Generated(entity){this._initNamed(entity,name)}const name=this.name;return inherits(Generated,Base),Generated.prototype._initNamed=function _initNamed(entity,name){Base.call(this,entity,name)},new Generated(this)},Entity.prototype._getDecoder=function _getDecoder(enc){return enc=enc||"der",this.decoders.hasOwnProperty(enc)||(this.decoders[enc]=this._createNamed(decoders[enc])),this.decoders[enc]},Entity.prototype.decode=function decode(data,enc,options){return this._getDecoder(enc).decode(data,options)},Entity.prototype._getEncoder=function _getEncoder(enc){return enc=enc||"der",this.encoders.hasOwnProperty(enc)||(this.encoders[enc]=this._createNamed(encoders[enc])),this.encoders[enc]},Entity.prototype.encode=function encode(data,enc,reporter){return this._getEncoder(enc).encode(data,reporter)}},{"./decoders":17,"./encoders":20,inherits:147}],10:[function(require,module,exports){"use strict";function DecoderBuffer(base,options){return Reporter.call(this,options),Buffer.isBuffer(base)?void(this.base=base,this.offset=0,this.length=base.length):void this.error("Input not Buffer")}function EncoderBuffer(value,reporter){if(Array.isArray(value))this.length=0,this.value=value.map(function(item){return EncoderBuffer.isEncoderBuffer(item)||(item=new EncoderBuffer(item,reporter)),this.length+=item.length,item},this);else if("number"==typeof value){if(!(0<=value&&255>=value))return reporter.error("non-byte EncoderBuffer value");this.value=value,this.length=1}else if("string"==typeof value)this.value=value,this.length=Buffer.byteLength(value);else if(Buffer.isBuffer(value))this.value=value,this.length=value.length;else return reporter.error("Unsupported type: "+typeof value)}const inherits=require("inherits"),Reporter=require("../base/reporter").Reporter,Buffer=require("safer-buffer").Buffer;inherits(DecoderBuffer,Reporter),exports.DecoderBuffer=DecoderBuffer,DecoderBuffer.isDecoderBuffer=function isDecoderBuffer(data){if(data instanceof DecoderBuffer)return!0;const isCompatible="object"==typeof data&&Buffer.isBuffer(data.base)&&"DecoderBuffer"===data.constructor.name&&"number"==typeof data.offset&&"number"==typeof data.length&&"function"==typeof data.save&&"function"==typeof data.restore&&"function"==typeof data.isEmpty&&"function"==typeof data.readUInt8&&"function"==typeof data.skip&&"function"==typeof data.raw;return isCompatible},DecoderBuffer.prototype.save=function save(){return{offset:this.offset,reporter:Reporter.prototype.save.call(this)}},DecoderBuffer.prototype.restore=function restore(save){const res=new DecoderBuffer(this.base);return res.offset=save.offset,res.length=this.offset,this.offset=save.offset,Reporter.prototype.restore.call(this,save.reporter),res},DecoderBuffer.prototype.isEmpty=function isEmpty(){return this.offset===this.length},DecoderBuffer.prototype.readUInt8=function readUInt8(fail){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(fail||"DecoderBuffer overrun")},DecoderBuffer.prototype.skip=function skip(bytes,fail){if(!(this.offset+bytes<=this.length))return this.error(fail||"DecoderBuffer overrun");const res=new DecoderBuffer(this.base);return res._reporterState=this._reporterState,res.offset=this.offset,res.length=this.offset+bytes,this.offset+=bytes,res},DecoderBuffer.prototype.raw=function raw(save){return this.base.slice(save?save.offset:this.offset,this.length)},exports.EncoderBuffer=EncoderBuffer,EncoderBuffer.isEncoderBuffer=function isEncoderBuffer(data){if(data instanceof EncoderBuffer)return!0;const isCompatible="object"==typeof data&&"EncoderBuffer"===data.constructor.name&&"number"==typeof data.length&&"function"==typeof data.join;return isCompatible},EncoderBuffer.prototype.join=function join(out,offset){return(out||(out=Buffer.alloc(this.length)),offset||(offset=0),0===this.length)?out:(Array.isArray(this.value)?this.value.forEach(function(item){item.join(out,offset),offset+=item.length}):("number"==typeof this.value?out[offset]=this.value:"string"==typeof this.value?out.write(this.value,offset):Buffer.isBuffer(this.value)&&this.value.copy(out,offset),offset+=this.length),out)}},{"../base/reporter":13,inherits:147,"safer-buffer":236}],11:[function(require,module,exports){"use strict";const base=exports;base.Reporter=require("./reporter").Reporter,base.DecoderBuffer=require("./buffer").DecoderBuffer,base.EncoderBuffer=require("./buffer").EncoderBuffer,base.Node=require("./node")},{"./buffer":10,"./node":12,"./reporter":13}],12:[function(require,module,exports){"use strict";function Node(enc,parent,name){const state={};this._baseState=state,state.name=name,state.enc=enc,state.parent=parent||null,state.children=null,state.tag=null,state.args=null,state.reverseArgs=null,state.choice=null,state.optional=!1,state.any=!1,state.obj=!1,state.use=null,state.useDecoder=null,state.key=null,state["default"]=null,state.explicit=null,state.implicit=null,state.contains=null,state.parent||(state.children=[],this._wrap())}const Reporter=require("../base/reporter").Reporter,EncoderBuffer=require("../base/buffer").EncoderBuffer,DecoderBuffer=require("../base/buffer").DecoderBuffer,assert=require("minimalistic-assert"),tags=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],methods=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(tags),overrided=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];module.exports=Node;const stateProps=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];Node.prototype.clone=function clone(){const state=this._baseState,cstate={};stateProps.forEach(function(prop){cstate[prop]=state[prop]});const res=new this.constructor(cstate.parent);return res._baseState=cstate,res},Node.prototype._wrap=function wrap(){const state=this._baseState;methods.forEach(function(method){this[method]=function _wrappedMethod(){const clone=new this.constructor(this);return state.children.push(clone),clone[method].apply(clone,arguments)}},this)},Node.prototype._init=function init(body){const state=this._baseState;assert(null===state.parent),body.call(this),state.children=state.children.filter(function(child){return child._baseState.parent===this},this),assert.equal(state.children.length,1,"Root node can have only one child")},Node.prototype._useArgs=function useArgs(args){const state=this._baseState,children=args.filter(function(arg){return arg instanceof this.constructor},this);args=args.filter(function(arg){return!(arg instanceof this.constructor)},this),0!==children.length&&(assert(null===state.children),state.children=children,children.forEach(function(child){child._baseState.parent=this},this)),0!==args.length&&(assert(null===state.args),state.args=args,state.reverseArgs=args.map(function(arg){if("object"!=typeof arg||arg.constructor!==Object)return arg;const res={};return Object.keys(arg).forEach(function(key){key==(0|key)&&(key|=0);const value=arg[key];res[value]=key}),res}))},overrided.forEach(function(method){Node.prototype[method]=function _overrided(){const state=this._baseState;throw new Error(method+" not implemented for encoding: "+state.enc)}}),tags.forEach(function(tag){Node.prototype[tag]=function _tagMethod(){const state=this._baseState,args=Array.prototype.slice.call(arguments);return assert(null===state.tag),state.tag=tag,this._useArgs(args),this}}),Node.prototype.use=function use(item){assert(item);const state=this._baseState;return assert(null===state.use),state.use=item,this},Node.prototype.optional=function optional(){const state=this._baseState;return state.optional=!0,this},Node.prototype.def=function def(val){const state=this._baseState;return assert(null===state["default"]),state["default"]=val,state.optional=!0,this},Node.prototype.explicit=function explicit(num){const state=this._baseState;return assert(null===state.explicit&&null===state.implicit),state.explicit=num,this},Node.prototype.implicit=function implicit(num){const state=this._baseState;return assert(null===state.explicit&&null===state.implicit),state.implicit=num,this},Node.prototype.obj=function obj(){const state=this._baseState,args=Array.prototype.slice.call(arguments);return state.obj=!0,0!==args.length&&this._useArgs(args),this},Node.prototype.key=function key(newKey){const state=this._baseState;return assert(null===state.key),state.key=newKey,this},Node.prototype.any=function any(){const state=this._baseState;return state.any=!0,this},Node.prototype.choice=function choice(obj){const state=this._baseState;return assert(null===state.choice),state.choice=obj,this._useArgs(Object.keys(obj).map(function(key){return obj[key]})),this},Node.prototype.contains=function contains(item){const state=this._baseState;return assert(null===state.use),state.contains=item,this},Node.prototype._decode=function decode(input,options){const state=this._baseState;if(null===state.parent)return input.wrapResult(state.children[0]._decode(input,options));let result=state["default"],present=!0,prevKey=null;if(null!==state.key&&(prevKey=input.enterKey(state.key)),state.optional){let tag=null;if(null===state.explicit?null===state.implicit?null!==state.tag&&(tag=state.tag):tag=state.implicit:tag=state.explicit,null===tag&&!state.any){const save=input.save();try{null===state.choice?this._decodeGeneric(state.tag,input,options):this._decodeChoice(input,options),present=!0}catch(e){present=!1}input.restore(save)}else if(present=this._peekTag(input,tag,state.any),input.isError(present))return present}let prevObj;if(state.obj&&present&&(prevObj=input.enterObject()),present){if(null!==state.explicit){const explicit=this._decodeTag(input,state.explicit);if(input.isError(explicit))return explicit;input=explicit}const start=input.offset;if(null===state.use&&null===state.choice){let save;state.any&&(save=input.save());const body=this._decodeTag(input,null===state.implicit?state.tag:state.implicit,state.any);if(input.isError(body))return body;state.any?result=input.raw(save):input=body}if(options&&options.track&&null!==state.tag&&options.track(input.path(),start,input.length,"tagged"),options&&options.track&&null!==state.tag&&options.track(input.path(),input.offset,input.length,"content"),state.any||(null===state.choice?result=this._decodeGeneric(state.tag,input,options):result=this._decodeChoice(input,options)),input.isError(result))return result;if(state.any||null!==state.choice||null===state.children||state.children.forEach(function decodeChildren(child){child._decode(input,options)}),state.contains&&("octstr"===state.tag||"bitstr"===state.tag)){const data=new DecoderBuffer(result);result=this._getUse(state.contains,input._reporterState.obj)._decode(data,options)}}return state.obj&&present&&(result=input.leaveObject(prevObj)),null!==state.key&&(null!==result||!0===present)?input.leaveKey(prevKey,state.key,result):null!==prevKey&&input.exitKey(prevKey),result},Node.prototype._decodeGeneric=function decodeGeneric(tag,input,options){const state=this._baseState;if("seq"===tag||"set"===tag)return null;return"seqof"===tag||"setof"===tag?this._decodeList(input,tag,state.args[0],options):/str$/.test(tag)?this._decodeStr(input,tag,options):"objid"===tag&&state.args?this._decodeObjid(input,state.args[0],state.args[1],options):"objid"===tag?this._decodeObjid(input,null,null,options):"gentime"===tag||"utctime"===tag?this._decodeTime(input,tag,options):"null_"===tag?this._decodeNull(input,options):"bool"===tag?this._decodeBool(input,options):"objDesc"===tag?this._decodeStr(input,tag,options):"int"===tag||"enum"===tag?this._decodeInt(input,state.args&&state.args[0],options):null===state.use?input.error("unknown tag: "+tag):this._getUse(state.use,input._reporterState.obj)._decode(input,options)},Node.prototype._getUse=function _getUse(entity,obj){const state=this._baseState;return state.useDecoder=this._use(entity,obj),assert(null===state.useDecoder._baseState.parent),state.useDecoder=state.useDecoder._baseState.children[0],state.implicit!==state.useDecoder._baseState.implicit&&(state.useDecoder=state.useDecoder.clone(),state.useDecoder._baseState.implicit=state.implicit),state.useDecoder},Node.prototype._decodeChoice=function decodeChoice(input,options){const state=this._baseState;let result=null,match=!1;return Object.keys(state.choice).some(function(key){const save=input.save(),node=state.choice[key];try{const value=node._decode(input,options);if(input.isError(value))return!1;result={type:key,value:value},match=!0}catch(e){return input.restore(save),!1}return!0},this),match?result:input.error("Choice not matched")},Node.prototype._createEncoderBuffer=function createEncoderBuffer(data){return new EncoderBuffer(data,this.reporter)},Node.prototype._encode=function encode(data,reporter,parent){const state=this._baseState;if(null===state["default"]||state["default"]!==data){const result=this._encodeValue(data,reporter,parent);return void 0===result||this._skipDefault(result,reporter,parent)?void 0:result}},Node.prototype._encodeValue=function encode(data,reporter,parent){const state=this._baseState;if(null===state.parent)return state.children[0]._encode(data,reporter||new Reporter);let result=null;if(this.reporter=reporter,state.optional&&void 0===data)if(null!==state["default"])data=state["default"];else return;let content=null,primitive=!1;if(state.any)result=this._createEncoderBuffer(data);else if(state.choice)result=this._encodeChoice(data,reporter);else if(state.contains)content=this._getUse(state.contains,parent)._encode(data,reporter),primitive=!0;else if(state.children)content=state.children.map(function(child){if("null_"===child._baseState.tag)return child._encode(null,reporter,data);if(null===child._baseState.key)return reporter.error("Child should have a key");const prevKey=reporter.enterKey(child._baseState.key);if("object"!=typeof data)return reporter.error("Child expected, but input is not object");const res=child._encode(data[child._baseState.key],reporter,data);return reporter.leaveKey(prevKey),res},this).filter(function(child){return child}),content=this._createEncoderBuffer(content);else if("seqof"===state.tag||"setof"===state.tag){if(!(state.args&&1===state.args.length))return reporter.error("Too many args for : "+state.tag);if(!Array.isArray(data))return reporter.error("seqof/setof, but data is not Array");const child=this.clone();child._baseState.implicit=null,content=this._createEncoderBuffer(data.map(function(item){const state=this._baseState;return this._getUse(state.args[0],data)._encode(item,reporter)},child))}else null===state.use?(content=this._encodePrimitive(state.tag,data),primitive=!0):result=this._getUse(state.use,parent)._encode(data,reporter);if(!state.any&&null===state.choice){const tag=null===state.implicit?state.tag:state.implicit,cls=null===state.implicit?"universal":"context";null===tag?null===state.use&&reporter.error("Tag could be omitted only for .use()"):null===state.use&&(result=this._encodeComposite(tag,primitive,cls,content))}return null!==state.explicit&&(result=this._encodeComposite(state.explicit,!1,"context",result)),result},Node.prototype._encodeChoice=function encodeChoice(data,reporter){const state=this._baseState,node=state.choice[data.type];return node||assert(!1,data.type+" not found in "+JSON.stringify(Object.keys(state.choice))),node._encode(data.value,reporter)},Node.prototype._encodePrimitive=function encodePrimitive(tag,data){const state=this._baseState;if(/str$/.test(tag))return this._encodeStr(data,tag);if("objid"===tag&&state.args)return this._encodeObjid(data,state.reverseArgs[0],state.args[1]);if("objid"===tag)return this._encodeObjid(data,null,null);if("gentime"===tag||"utctime"===tag)return this._encodeTime(data,tag);if("null_"===tag)return this._encodeNull();if("int"===tag||"enum"===tag)return this._encodeInt(data,state.args&&state.reverseArgs[0]);if("bool"===tag)return this._encodeBool(data);if("objDesc"===tag)return this._encodeStr(data,tag);throw new Error("Unsupported tag: "+tag)},Node.prototype._isNumstr=function isNumstr(str){return /^[0-9 ]*$/.test(str)},Node.prototype._isPrintstr=function isPrintstr(str){return /^[A-Za-z0-9 '()+,-./:=?]*$/.test(str)}},{"../base/buffer":10,"../base/reporter":13,"minimalistic-assert":168}],13:[function(require,module,exports){"use strict";function Reporter(options){this._reporterState={obj:null,path:[],options:options||{},errors:[]}}function ReporterError(path,msg){this.path=path,this.rethrow(msg)}const inherits=require("inherits");exports.Reporter=Reporter,Reporter.prototype.isError=function isError(obj){return obj instanceof ReporterError},Reporter.prototype.save=function save(){const state=this._reporterState;return{obj:state.obj,pathLen:state.path.length}},Reporter.prototype.restore=function restore(data){const state=this._reporterState;state.obj=data.obj,state.path=state.path.slice(0,data.pathLen)},Reporter.prototype.enterKey=function enterKey(key){return this._reporterState.path.push(key)},Reporter.prototype.exitKey=function exitKey(index){const state=this._reporterState;state.path=state.path.slice(0,index-1)},Reporter.prototype.leaveKey=function leaveKey(index,key,value){const state=this._reporterState;this.exitKey(index),null!==state.obj&&(state.obj[key]=value)},Reporter.prototype.path=function path(){return this._reporterState.path.join("/")},Reporter.prototype.enterObject=function enterObject(){const state=this._reporterState,prev=state.obj;return state.obj={},prev},Reporter.prototype.leaveObject=function leaveObject(prev){const state=this._reporterState,now=state.obj;return state.obj=prev,now},Reporter.prototype.error=function error(msg){let err;const state=this._reporterState,inherited=msg instanceof ReporterError;if(err=inherited?msg:new ReporterError(state.path.map(function(elem){return"["+JSON.stringify(elem)+"]"}).join(""),msg.message||msg,msg.stack),!state.options.partial)throw err;return inherited||state.errors.push(err),err},Reporter.prototype.wrapResult=function wrapResult(result){const state=this._reporterState;return state.options.partial?{result:this.isError(result)?null:result,errors:state.errors}:result},inherits(ReporterError,Error),ReporterError.prototype.rethrow=function rethrow(msg){if(this.message=msg+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,ReporterError),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},{inherits:147}],14:[function(require,module,exports){"use strict";function reverse(map){const res={};return Object.keys(map).forEach(function(key){(0|key)==key&&(key|=0);const value=map[key];res[value]=key}),res}exports.tagClass={0:"universal",1:"application",2:"context",3:"private"},exports.tagClassByName=reverse(exports.tagClass),exports.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},exports.tagByName=reverse(exports.tag)},{}],15:[function(require,module,exports){"use strict";const constants=exports;constants._reverse=function reverse(map){const res={};return Object.keys(map).forEach(function(key){(0|key)==key&&(key|=0);const value=map[key];res[value]=key}),res},constants.der=require("./der")},{"./der":14}],16:[function(require,module,exports){"use strict";function DERDecoder(entity){this.enc="der",this.name=entity.name,this.entity=entity,this.tree=new DERNode,this.tree._init(entity.body)}function DERNode(parent){Node.call(this,"der",parent)}function derDecodeTag(buf,fail){let tag=buf.readUInt8(fail);if(buf.isError(tag))return tag;const cls=der.tagClass[tag>>6],primitive=0==(32&tag);if(31==(31&tag)){let oct=tag;for(tag=0;128==(128&oct);){if(oct=buf.readUInt8(fail),buf.isError(oct))return oct;tag<<=7,tag|=127&oct}}else tag&=31;const tagStr=der.tag[tag];return{cls:cls,primitive:primitive,tag:tag,tagStr:tagStr}}function derDecodeLen(buf,primitive,fail){let len=buf.readUInt8(fail);if(buf.isError(len))return len;if(!primitive&&128===len)return null;if(0==(128&len))return len;const num=127&len;if(4year?2e3+year:1900+year;else return buffer.error("Decoding "+tag+" time is not supported yet");return Date.UTC(year,mon-1,day,hour,min,sec,0)},DERNode.prototype._decodeNull=function decodeNull(){return null},DERNode.prototype._decodeBool=function decodeBool(buffer){const res=buffer.readUInt8();return buffer.isError(res)?res:0!==res},DERNode.prototype._decodeInt=function decodeInt(buffer,values){const raw=buffer.raw();let res=new bignum(raw);return values&&(res=values[res.toString(10)]||res),res},DERNode.prototype._use=function use(entity,obj){return"function"==typeof entity&&(entity=entity(obj)),entity._getDecoder("der").tree}},{"../base/buffer":10,"../base/node":12,"../constants/der":14,"bn.js":22,inherits:147}],17:[function(require,module,exports){"use strict";const decoders=exports;decoders.der=require("./der"),decoders.pem=require("./pem")},{"./der":16,"./pem":18}],18:[function(require,module,exports){"use strict";function PEMDecoder(entity){DERDecoder.call(this,entity),this.enc="pem"}const inherits=require("inherits"),Buffer=require("safer-buffer").Buffer,DERDecoder=require("./der");inherits(PEMDecoder,DERDecoder),module.exports=PEMDecoder,PEMDecoder.prototype.decode=function decode(data,options){const lines=data.toString().split(/[\r\n]+/g),label=options.label.toUpperCase(),re=/^-----(BEGIN|END) ([^-]+)-----$/;let start=-1,end=-1;for(let i=0;inum?"0"+num:num}function encodeTag(tag,primitive,cls,reporter){let res;if("seqof"===tag?tag="seq":"setof"==tag&&(tag="set"),der.tagByName.hasOwnProperty(tag))res=der.tagByName[tag];else if("number"==typeof tag&&(0|tag)===tag)res=tag;else return reporter.error("Unknown tag: "+tag);return 31<=res?reporter.error("Multi-octet tag encoding unsupported"):(primitive||(res|=32),res|=der.tagClassByName[cls||"universal"]<<6,res)}const inherits=require("inherits"),Buffer=require("safer-buffer").Buffer,Node=require("../base/node"),der=require("../constants/der");module.exports=DEREncoder,DEREncoder.prototype.encode=function encode(data,reporter){return this.tree._encode(data,reporter).join()},inherits(DERNode,Node),DERNode.prototype._encodeComposite=function encodeComposite(tag,primitive,cls,content){const encodedTag=encodeTag(tag,primitive,cls,this.reporter);if(128>content.length){const header=Buffer.alloc(2);return header[0]=encodedTag,header[1]=content.length,this._createEncoderBuffer([header,content])}let lenOctets=1;for(let i=content.length;256<=i;i>>=8)lenOctets++;const header=Buffer.alloc(2+lenOctets);header[0]=encodedTag,header[1]=128|lenOctets;for(let i=1+lenOctets,j=content.length;0>=8)header[i]=255&j;return this._createEncoderBuffer([header,content])},DERNode.prototype._encodeStr=function encodeStr(str,tag){if("bitstr"===tag)return this._createEncoderBuffer([0|str.unused,str.data]);if("bmpstr"===tag){const buf=Buffer.alloc(2*str.length);for(let i=0;i>=7)size++;const objid=Buffer.alloc(size);let offset=objid.length-1;for(let i=id.length-1,ident;0<=i;i--)for(ident=id[i],objid[offset--]=127&ident;0<(ident>>=7);)objid[offset--]=128|127&ident;return this._createEncoderBuffer(objid)},DERNode.prototype._encodeTime=function encodeTime(time,tag){let str;const date=new Date(time);return"gentime"===tag?str=[two(date.getUTCFullYear()),two(date.getUTCMonth()+1),two(date.getUTCDate()),two(date.getUTCHours()),two(date.getUTCMinutes()),two(date.getUTCSeconds()),"Z"].join(""):"utctime"===tag?str=[two(date.getUTCFullYear()%100),two(date.getUTCMonth()+1),two(date.getUTCDate()),two(date.getUTCHours()),two(date.getUTCMinutes()),two(date.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+tag+" time is not supported yet"),this._encodeStr(str,"octstr")},DERNode.prototype._encodeNull=function encodeNull(){return this._createEncoderBuffer("")},DERNode.prototype._encodeInt=function encodeInt(num,values){if("string"==typeof num){if(!values)return this.reporter.error("String int or enum given, but no values map");if(!values.hasOwnProperty(num))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(num));num=values[num]}if("number"!=typeof num&&!Buffer.isBuffer(num)){const numArray=num.toArray();!num.sign&&128&numArray[0]&&numArray.unshift(0),num=Buffer.from(numArray)}if(Buffer.isBuffer(num)){let size=num.length;0===num.length&&size++;const out=Buffer.alloc(size);return num.copy(out),0===num.length&&(out[0]=0),this._createEncoderBuffer(out)}if(128>num)return this._createEncoderBuffer(num);if(256>num)return this._createEncoderBuffer([0,num]);let size=1;for(let i=num;256<=i;i>>=8)size++;const out=Array(size);for(let i=out.length-1;0<=i;i--)out[i]=255&num,num>>=8;return 128&out[0]&&out.unshift(0),this._createEncoderBuffer(Buffer.from(out))},DERNode.prototype._encodeBool=function encodeBool(value){return this._createEncoderBuffer(value?255:0)},DERNode.prototype._use=function use(entity,obj){return"function"==typeof entity&&(entity=entity(obj)),entity._getEncoder("der").tree},DERNode.prototype._skipDefault=function skipDefault(dataBuffer,reporter,parent){const state=this._baseState;let i;if(null===state["default"])return!1;const data=dataBuffer.join();if(void 0===state.defaultBuffer&&(state.defaultBuffer=this._encodeValue(state["default"],reporter,parent).join()),data.length!==state.defaultBuffer.length)return!1;for(i=0;i=c?c-55:97<=c&&102>=c?c-87:15&c-48}function parseHexByte(string,lowerBound,index){var r=parseHex4Bits(string,index);return index-1>=lowerBound&&(r|=parseHex4Bits(string,index-1)<<4),r}function parseBase(str,start,end,mul){for(var r=0,len=_Mathmin(str.length,end),i=start,c;i>>wbit}return w}function smallMulTo(self,num,out){out.negative=num.negative^self.negative;var len=0|self.length+num.length;out.length=len,len=0|len-1;var a=0|self.words[0],b=0|num.words[0],r=a*b,lo=67108863&r,carry=0|r/67108864;out.words[0]=lo;for(var k=1;k>>26,rword=67108863&carry,maxJ=_Mathmin(k,num.length-1),j=_Mathmax(0,k-self.length+1),i;j<=maxJ;j++)i=0|k-j,a=0|self.words[i],b=0|num.words[j],r=a*b+rword,ncarry+=0|r/67108864,rword=67108863&r;out.words[k]=0|rword,carry=0|ncarry}return 0===carry?out.length--:out.words[k]=0|carry,out.strip()}function bigMulTo(self,num,out){out.negative=num.negative^self.negative,out.length=self.length+num.length;for(var carry=0,hncarry=0,k=0,ncarry;k>>26),hncarry+=ncarry>>>26,ncarry&=67108863}out.words[k]=rword,carry=ncarry,ncarry=hncarry}return 0===carry?out.length--:out.words[k]=carry,out.strip()}function jumboMulTo(self,num,out){var fftm=new FFTM;return fftm.mulp(self,num,out)}function FFTM(x,y){this.x=x,this.y=y}function MPrime(name,p){this.name=name,this.p=new BN(p,16),this.n=this.p.bitLength(),this.k=new BN(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function K256(){MPrime.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function P224(){MPrime.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function P192(){MPrime.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function P25519(){MPrime.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function Red(m){if("string"==typeof m){var prime=BN._prime(m);this.m=prime.p,this.prime=prime}else assert(m.gtn(1),"modulus must be greater than 1"),this.m=m,this.prime=null}function Mont(m){Red.call(this,m),this.shift=this.m.bitLength(),0!=this.shift%26&&(this.shift+=26-this.shift%26),this.r=new BN(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof module?module.exports=BN:exports.BN=BN,BN.BN=BN,BN.wordSize=26;var Buffer;try{Buffer="undefined"!=typeof window&&"undefined"!=typeof window.Buffer?window.Buffer:require("buffer").Buffer}catch(e){}BN.isBN=function isBN(num){return!!(num instanceof BN)||null!==num&&"object"==typeof num&&num.constructor.wordSize===BN.wordSize&&Array.isArray(num.words)},BN.max=function max(left,right){return 0left.cmp(right)?left:right},BN.prototype._init=function init(number,base,endian){if("number"==typeof number)return this._initNumber(number,base,endian);if("object"==typeof number)return this._initArray(number,base,endian);"hex"===base&&(base=16),assert(base===(0|base)&&2<=base&&36>=base),number=number.toString().replace(/\s+/g,"");var start=0;"-"===number[0]&&(start++,this.negative=1),startnumber&&(this.negative=1,number=-number),67108864>number?(this.words=[67108863&number],this.length=1):4503599627370496>number?(this.words=[67108863&number,67108863&number/67108864],this.length=2):(assert(9007199254740992>number),this.words=[67108863&number,67108863&number/67108864,1],this.length=3);"le"!==endian||this._initArray(this.toArray(),base,endian)},BN.prototype._initArray=function _initArray(number,base,endian){if(assert("number"==typeof number.length),0>=number.length)return this.words=[0],this.length=1,this;this.length=_Mathceil(number.length/3),this.words=Array(this.length);for(var i=0;i>>26-off,off+=24,26<=off&&(off-=26,j++);else if("le"===endian)for(i=0,j=0;i>>26-off,off+=24,26<=off&&(off-=26,j++);return this.strip()},BN.prototype._parseHex=function _parseHex(number,start,endian){this.length=_Mathceil((number.length-start)/6),this.words=Array(this.length);for(var i=0;i=start;i-=2)w=parseHexByte(number,start,i)<>>26):off+=8;else{var parseLength=number.length-start;for(i=0==parseLength%2?start+1:start;i>>26):off+=8}this.strip()},BN.prototype._parseBase=function _parseBase(number,base,start){this.words=[0],this.length=1;for(var limbLen=0,limbPow=1;67108863>=limbPow;limbPow*=base)limbLen++;limbLen--,limbPow=0|limbPow/base;for(var total=number.length-start,mod=total%limbLen,end=_Mathmin(total,total-mod)+start,word=0,i=start;ithis.words[0]+word?this.words[0]+=word:this._iaddn(word);if(0!==mod){var pow=1;for(word=parseBase(number,i,number.length,base),i=0;ithis.words[0]+word?this.words[0]+=word:this._iaddn(word)}this.strip()},BN.prototype.copy=function copy(dest){dest.words=Array(this.length);for(var i=0;i"};var zeros=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],groupSizes=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],groupBases=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];BN.prototype.toString=function toString(base,padding){base=base||10,padding=0|padding||1;var out;if(16===base||"hex"===base){out="";for(var off=0,carry=0,i=0;i>>24-off,out=0!==carry||i!==this.length-1?zeros[6-word.length]+word+out:word+out,off+=2,26<=off&&(off-=26,i--)}for(0!==carry&&(out=carry.toString(16)+out);0!=out.length%padding;)out="0"+out;return 0!==this.negative&&(out="-"+out),out}if(base===(0|base)&&2<=base&&36>=base){var groupSize=groupSizes[base],groupBase=groupBases[base];out="";var c=this.clone();for(c.negative=0;!c.isZero();){var r=c.modn(groupBase).toString(base);c=c.idivn(groupBase),out=c.isZero()?r+out:zeros[groupSize-r.length]+r+out}for(this.isZero()&&(out="0"+out);0!=out.length%padding;)out="0"+out;return 0!==this.negative&&(out="-"+out),out}assert(!1,"Base should be between 2 and 36")},BN.prototype.toNumber=function toNumber(){var ret=this.words[0];return 2===this.length?ret+=67108864*this.words[1]:3===this.length&&1===this.words[2]?ret+=4503599627370496+67108864*this.words[1]:2>>=13),64<=t&&(r+=7,t>>>=7),8<=t&&(r+=4,t>>>=4),2<=t&&(r+=2,t>>>=2),r+t},BN.prototype._zeroBits=function _zeroBits(w){if(0===w)return 26;var t=w,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},BN.prototype.bitLength=function bitLength(){var w=this.words[this.length-1],hi=this._countBits(w);return 26*(this.length-1)+hi},BN.prototype.zeroBits=function zeroBits(){if(this.isZero())return 0;for(var r=0,i=0,b;inum.length?this.clone().ior(num):num.clone().ior(this)},BN.prototype.uor=function uor(num){return this.length>num.length?this.clone().iuor(num):num.clone().iuor(this)},BN.prototype.iuand=function iuand(num){var b;b=this.length>num.length?num:this;for(var i=0;inum.length?this.clone().iand(num):num.clone().iand(this)},BN.prototype.uand=function uand(num){return this.length>num.length?this.clone().iuand(num):num.clone().iuand(this)},BN.prototype.iuxor=function iuxor(num){var a,b;this.length>num.length?(a=this,b=num):(a=num,b=this);for(var i=0;inum.length?this.clone().ixor(num):num.clone().ixor(this)},BN.prototype.uxor=function uxor(num){return this.length>num.length?this.clone().iuxor(num):num.clone().iuxor(this)},BN.prototype.inotn=function inotn(width){assert("number"==typeof width&&0<=width);var bytesNeeded=0|_Mathceil(width/26),bitsLeft=width%26;this._expand(bytesNeeded),0>26-bitsLeft),this.strip()},BN.prototype.notn=function notn(width){return this.clone().inotn(width)},BN.prototype.setn=function setn(bit,val){assert("number"==typeof bit&&0<=bit);var off=0|bit/26,wbit=bit%26;return this._expand(off+1),val?this.words[off]|=1<num.length?(a=this,b=num):(a=num,b=this);for(var carry=0,i=0;i>>26;for(;0!==carry&&i>>26;if(this.length=a.length,0!==carry)this.words[this.length]=carry,this.length++;else if(a!==this)for(;inum.length?this.clone().iadd(num):num.clone().iadd(this)},BN.prototype.isub=function isub(num){if(0!==num.negative){num.negative=0;var r=this.iadd(num);return num.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(num),this.negative=1,this._normSign();var cmp=this.cmp(num);if(0===cmp)return this.negative=0,this.length=1,this.words[0]=0,this;var a,b;0>26,this.words[i]=67108863&r;for(;0!==carry&&i>26,this.words[i]=67108863&r;if(0===carry&&i>>13,a1=0|a[1],al1=8191&a1,ah1=a1>>>13,a2=0|a[2],al2=8191&a2,ah2=a2>>>13,a3=0|a[3],al3=8191&a3,ah3=a3>>>13,a4=0|a[4],al4=8191&a4,ah4=a4>>>13,a5=0|a[5],al5=8191&a5,ah5=a5>>>13,a6=0|a[6],al6=8191&a6,ah6=a6>>>13,a7=0|a[7],al7=8191&a7,ah7=a7>>>13,a8=0|a[8],al8=8191&a8,ah8=a8>>>13,a9=0|a[9],al9=8191&a9,ah9=a9>>>13,b0=0|b[0],bl0=8191&b0,bh0=b0>>>13,b1=0|b[1],bl1=8191&b1,bh1=b1>>>13,b2=0|b[2],bl2=8191&b2,bh2=b2>>>13,b3=0|b[3],bl3=8191&b3,bh3=b3>>>13,b4=0|b[4],bl4=8191&b4,bh4=b4>>>13,b5=0|b[5],bl5=8191&b5,bh5=b5>>>13,b6=0|b[6],bl6=8191&b6,bh6=b6>>>13,b7=0|b[7],bl7=8191&b7,bh7=b7>>>13,b8=0|b[8],bl8=8191&b8,bh8=b8>>>13,b9=0|b[9],bl9=8191&b9,bh9=b9>>>13,lo,mid,hi;out.negative=self.negative^num.negative,out.length=19,lo=_Mathimul(al0,bl0),mid=_Mathimul(al0,bh0),mid=0|mid+_Mathimul(ah0,bl0),hi=_Mathimul(ah0,bh0);var w0=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w0>>>26),w0&=67108863,lo=_Mathimul(al1,bl0),mid=_Mathimul(al1,bh0),mid=0|mid+_Mathimul(ah1,bl0),hi=_Mathimul(ah1,bh0),lo=0|lo+_Mathimul(al0,bl1),mid=0|mid+_Mathimul(al0,bh1),mid=0|mid+_Mathimul(ah0,bl1),hi=0|hi+_Mathimul(ah0,bh1);var w1=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w1>>>26),w1&=67108863,lo=_Mathimul(al2,bl0),mid=_Mathimul(al2,bh0),mid=0|mid+_Mathimul(ah2,bl0),hi=_Mathimul(ah2,bh0),lo=0|lo+_Mathimul(al1,bl1),mid=0|mid+_Mathimul(al1,bh1),mid=0|mid+_Mathimul(ah1,bl1),hi=0|hi+_Mathimul(ah1,bh1),lo=0|lo+_Mathimul(al0,bl2),mid=0|mid+_Mathimul(al0,bh2),mid=0|mid+_Mathimul(ah0,bl2),hi=0|hi+_Mathimul(ah0,bh2);var w2=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w2>>>26),w2&=67108863,lo=_Mathimul(al3,bl0),mid=_Mathimul(al3,bh0),mid=0|mid+_Mathimul(ah3,bl0),hi=_Mathimul(ah3,bh0),lo=0|lo+_Mathimul(al2,bl1),mid=0|mid+_Mathimul(al2,bh1),mid=0|mid+_Mathimul(ah2,bl1),hi=0|hi+_Mathimul(ah2,bh1),lo=0|lo+_Mathimul(al1,bl2),mid=0|mid+_Mathimul(al1,bh2),mid=0|mid+_Mathimul(ah1,bl2),hi=0|hi+_Mathimul(ah1,bh2),lo=0|lo+_Mathimul(al0,bl3),mid=0|mid+_Mathimul(al0,bh3),mid=0|mid+_Mathimul(ah0,bl3),hi=0|hi+_Mathimul(ah0,bh3);var w3=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w3>>>26),w3&=67108863,lo=_Mathimul(al4,bl0),mid=_Mathimul(al4,bh0),mid=0|mid+_Mathimul(ah4,bl0),hi=_Mathimul(ah4,bh0),lo=0|lo+_Mathimul(al3,bl1),mid=0|mid+_Mathimul(al3,bh1),mid=0|mid+_Mathimul(ah3,bl1),hi=0|hi+_Mathimul(ah3,bh1),lo=0|lo+_Mathimul(al2,bl2),mid=0|mid+_Mathimul(al2,bh2),mid=0|mid+_Mathimul(ah2,bl2),hi=0|hi+_Mathimul(ah2,bh2),lo=0|lo+_Mathimul(al1,bl3),mid=0|mid+_Mathimul(al1,bh3),mid=0|mid+_Mathimul(ah1,bl3),hi=0|hi+_Mathimul(ah1,bh3),lo=0|lo+_Mathimul(al0,bl4),mid=0|mid+_Mathimul(al0,bh4),mid=0|mid+_Mathimul(ah0,bl4),hi=0|hi+_Mathimul(ah0,bh4);var w4=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w4>>>26),w4&=67108863,lo=_Mathimul(al5,bl0),mid=_Mathimul(al5,bh0),mid=0|mid+_Mathimul(ah5,bl0),hi=_Mathimul(ah5,bh0),lo=0|lo+_Mathimul(al4,bl1),mid=0|mid+_Mathimul(al4,bh1),mid=0|mid+_Mathimul(ah4,bl1),hi=0|hi+_Mathimul(ah4,bh1),lo=0|lo+_Mathimul(al3,bl2),mid=0|mid+_Mathimul(al3,bh2),mid=0|mid+_Mathimul(ah3,bl2),hi=0|hi+_Mathimul(ah3,bh2),lo=0|lo+_Mathimul(al2,bl3),mid=0|mid+_Mathimul(al2,bh3),mid=0|mid+_Mathimul(ah2,bl3),hi=0|hi+_Mathimul(ah2,bh3),lo=0|lo+_Mathimul(al1,bl4),mid=0|mid+_Mathimul(al1,bh4),mid=0|mid+_Mathimul(ah1,bl4),hi=0|hi+_Mathimul(ah1,bh4),lo=0|lo+_Mathimul(al0,bl5),mid=0|mid+_Mathimul(al0,bh5),mid=0|mid+_Mathimul(ah0,bl5),hi=0|hi+_Mathimul(ah0,bh5);var w5=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w5>>>26),w5&=67108863,lo=_Mathimul(al6,bl0),mid=_Mathimul(al6,bh0),mid=0|mid+_Mathimul(ah6,bl0),hi=_Mathimul(ah6,bh0),lo=0|lo+_Mathimul(al5,bl1),mid=0|mid+_Mathimul(al5,bh1),mid=0|mid+_Mathimul(ah5,bl1),hi=0|hi+_Mathimul(ah5,bh1),lo=0|lo+_Mathimul(al4,bl2),mid=0|mid+_Mathimul(al4,bh2),mid=0|mid+_Mathimul(ah4,bl2),hi=0|hi+_Mathimul(ah4,bh2),lo=0|lo+_Mathimul(al3,bl3),mid=0|mid+_Mathimul(al3,bh3),mid=0|mid+_Mathimul(ah3,bl3),hi=0|hi+_Mathimul(ah3,bh3),lo=0|lo+_Mathimul(al2,bl4),mid=0|mid+_Mathimul(al2,bh4),mid=0|mid+_Mathimul(ah2,bl4),hi=0|hi+_Mathimul(ah2,bh4),lo=0|lo+_Mathimul(al1,bl5),mid=0|mid+_Mathimul(al1,bh5),mid=0|mid+_Mathimul(ah1,bl5),hi=0|hi+_Mathimul(ah1,bh5),lo=0|lo+_Mathimul(al0,bl6),mid=0|mid+_Mathimul(al0,bh6),mid=0|mid+_Mathimul(ah0,bl6),hi=0|hi+_Mathimul(ah0,bh6);var w6=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w6>>>26),w6&=67108863,lo=_Mathimul(al7,bl0),mid=_Mathimul(al7,bh0),mid=0|mid+_Mathimul(ah7,bl0),hi=_Mathimul(ah7,bh0),lo=0|lo+_Mathimul(al6,bl1),mid=0|mid+_Mathimul(al6,bh1),mid=0|mid+_Mathimul(ah6,bl1),hi=0|hi+_Mathimul(ah6,bh1),lo=0|lo+_Mathimul(al5,bl2),mid=0|mid+_Mathimul(al5,bh2),mid=0|mid+_Mathimul(ah5,bl2),hi=0|hi+_Mathimul(ah5,bh2),lo=0|lo+_Mathimul(al4,bl3),mid=0|mid+_Mathimul(al4,bh3),mid=0|mid+_Mathimul(ah4,bl3),hi=0|hi+_Mathimul(ah4,bh3),lo=0|lo+_Mathimul(al3,bl4),mid=0|mid+_Mathimul(al3,bh4),mid=0|mid+_Mathimul(ah3,bl4),hi=0|hi+_Mathimul(ah3,bh4),lo=0|lo+_Mathimul(al2,bl5),mid=0|mid+_Mathimul(al2,bh5),mid=0|mid+_Mathimul(ah2,bl5),hi=0|hi+_Mathimul(ah2,bh5),lo=0|lo+_Mathimul(al1,bl6),mid=0|mid+_Mathimul(al1,bh6),mid=0|mid+_Mathimul(ah1,bl6),hi=0|hi+_Mathimul(ah1,bh6),lo=0|lo+_Mathimul(al0,bl7),mid=0|mid+_Mathimul(al0,bh7),mid=0|mid+_Mathimul(ah0,bl7),hi=0|hi+_Mathimul(ah0,bh7);var w7=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w7>>>26),w7&=67108863,lo=_Mathimul(al8,bl0),mid=_Mathimul(al8,bh0),mid=0|mid+_Mathimul(ah8,bl0),hi=_Mathimul(ah8,bh0),lo=0|lo+_Mathimul(al7,bl1),mid=0|mid+_Mathimul(al7,bh1),mid=0|mid+_Mathimul(ah7,bl1),hi=0|hi+_Mathimul(ah7,bh1),lo=0|lo+_Mathimul(al6,bl2),mid=0|mid+_Mathimul(al6,bh2),mid=0|mid+_Mathimul(ah6,bl2),hi=0|hi+_Mathimul(ah6,bh2),lo=0|lo+_Mathimul(al5,bl3),mid=0|mid+_Mathimul(al5,bh3),mid=0|mid+_Mathimul(ah5,bl3),hi=0|hi+_Mathimul(ah5,bh3),lo=0|lo+_Mathimul(al4,bl4),mid=0|mid+_Mathimul(al4,bh4),mid=0|mid+_Mathimul(ah4,bl4),hi=0|hi+_Mathimul(ah4,bh4),lo=0|lo+_Mathimul(al3,bl5),mid=0|mid+_Mathimul(al3,bh5),mid=0|mid+_Mathimul(ah3,bl5),hi=0|hi+_Mathimul(ah3,bh5),lo=0|lo+_Mathimul(al2,bl6),mid=0|mid+_Mathimul(al2,bh6),mid=0|mid+_Mathimul(ah2,bl6),hi=0|hi+_Mathimul(ah2,bh6),lo=0|lo+_Mathimul(al1,bl7),mid=0|mid+_Mathimul(al1,bh7),mid=0|mid+_Mathimul(ah1,bl7),hi=0|hi+_Mathimul(ah1,bh7),lo=0|lo+_Mathimul(al0,bl8),mid=0|mid+_Mathimul(al0,bh8),mid=0|mid+_Mathimul(ah0,bl8),hi=0|hi+_Mathimul(ah0,bh8);var w8=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w8>>>26),w8&=67108863,lo=_Mathimul(al9,bl0),mid=_Mathimul(al9,bh0),mid=0|mid+_Mathimul(ah9,bl0),hi=_Mathimul(ah9,bh0),lo=0|lo+_Mathimul(al8,bl1),mid=0|mid+_Mathimul(al8,bh1),mid=0|mid+_Mathimul(ah8,bl1),hi=0|hi+_Mathimul(ah8,bh1),lo=0|lo+_Mathimul(al7,bl2),mid=0|mid+_Mathimul(al7,bh2),mid=0|mid+_Mathimul(ah7,bl2),hi=0|hi+_Mathimul(ah7,bh2),lo=0|lo+_Mathimul(al6,bl3),mid=0|mid+_Mathimul(al6,bh3),mid=0|mid+_Mathimul(ah6,bl3),hi=0|hi+_Mathimul(ah6,bh3),lo=0|lo+_Mathimul(al5,bl4),mid=0|mid+_Mathimul(al5,bh4),mid=0|mid+_Mathimul(ah5,bl4),hi=0|hi+_Mathimul(ah5,bh4),lo=0|lo+_Mathimul(al4,bl5),mid=0|mid+_Mathimul(al4,bh5),mid=0|mid+_Mathimul(ah4,bl5),hi=0|hi+_Mathimul(ah4,bh5),lo=0|lo+_Mathimul(al3,bl6),mid=0|mid+_Mathimul(al3,bh6),mid=0|mid+_Mathimul(ah3,bl6),hi=0|hi+_Mathimul(ah3,bh6),lo=0|lo+_Mathimul(al2,bl7),mid=0|mid+_Mathimul(al2,bh7),mid=0|mid+_Mathimul(ah2,bl7),hi=0|hi+_Mathimul(ah2,bh7),lo=0|lo+_Mathimul(al1,bl8),mid=0|mid+_Mathimul(al1,bh8),mid=0|mid+_Mathimul(ah1,bl8),hi=0|hi+_Mathimul(ah1,bh8),lo=0|lo+_Mathimul(al0,bl9),mid=0|mid+_Mathimul(al0,bh9),mid=0|mid+_Mathimul(ah0,bl9),hi=0|hi+_Mathimul(ah0,bh9);var w9=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w9>>>26),w9&=67108863,lo=_Mathimul(al9,bl1),mid=_Mathimul(al9,bh1),mid=0|mid+_Mathimul(ah9,bl1),hi=_Mathimul(ah9,bh1),lo=0|lo+_Mathimul(al8,bl2),mid=0|mid+_Mathimul(al8,bh2),mid=0|mid+_Mathimul(ah8,bl2),hi=0|hi+_Mathimul(ah8,bh2),lo=0|lo+_Mathimul(al7,bl3),mid=0|mid+_Mathimul(al7,bh3),mid=0|mid+_Mathimul(ah7,bl3),hi=0|hi+_Mathimul(ah7,bh3),lo=0|lo+_Mathimul(al6,bl4),mid=0|mid+_Mathimul(al6,bh4),mid=0|mid+_Mathimul(ah6,bl4),hi=0|hi+_Mathimul(ah6,bh4),lo=0|lo+_Mathimul(al5,bl5),mid=0|mid+_Mathimul(al5,bh5),mid=0|mid+_Mathimul(ah5,bl5),hi=0|hi+_Mathimul(ah5,bh5),lo=0|lo+_Mathimul(al4,bl6),mid=0|mid+_Mathimul(al4,bh6),mid=0|mid+_Mathimul(ah4,bl6),hi=0|hi+_Mathimul(ah4,bh6),lo=0|lo+_Mathimul(al3,bl7),mid=0|mid+_Mathimul(al3,bh7),mid=0|mid+_Mathimul(ah3,bl7),hi=0|hi+_Mathimul(ah3,bh7),lo=0|lo+_Mathimul(al2,bl8),mid=0|mid+_Mathimul(al2,bh8),mid=0|mid+_Mathimul(ah2,bl8),hi=0|hi+_Mathimul(ah2,bh8),lo=0|lo+_Mathimul(al1,bl9),mid=0|mid+_Mathimul(al1,bh9),mid=0|mid+_Mathimul(ah1,bl9),hi=0|hi+_Mathimul(ah1,bh9);var w10=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w10>>>26),w10&=67108863,lo=_Mathimul(al9,bl2),mid=_Mathimul(al9,bh2),mid=0|mid+_Mathimul(ah9,bl2),hi=_Mathimul(ah9,bh2),lo=0|lo+_Mathimul(al8,bl3),mid=0|mid+_Mathimul(al8,bh3),mid=0|mid+_Mathimul(ah8,bl3),hi=0|hi+_Mathimul(ah8,bh3),lo=0|lo+_Mathimul(al7,bl4),mid=0|mid+_Mathimul(al7,bh4),mid=0|mid+_Mathimul(ah7,bl4),hi=0|hi+_Mathimul(ah7,bh4),lo=0|lo+_Mathimul(al6,bl5),mid=0|mid+_Mathimul(al6,bh5),mid=0|mid+_Mathimul(ah6,bl5),hi=0|hi+_Mathimul(ah6,bh5),lo=0|lo+_Mathimul(al5,bl6),mid=0|mid+_Mathimul(al5,bh6),mid=0|mid+_Mathimul(ah5,bl6),hi=0|hi+_Mathimul(ah5,bh6),lo=0|lo+_Mathimul(al4,bl7),mid=0|mid+_Mathimul(al4,bh7),mid=0|mid+_Mathimul(ah4,bl7),hi=0|hi+_Mathimul(ah4,bh7),lo=0|lo+_Mathimul(al3,bl8),mid=0|mid+_Mathimul(al3,bh8),mid=0|mid+_Mathimul(ah3,bl8),hi=0|hi+_Mathimul(ah3,bh8),lo=0|lo+_Mathimul(al2,bl9),mid=0|mid+_Mathimul(al2,bh9),mid=0|mid+_Mathimul(ah2,bl9),hi=0|hi+_Mathimul(ah2,bh9);var w11=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w11>>>26),w11&=67108863,lo=_Mathimul(al9,bl3),mid=_Mathimul(al9,bh3),mid=0|mid+_Mathimul(ah9,bl3),hi=_Mathimul(ah9,bh3),lo=0|lo+_Mathimul(al8,bl4),mid=0|mid+_Mathimul(al8,bh4),mid=0|mid+_Mathimul(ah8,bl4),hi=0|hi+_Mathimul(ah8,bh4),lo=0|lo+_Mathimul(al7,bl5),mid=0|mid+_Mathimul(al7,bh5),mid=0|mid+_Mathimul(ah7,bl5),hi=0|hi+_Mathimul(ah7,bh5),lo=0|lo+_Mathimul(al6,bl6),mid=0|mid+_Mathimul(al6,bh6),mid=0|mid+_Mathimul(ah6,bl6),hi=0|hi+_Mathimul(ah6,bh6),lo=0|lo+_Mathimul(al5,bl7),mid=0|mid+_Mathimul(al5,bh7),mid=0|mid+_Mathimul(ah5,bl7),hi=0|hi+_Mathimul(ah5,bh7),lo=0|lo+_Mathimul(al4,bl8),mid=0|mid+_Mathimul(al4,bh8),mid=0|mid+_Mathimul(ah4,bl8),hi=0|hi+_Mathimul(ah4,bh8),lo=0|lo+_Mathimul(al3,bl9),mid=0|mid+_Mathimul(al3,bh9),mid=0|mid+_Mathimul(ah3,bl9),hi=0|hi+_Mathimul(ah3,bh9);var w12=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w12>>>26),w12&=67108863,lo=_Mathimul(al9,bl4),mid=_Mathimul(al9,bh4),mid=0|mid+_Mathimul(ah9,bl4),hi=_Mathimul(ah9,bh4),lo=0|lo+_Mathimul(al8,bl5),mid=0|mid+_Mathimul(al8,bh5),mid=0|mid+_Mathimul(ah8,bl5),hi=0|hi+_Mathimul(ah8,bh5),lo=0|lo+_Mathimul(al7,bl6),mid=0|mid+_Mathimul(al7,bh6),mid=0|mid+_Mathimul(ah7,bl6),hi=0|hi+_Mathimul(ah7,bh6),lo=0|lo+_Mathimul(al6,bl7),mid=0|mid+_Mathimul(al6,bh7),mid=0|mid+_Mathimul(ah6,bl7),hi=0|hi+_Mathimul(ah6,bh7),lo=0|lo+_Mathimul(al5,bl8),mid=0|mid+_Mathimul(al5,bh8),mid=0|mid+_Mathimul(ah5,bl8),hi=0|hi+_Mathimul(ah5,bh8),lo=0|lo+_Mathimul(al4,bl9),mid=0|mid+_Mathimul(al4,bh9),mid=0|mid+_Mathimul(ah4,bl9),hi=0|hi+_Mathimul(ah4,bh9);var w13=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w13>>>26),w13&=67108863,lo=_Mathimul(al9,bl5),mid=_Mathimul(al9,bh5),mid=0|mid+_Mathimul(ah9,bl5),hi=_Mathimul(ah9,bh5),lo=0|lo+_Mathimul(al8,bl6),mid=0|mid+_Mathimul(al8,bh6),mid=0|mid+_Mathimul(ah8,bl6),hi=0|hi+_Mathimul(ah8,bh6),lo=0|lo+_Mathimul(al7,bl7),mid=0|mid+_Mathimul(al7,bh7),mid=0|mid+_Mathimul(ah7,bl7),hi=0|hi+_Mathimul(ah7,bh7),lo=0|lo+_Mathimul(al6,bl8),mid=0|mid+_Mathimul(al6,bh8),mid=0|mid+_Mathimul(ah6,bl8),hi=0|hi+_Mathimul(ah6,bh8),lo=0|lo+_Mathimul(al5,bl9),mid=0|mid+_Mathimul(al5,bh9),mid=0|mid+_Mathimul(ah5,bl9),hi=0|hi+_Mathimul(ah5,bh9);var w14=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w14>>>26),w14&=67108863,lo=_Mathimul(al9,bl6),mid=_Mathimul(al9,bh6),mid=0|mid+_Mathimul(ah9,bl6),hi=_Mathimul(ah9,bh6),lo=0|lo+_Mathimul(al8,bl7),mid=0|mid+_Mathimul(al8,bh7),mid=0|mid+_Mathimul(ah8,bl7),hi=0|hi+_Mathimul(ah8,bh7),lo=0|lo+_Mathimul(al7,bl8),mid=0|mid+_Mathimul(al7,bh8),mid=0|mid+_Mathimul(ah7,bl8),hi=0|hi+_Mathimul(ah7,bh8),lo=0|lo+_Mathimul(al6,bl9),mid=0|mid+_Mathimul(al6,bh9),mid=0|mid+_Mathimul(ah6,bl9),hi=0|hi+_Mathimul(ah6,bh9);var w15=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w15>>>26),w15&=67108863,lo=_Mathimul(al9,bl7),mid=_Mathimul(al9,bh7),mid=0|mid+_Mathimul(ah9,bl7),hi=_Mathimul(ah9,bh7),lo=0|lo+_Mathimul(al8,bl8),mid=0|mid+_Mathimul(al8,bh8),mid=0|mid+_Mathimul(ah8,bl8),hi=0|hi+_Mathimul(ah8,bh8),lo=0|lo+_Mathimul(al7,bl9),mid=0|mid+_Mathimul(al7,bh9),mid=0|mid+_Mathimul(ah7,bl9),hi=0|hi+_Mathimul(ah7,bh9);var w16=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w16>>>26),w16&=67108863,lo=_Mathimul(al9,bl8),mid=_Mathimul(al9,bh8),mid=0|mid+_Mathimul(ah9,bl8),hi=_Mathimul(ah9,bh8),lo=0|lo+_Mathimul(al8,bl9),mid=0|mid+_Mathimul(al8,bh9),mid=0|mid+_Mathimul(ah8,bl9),hi=0|hi+_Mathimul(ah8,bh9);var w17=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w17>>>26),w17&=67108863,lo=_Mathimul(al9,bl9),mid=_Mathimul(al9,bh9),mid=0|mid+_Mathimul(ah9,bl9),hi=_Mathimul(ah9,bh9);var w18=0|(0|c+lo)+((8191&mid)<<13);return c=0|(0|hi+(mid>>>13))+(w18>>>26),w18&=67108863,o[0]=w0,o[1]=w1,o[2]=w2,o[3]=w3,o[4]=w4,o[5]=w5,o[6]=w6,o[7]=w7,o[8]=w8,o[9]=w9,o[10]=w10,o[11]=w11,o[12]=w12,o[13]=w13,o[14]=w14,o[15]=w15,o[16]=w16,o[17]=w17,o[18]=w18,0!==c&&(o[19]=c,out.length++),out};_Mathimul||(comb10MulTo=smallMulTo),BN.prototype.mulTo=function mulTo(num,out){var len=this.length+num.length,res;return res=10===this.length&&10===num.length?comb10MulTo(this,num,out):63>len?smallMulTo(this,num,out):1024>len?bigMulTo(this,num,out):jumboMulTo(this,num,out),res},FFTM.prototype.makeRBT=function makeRBT(N){for(var t=Array(N),l=BN.prototype._countBits(N)-1,i=0;i>=1;return rb},FFTM.prototype.permute=function permute(rbt,rws,iws,rtws,itws,N){for(var i=0;i>>=1)i++;return 1<=N))for(var i=0,t;iw?0:0|w/67108864;return ws},FFTM.prototype.convert13b=function convert13b(ws,len,rws,N){for(var carry=0,i=0;i>>=13,rws[2*i+1]=8191&carry,carry>>>=13;for(i=2*len;inum);for(var carry=0,i=0;i>=26,carry+=0|w/67108864,carry+=lo>>>26,this.words[i]=67108863&lo}return 0!==carry&&(this.words[i]=carry,this.length++),this},BN.prototype.muln=function muln(num){return this.clone().imuln(num)},BN.prototype.sqr=function sqr(){return this.mul(this)},BN.prototype.isqr=function isqr(){return this.imul(this.clone())},BN.prototype.pow=function pow(num){var w=toBitArray(num);if(0===w.length)return new BN(1);for(var res=this,i=0;i>>26-r<<26-r,i;if(0!=r){var carry=0;for(i=0;i>>26-r}carry&&(this.words[i]=carry,this.length++)}if(0!==s){for(i=this.length-1;0<=i;i--)this.words[i+s]=this.words[i];for(i=0;i>>r<s)for(this.length-=s,i=0;i=h);i--){var word=0|this.words[i];this.words[i]=carry<<26-r|word>>>r,carry=word&mask}return maskedWords&&0!==carry&&(maskedWords.words[maskedWords.length++]=carry),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},BN.prototype.ishrn=function ishrn(bits,hint,extended){return assert(0===this.negative),this.iushrn(bits,hint,extended)},BN.prototype.shln=function shln(bits){return this.clone().ishln(bits)},BN.prototype.ushln=function ushln(bits){return this.clone().iushln(bits)},BN.prototype.shrn=function shrn(bits){return this.clone().ishrn(bits)},BN.prototype.ushrn=function ushrn(bits){return this.clone().iushrn(bits)},BN.prototype.testn=function testn(bit){assert("number"==typeof bit&&0<=bit);var r=bit%26,s=(bit-r)/26,q=1<>>r<num),0>num?this.isubn(-num):0===this.negative?this._iaddn(num):1===this.length&&(0|this.words[0])num),0>num)return this.iaddn(-num);if(0!==this.negative)return this.negative=0,this.iaddn(num),this.negative=1,this;if(this.words[0]-=num,1===this.length&&0>this.words[0])this.words[0]=-this.words[0],this.negative=1;else for(var i=0;ithis.words[i];i++)this.words[i]+=67108864,this.words[i+1]-=1;return this.strip()},BN.prototype.addn=function addn(num){return this.clone().iaddn(num)},BN.prototype.subn=function subn(num){return this.clone().isubn(num)},BN.prototype.iabs=function iabs(){return this.negative=0,this},BN.prototype.abs=function abs(){return this.clone().iabs()},BN.prototype._ishlnsubmul=function _ishlnsubmul(num,mul,shift){var len=num.length+shift,i;this._expand(len);var carry=0,w;for(i=0;i>26)-(0|right/67108864),this.words[i+shift]=67108863&w}for(;i>26,this.words[i+shift]=67108863&w;if(0===carry)return this.strip();for(assert(-1===carry),carry=0,i=0;i>26,this.words[i]=67108863&w;return this.negative=1,this.strip()},BN.prototype._wordDiv=function _wordDiv(num,mode){var shift=this.length-num.length,a=this.clone(),b=num,bhi=0|b.words[b.length-1],bhiBits=this._countBits(bhi);shift=26-bhiBits,0!=shift&&(b=b.ushln(shift),a.iushln(shift),bhi=0|b.words[b.length-1]);var m=a.length-b.length,q;if("mod"!==mode){q=new BN(null),q.length=m+1,q.words=Array(q.length);for(var i=0;ithis.length||0>this.cmp(num)?{div:new BN(0),mod:this}:1===num.length?"div"===mode?{div:this.divn(num.words[0]),mod:null}:"mod"===mode?{div:null,mod:new BN(this.modn(num.words[0]))}:{div:this.divn(num.words[0]),mod:new BN(this.modn(num.words[0]))}:this._wordDiv(num,mode):(res=this.neg().divmod(num.neg(),mode),"div"!==mode&&(mod=res.mod.neg(),positive&&0!==mod.negative&&mod.isub(num)),{div:res.div,mod:mod})},BN.prototype.div=function div(num){return this.divmod(num,"div",!1).div},BN.prototype.mod=function mod(num){return this.divmod(num,"mod",!1).mod},BN.prototype.umod=function umod(num){return this.divmod(num,"mod",!0).mod},BN.prototype.divRound=function divRound(num){var dm=this.divmod(num);if(dm.mod.isZero())return dm.div;var mod=0===dm.div.negative?dm.mod:dm.mod.isub(num),half=num.ushrn(1),r2=num.andln(1),cmp=mod.cmp(half);return 0>cmp||1===r2&&0===cmp?dm.div:0===dm.div.negative?dm.div.iaddn(1):dm.div.isubn(1)},BN.prototype.modn=function modn(num){assert(67108863>=num);for(var p=67108864%num,acc=0,i=this.length-1;0<=i;i--)acc=(p*acc+(0|this.words[i]))%num;return acc},BN.prototype.idivn=function idivn(num){assert(67108863>=num);for(var carry=0,i=this.length-1,w;0<=i;i--)w=(0|this.words[i])+67108864*carry,this.words[i]=0|w/num,carry=w%num;return this.strip()},BN.prototype.divn=function divn(num){return this.clone().idivn(num)},BN.prototype.egcd=function egcd(p){assert(0===p.negative),assert(!p.isZero());var x=this,y=p.clone();x=0===x.negative?x.clone():x.umod(p);for(var A=new BN(1),B=new BN(0),C=new BN(0),D=new BN(1),g=0;x.isEven()&&y.isEven();)x.iushrn(1),y.iushrn(1),++g;for(var yp=y.clone(),xp=x.clone();!x.isZero();){for(var i=0,im=1;0==(x.words[0]&im)&&26>i;++i,im<<=1);if(0j;++j,jm<<=1);if(0i;++i,im<<=1);if(0j;++j,jm<<=1);if(0res.cmpn(0)&&res.iadd(p),res},BN.prototype.gcd=function gcd(num){if(this.isZero())return num.abs();if(num.isZero())return this.abs();var a=this.clone(),b=num.clone();a.negative=0,b.negative=0;for(var shift=0;a.isEven()&&b.isEven();shift++)a.iushrn(1),b.iushrn(1);do{for(;a.isEven();)a.iushrn(1);for(;b.isEven();)b.iushrn(1);var r=a.cmp(b);if(0>r){var t=a;a=b,b=t}else if(0===r||0===b.cmpn(1))break;a.isub(b)}while(!0);return b.iushln(shift)},BN.prototype.invm=function invm(num){return this.egcd(num).a.umod(num)},BN.prototype.isEven=function isEven(){return 0==(1&this.words[0])},BN.prototype.isOdd=function isOdd(){return 1==(1&this.words[0])},BN.prototype.andln=function andln(num){return this.words[0]&num},BN.prototype.bincn=function bincn(bit){assert("number"==typeof bit);var r=bit%26,s=(bit-r)/26,q=1<>>26,w&=67108863,this.words[i]=w;return 0!==carry&&(this.words[i]=carry,this.length++),this},BN.prototype.isZero=function isZero(){return 1===this.length&&0===this.words[0]},BN.prototype.cmpn=function cmpn(num){var negative=0>num;if(0!==this.negative&&!negative)return-1;if(0===this.negative&&negative)return 1;this.strip();var res;if(1=num,"Number is too big");var w=0|this.words[0];res=w===num?0:wnum.length)return 1;if(this.lengthb&&(res=1);break}}return res},BN.prototype.gtn=function gtn(num){return 1===this.cmpn(num)},BN.prototype.gt=function gt(num){return 1===this.cmp(num)},BN.prototype.gten=function gten(num){return 0<=this.cmpn(num)},BN.prototype.gte=function gte(num){return 0<=this.cmp(num)},BN.prototype.ltn=function ltn(num){return-1===this.cmpn(num)},BN.prototype.lt=function lt(num){return-1===this.cmp(num)},BN.prototype.lten=function lten(num){return 0>=this.cmpn(num)},BN.prototype.lte=function lte(num){return 0>=this.cmp(num)},BN.prototype.eqn=function eqn(num){return 0===this.cmpn(num)},BN.prototype.eq=function eq(num){return 0===this.cmp(num)},BN.red=function red(num){return new Red(num)},BN.prototype.toRed=function toRed(ctx){return assert(!this.red,"Already a number in reduction context"),assert(0===this.negative,"red works only with positives"),ctx.convertTo(this)._forceRed(ctx)},BN.prototype.fromRed=function fromRed(){return assert(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},BN.prototype._forceRed=function _forceRed(ctx){return this.red=ctx,this},BN.prototype.forceRed=function forceRed(ctx){return assert(!this.red,"Already a number in reduction context"),this._forceRed(ctx)},BN.prototype.redAdd=function redAdd(num){return assert(this.red,"redAdd works only with red numbers"),this.red.add(this,num)},BN.prototype.redIAdd=function redIAdd(num){return assert(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,num)},BN.prototype.redSub=function redSub(num){return assert(this.red,"redSub works only with red numbers"),this.red.sub(this,num)},BN.prototype.redISub=function redISub(num){return assert(this.red,"redISub works only with red numbers"),this.red.isub(this,num)},BN.prototype.redShl=function redShl(num){return assert(this.red,"redShl works only with red numbers"),this.red.shl(this,num)},BN.prototype.redMul=function redMul(num){return assert(this.red,"redMul works only with red numbers"),this.red._verify2(this,num),this.red.mul(this,num)},BN.prototype.redIMul=function redIMul(num){return assert(this.red,"redMul works only with red numbers"),this.red._verify2(this,num),this.red.imul(this,num)},BN.prototype.redSqr=function redSqr(){return assert(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},BN.prototype.redISqr=function redISqr(){return assert(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},BN.prototype.redSqrt=function redSqrt(){return assert(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},BN.prototype.redInvm=function redInvm(){return assert(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},BN.prototype.redNeg=function redNeg(){return assert(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},BN.prototype.redPow=function redPow(num){return assert(this.red&&!num.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,num)};var primes={k256:null,p224:null,p192:null,p25519:null};MPrime.prototype._tmp=function _tmp(){var tmp=new BN(null);return tmp.words=Array(_Mathceil(this.n/13)),tmp},MPrime.prototype.ireduce=function ireduce(num){var r=num,rlen;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),rlen=r.bitLength();while(rlen>this.n);var cmp=rlen=input.length)return input.words[0]=0,void(input.length=1);var prev=input.words[9];for(output.words[output.length++]=prev&mask,i=10;i>>22,prev=next}prev>>>=22,input.words[i-10]=prev,input.length-=0===prev&&10>>=26,num.words[i]=lo,carry=hi}return 0!==carry&&(num.words[num.length++]=carry),num},BN._prime=function prime(name){if(primes[name])return primes[name];var prime;if("k256"===name)prime=new K256;else if("p224"===name)prime=new P224;else if("p192"===name)prime=new P192;else if("p25519"===name)prime=new P25519;else throw new Error("Unknown prime "+name);return primes[name]=prime,prime},Red.prototype._verify1=function _verify1(a){assert(0===a.negative,"red works only with positives"),assert(a.red,"red works only with red numbers")},Red.prototype._verify2=function _verify2(a,b){assert(0==(a.negative|b.negative),"red works only with positives"),assert(a.red&&a.red===b.red,"red works only with red numbers")},Red.prototype.imod=function imod(a){return this.prime?this.prime.ireduce(a)._forceRed(this):a.umod(this.m)._forceRed(this)},Red.prototype.neg=function neg(a){return a.isZero()?a.clone():this.m.sub(a)._forceRed(this)},Red.prototype.add=function add(a,b){this._verify2(a,b);var res=a.add(b);return 0<=res.cmp(this.m)&&res.isub(this.m),res._forceRed(this)},Red.prototype.iadd=function iadd(a,b){this._verify2(a,b);var res=a.iadd(b);return 0<=res.cmp(this.m)&&res.isub(this.m),res},Red.prototype.sub=function sub(a,b){this._verify2(a,b);var res=a.sub(b);return 0>res.cmpn(0)&&res.iadd(this.m),res._forceRed(this)},Red.prototype.isub=function isub(a,b){this._verify2(a,b);var res=a.isub(b);return 0>res.cmpn(0)&&res.iadd(this.m),res},Red.prototype.shl=function shl(a,num){return this._verify1(a),this.imod(a.ushln(num))},Red.prototype.imul=function imul(a,b){return this._verify2(a,b),this.imod(a.imul(b))},Red.prototype.mul=function mul(a,b){return this._verify2(a,b),this.imod(a.mul(b))},Red.prototype.isqr=function isqr(a){return this.imul(a,a.clone())},Red.prototype.sqr=function sqr(a){return this.mul(a,a)},Red.prototype.sqrt=function sqrt(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);if(assert(1==mod3%2),3===mod3){var pow=this.m.add(new BN(1)).iushrn(2);return this.pow(a,pow)}for(var q=this.m.subn(1),s=0;!q.isZero()&&0===q.andln(1);)s++,q.iushrn(1);assert(!q.isZero());var one=new BN(1).toRed(this),nOne=one.redNeg(),lpow=this.m.subn(1).iushrn(1),z=this.m.bitLength();for(z=new BN(2*z*z).toRed(this);0!==this.pow(z,lpow).cmp(nOne);)z.redIAdd(nOne);for(var c=this.pow(z,q),r=this.pow(a,q.addn(1).iushrn(1)),t=this.pow(a,q),m=s;0!==t.cmp(one);){for(var tmp=t,i=0;0!==tmp.cmp(one);i++)tmp=tmp.redSqr();assert(i>j,res!==wnd[0]&&(res=this.sqr(res)),0===bit&&0===current){currentLen=0;continue}current<<=1,current|=bit,currentLen++,(4===currentLen||0===i&&0===j)&&(res=this.mul(res,wnd[current]),currentLen=0,current=0)}start=26}return res},Red.prototype.convertTo=function convertTo(num){var r=num.umod(this.m);return r===num?r.clone():r},Red.prototype.convertFrom=function convertFrom(num){var res=num.clone();return res.red=null,res},BN.mont=function mont(num){return new Mont(num)},inherits(Mont,Red),Mont.prototype.convertTo=function convertTo(num){return this.imod(num.ushln(this.shift))},Mont.prototype.convertFrom=function convertFrom(num){var r=this.imod(num.mul(this.rinv));return r.red=null,r},Mont.prototype.imul=function imul(a,b){if(a.isZero()||b.isZero())return a.words[0]=0,a.length=1,a;var t=a.imul(b),c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),u=t.isub(c).iushrn(this.shift),res=u;return 0<=u.cmp(this.m)?res=u.isub(this.m):0>u.cmpn(0)&&(res=u.iadd(this.m)),res._forceRed(this)},Mont.prototype.mul=function mul(a,b){if(a.isZero()||b.isZero())return new BN(0)._forceRed(this);var t=a.mul(b),c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),u=t.isub(c).iushrn(this.shift),res=u;return 0<=u.cmp(this.m)?res=u.isub(this.m):0>u.cmpn(0)&&(res=u.iadd(this.m)),res._forceRed(this)},Mont.prototype.invm=function invm(a){var res=this.imod(a._invmp(this.m).mul(this.r2));return res._forceRed(this)}})("undefined"==typeof module||module,this)},{buffer:42}],23:[function(require,module,exports){"use strict";function getLens(b64){var len=b64.length;if(0>16,arr[curByte++]=255&tmp>>8,arr[curByte++]=255&tmp;return 2===placeHoldersLen&&(tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4,arr[curByte++]=255&tmp),1===placeHoldersLen&&(tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2,arr[curByte++]=255&tmp>>8,arr[curByte++]=255&tmp),arr}function tripletToBase64(num){return lookup[63&num>>18]+lookup[63&num>>12]+lookup[63&num>>6]+lookup[63&num]}function encodeChunk(uint8,start,end){for(var output=[],i=start,tmp;ilen2?len2:i+maxChunkLength));return 1===extraBytes?(tmp=uint8[len-1],parts.push(lookup[tmp>>2]+lookup[63&tmp<<4]+"==")):2===extraBytes&&(tmp=(uint8[len-2]<<8)+uint8[len-1],parts.push(lookup[tmp>>10]+lookup[63&tmp>>4]+lookup[63&tmp<<2]+"=")),parts.join("")}exports.byteLength=byteLength,exports.toByteArray=toByteArray,exports.fromByteArray=fromByteArray;for(var lookup=[],revLookup=[],Arr="undefined"==typeof Uint8Array?Array:Uint8Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,len=code.length;inum&&48<=num){sum=10*sum+(num-48);continue}if(i!==start||43!==num){if(i===start&&45===num){sign=-1;continue}if(46===num)break;throw new Error("not a number: buffer["+i+"] = "+num)}}return sum*sign}function decode(data,start,end,encoding){return null==data||0===data.length?null:("number"!=typeof start&&null==encoding&&(encoding=start,start=void 0),"number"!=typeof end&&null==encoding&&(encoding=end,end=void 0),decode.position=0,decode.encoding=encoding||null,decode.data=Buffer.isBuffer(data)?data.slice(start,end):Buffer.from(data),decode.bytes=decode.data.length,decode.next())}const INTEGER_START=105,STRING_DELIM=58,DICTIONARY_START=100,LIST_START=108,END_OF_TYPE=101;decode.bytes=0,decode.position=0,decode.data=null,decode.encoding=null,decode.next=function(){switch(decode.data[decode.position]){case DICTIONARY_START:return decode.dictionary();case LIST_START:return decode.list();case INTEGER_START:return decode.integer();default:return decode.buffer();}},decode.find=function(chr){let i=decode.position;const c=decode.data.length,d=decode.data;for(;ivalue?1:0;return value=_Mathabs(+(value||1)),_Mathfloor(_Mathlog(value))+1+sign},util.getType=function getType(value){return Buffer.isBuffer(value)?"buffer":ArrayBuffer.isView(value)?"arraybufferview":Array.isArray(value)?"array":value instanceof Number?"number":value instanceof Boolean?"boolean":value instanceof Set?"set":value instanceof Map?"map":value instanceof String?"string":value instanceof ArrayBuffer?"arraybuffer":typeof value}}).call(this)}).call(this,{isBuffer:require("../../is-buffer/index.js")})},{"../../is-buffer/index.js":149}],29:[function(require,module,exports){function composeRange(range){return range.reduce((acc,cur,idx,arr)=>((0===idx||cur!==arr[idx-1]+1)&&acc.push([]),acc[acc.length-1].push(cur),acc),[]).map(cur=>1Array.from({length:end-start+1},(cur,idx)=>idx+start);return range.reduce((acc,cur,idx,arr)=>{const r=cur.split("-").map(cur=>parseInt(cur));return acc.concat(generateRange(...r))},[])}module.exports=parseRange,module.exports.parse=parseRange,module.exports.compose=composeRange},{}],30:[function(require,module,exports){module.exports=function(haystack,needle,comparator,low,high){var mid,cmp;if(void 0===low)low=0;else if(low|=0,0>low||low>=haystack.length)throw new RangeError("invalid lower bound");if(void 0===high)high=haystack.length-1;else if(high|=0,high=haystack.length)throw new RangeError("invalid upper bound");for(;low<=high;)if(mid=low+(high-low>>>1),cmp=+comparator(haystack[mid],needle,mid,haystack),0>cmp)low=mid+1;else if(0>3;return 0!=num%8&&out++,out}Object.defineProperty(exports,"__esModule",{value:!0});var BitField=function(){function BitField(data,opts){void 0===data&&(data=0);var grow=null===opts||void 0===opts?void 0:opts.grow;this.grow=grow&&isFinite(grow)&&getByteSize(grow)||grow||0,this.buffer="number"==typeof data?new Uint8Array(getByteSize(data)):data}return BitField.prototype.get=function(i){var j=i>>3;return j>i%8)},BitField.prototype.set=function(i,value){void 0===value&&(value=!0);var j=i>>3;if(value){if(this.buffer.length>i%8}else j>i%8))},BitField.prototype.forEach=function(fn,start,end){void 0===start&&(start=0),void 0===end&&(end=8*this.buffer.length);for(var i=start,j=i>>3,y=128>>i%8,byte=this.buffer[j];i>1},BitField}();exports.default=BitField},{}],32:[function(require,module,exports){(function(Buffer){(function(){function xor(a,b){for(let len=a.length;len--;)a[len]^=b[len];return a}/*! bittorrent-protocol. MIT License. WebTorrent LLC */const arrayRemove=require("unordered-array-remove"),bencode=require("bencode"),BitField=require("bitfield").default,crypto=require("crypto"),debug=require("debug")("bittorrent-protocol"),randombytes=require("randombytes"),sha1=require("simple-sha1"),speedometer=require("speedometer"),stream=require("readable-stream"),RC4=require("rc4"),BITFIELD_GROW=4e5,KEEP_ALIVE_TIMEOUT=55e3,ALLOWED_FAST_SET_MAX_LENGTH=100,MESSAGE_PROTOCOL=Buffer.from("\x13BitTorrent protocol"),MESSAGE_KEEP_ALIVE=Buffer.from([0,0,0,0]),MESSAGE_CHOKE=Buffer.from([0,0,0,1,0]),MESSAGE_UNCHOKE=Buffer.from([0,0,0,1,1]),MESSAGE_INTERESTED=Buffer.from([0,0,0,1,2]),MESSAGE_UNINTERESTED=Buffer.from([0,0,0,1,3]),MESSAGE_RESERVED=[0,0,0,0,0,0,0,0],MESSAGE_PORT=[0,0,0,3,9,0,0],MESSAGE_HAVE_ALL=Buffer.from([0,0,0,1,14]),MESSAGE_HAVE_NONE=Buffer.from([0,0,0,1,15]),DH_PRIME="ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a36210000000000090563",DH_GENERATOR=2,VC=Buffer.from([0,0,0,0,0,0,0,0]),CRYPTO_PROVIDE=Buffer.from([0,0,1,2]),CRYPTO_SELECT=Buffer.from([0,0,0,2]);class Request{constructor(piece,offset,length,callback){this.piece=piece,this.offset=offset,this.length=length,this.callback=callback}}class HaveAllBitField{constructor(){this.buffer=new Uint8Array}get(index){return!0}set(index){}}class Wire extends stream.Duplex{constructor(type=null,retries=0,peEnabled=!1){super(),this._debugId=randombytes(4).toString("hex"),this._debug("new wire"),this.peerId=null,this.peerIdBuffer=null,this.type=type,this.amChoking=!0,this.amInterested=!1,this.peerChoking=!0,this.peerInterested=!1,this.peerPieces=new BitField(0,{grow:BITFIELD_GROW}),this.extensions={},this.peerExtensions={},this.requests=[],this.peerRequests=[],this.extendedMapping={},this.peerExtendedMapping={},this.extendedHandshake={},this.peerExtendedHandshake={},this.hasFast=!1,this.allowedFastSet=[],this.peerAllowedFastSet=[],this._ext={},this._nextExt=1,this.uploaded=0,this.downloaded=0,this.uploadSpeed=speedometer(),this.downloadSpeed=speedometer(),this._keepAliveInterval=null,this._timeout=null,this._timeoutMs=0,this._timeoutExpiresAt=null,this.destroyed=!1,this._finished=!1,this._parserSize=0,this._parser=null,this._buffer=[],this._bufferSize=0,this._peEnabled=peEnabled,peEnabled?(this._dh=crypto.createDiffieHellman(DH_PRIME,"hex",DH_GENERATOR),this._myPubKey=this._dh.generateKeys("hex")):this._myPubKey=null,this._peerPubKey=null,this._sharedSecret=null,this._peerCryptoProvide=[],this._cryptoHandshakeDone=!1,this._cryptoSyncPattern=null,this._waitMaxBytes=null,this._encryptionMethod=null,this._encryptGenerator=null,this._decryptGenerator=null,this._setGenerators=!1,this.once("finish",()=>this._onFinish()),this.on("finish",this._onFinish),this._debug("type:",this.type),"tcpIncoming"===this.type&&this._peEnabled?this._determineHandshakeType():"tcpOutgoing"===this.type&&this._peEnabled&&0===retries?this._parsePe2():this._parseHandshake(null)}setKeepAlive(enable){this._debug("setKeepAlive %s",enable),clearInterval(this._keepAliveInterval);!1===enable||(this._keepAliveInterval=setInterval(()=>{this.keepAlive()},KEEP_ALIVE_TIMEOUT))}setTimeout(ms,unref){this._debug("setTimeout ms=%d unref=%s",ms,unref),this._timeoutMs=ms,this._timeoutUnref=!!unref,this._resetTimeout(!0)}destroy(){if(!this.destroyed)return this.destroyed=!0,this._debug("destroy"),this.emit("close"),this.end(),this}end(...args){return this._debug("end"),this._onUninterested(),this._onChoke(),super.end(...args)}use(Extension){function noop(){}const name=Extension.prototype.name;if(!name)throw new Error("Extension class requires a \"name\" property on the prototype");this._debug("use extension.name=%s",name);const ext=this._nextExt,handler=new Extension(this);"function"!=typeof handler.onHandshake&&(handler.onHandshake=noop),"function"!=typeof handler.onExtendedHandshake&&(handler.onExtendedHandshake=noop),"function"!=typeof handler.onMessage&&(handler.onMessage=noop),this.extendedMapping[ext]=name,this._ext[name]=handler,this[name]=handler,this._nextExt+=1}keepAlive(){this._debug("keep-alive"),this._push(MESSAGE_KEEP_ALIVE)}sendPe1(){if(this._peEnabled){const padALen=_Mathfloor(513*Math.random()),padA=randombytes(padALen);this._push(Buffer.concat([Buffer.from(this._myPubKey,"hex"),padA]))}}sendPe2(){const padBLen=_Mathfloor(513*Math.random()),padB=randombytes(padBLen);this._push(Buffer.concat([Buffer.from(this._myPubKey,"hex"),padB]))}sendPe3(infoHash){this.setEncrypt(this._sharedSecret,infoHash);const hash1Buffer=Buffer.from(sha1.sync(Buffer.from(this._utfToHex("req1")+this._sharedSecret,"hex")),"hex"),hash2Buffer=Buffer.from(sha1.sync(Buffer.from(this._utfToHex("req2")+infoHash,"hex")),"hex"),hash3Buffer=Buffer.from(sha1.sync(Buffer.from(this._utfToHex("req3")+this._sharedSecret,"hex")),"hex"),hashesXorBuffer=xor(hash2Buffer,hash3Buffer),padCLen=randombytes(2).readUInt16BE(0)%512,padCBuffer=randombytes(padCLen);let vcAndProvideBuffer=Buffer.alloc(14+padCLen+2);VC.copy(vcAndProvideBuffer),CRYPTO_PROVIDE.copy(vcAndProvideBuffer,8),vcAndProvideBuffer.writeInt16BE(padCLen,12),padCBuffer.copy(vcAndProvideBuffer,14),vcAndProvideBuffer.writeInt16BE(0,14+padCLen),vcAndProvideBuffer=this._encryptHandshake(vcAndProvideBuffer),this._push(Buffer.concat([hash1Buffer,hashesXorBuffer,vcAndProvideBuffer]))}sendPe4(infoHash){this.setEncrypt(this._sharedSecret,infoHash);const padDLen=randombytes(2).readUInt16BE(0)%512,padDBuffer=randombytes(padDLen);let vcAndSelectBuffer=Buffer.alloc(14+padDLen);VC.copy(vcAndSelectBuffer),CRYPTO_SELECT.copy(vcAndSelectBuffer,8),vcAndSelectBuffer.writeInt16BE(padDLen,12),padDBuffer.copy(vcAndSelectBuffer,14),vcAndSelectBuffer=this._encryptHandshake(vcAndSelectBuffer),this._push(vcAndSelectBuffer),this._cryptoHandshakeDone=!0,this._debug("completed crypto handshake")}handshake(infoHash,peerId,extensions){let infoHashBuffer,peerIdBuffer;if("string"==typeof infoHash?(infoHash=infoHash.toLowerCase(),infoHashBuffer=Buffer.from(infoHash,"hex")):(infoHashBuffer=infoHash,infoHash=infoHashBuffer.toString("hex")),"string"==typeof peerId?peerIdBuffer=Buffer.from(peerId,"hex"):(peerIdBuffer=peerId,peerId=peerIdBuffer.toString("hex")),this._infoHash=infoHashBuffer,20!==infoHashBuffer.length||20!==peerIdBuffer.length)throw new Error("infoHash and peerId MUST have length 20");this._debug("handshake i=%s p=%s exts=%o",infoHash,peerId,extensions);const reserved=Buffer.from(MESSAGE_RESERVED);this.extensions={extended:!0,dht:!!(extensions&&extensions.dht),fast:!!(extensions&&extensions.fast)},reserved[5]|=16,this.extensions.dht&&(reserved[7]|=1),this.extensions.fast&&(reserved[7]|=4),this.extensions.fast&&this.peerExtensions.fast&&(this._debug("fast extension is enabled"),this.hasFast=!0),this._push(Buffer.concat([MESSAGE_PROTOCOL,reserved,infoHashBuffer,peerIdBuffer])),this._handshakeSent=!0,this.peerExtensions.extended&&!this._extendedHandshakeSent&&this._sendExtendedHandshake()}_sendExtendedHandshake(){const msg=Object.assign({},this.extendedHandshake);for(const ext in msg.m={},this.extendedMapping){const name=this.extendedMapping[ext];msg.m[name]=+ext}this.extended(0,bencode.encode(msg)),this._extendedHandshakeSent=!0}choke(){if(!this.amChoking)if(this.amChoking=!0,this._debug("choke"),this._push(MESSAGE_CHOKE),this.hasFast)for(let allowedCount=0;this.peerRequests.length>allowedCount;){const request=this.peerRequests[allowedCount];this.allowedFastSet.includes(request.piece)?++allowedCount:this.reject(request.piece,request.offset,request.length)}else for(;this.peerRequests.length;)this.peerRequests.pop()}unchoke(){this.amChoking&&(this.amChoking=!1,this._debug("unchoke"),this._push(MESSAGE_UNCHOKE))}interested(){this.amInterested||(this.amInterested=!0,this._debug("interested"),this._push(MESSAGE_INTERESTED))}uninterested(){this.amInterested&&(this.amInterested=!1,this._debug("uninterested"),this._push(MESSAGE_UNINTERESTED))}have(index){this._debug("have %d",index),this._message(4,[index],null)}bitfield(bitfield){this._debug("bitfield"),Buffer.isBuffer(bitfield)||(bitfield=bitfield.buffer),this._message(5,[],bitfield)}request(index,offset,length,cb){return cb||(cb=()=>{}),this._finished?cb(new Error("wire is closed")):this.peerChoking&&!(this.hasFast&&this.peerAllowedFastSet.includes(index))?cb(new Error("peer is choking")):void(this._debug("request index=%d offset=%d length=%d",index,offset,length),this.requests.push(new Request(index,offset,length,cb)),!this._timeout&&this._resetTimeout(!0),this._message(6,[index,offset,length],null))}piece(index,offset,buffer){this._debug("piece index=%d offset=%d",index,offset),this._message(7,[index,offset],buffer),this.uploaded+=buffer.length,this.uploadSpeed(buffer.length),this.emit("upload",buffer.length)}cancel(index,offset,length){this._debug("cancel index=%d offset=%d length=%d",index,offset,length),this._callback(this._pull(this.requests,index,offset,length),new Error("request was cancelled"),null),this._message(8,[index,offset,length],null)}port(port){this._debug("port %d",port);const message=Buffer.from(MESSAGE_PORT);message.writeUInt16BE(port,5),this._push(message)}suggest(index){if(!this.hasFast)throw Error("fast extension is disabled");this._debug("suggest %d",index),this._message(13,[index],null)}haveAll(){if(!this.hasFast)throw Error("fast extension is disabled");this._debug("have-all"),this._push(MESSAGE_HAVE_ALL)}haveNone(){if(!this.hasFast)throw Error("fast extension is disabled");this._debug("have-none"),this._push(MESSAGE_HAVE_NONE)}reject(index,offset,length){if(!this.hasFast)throw Error("fast extension is disabled");this._debug("reject index=%d offset=%d length=%d",index,offset,length),this._pull(this.peerRequests,index,offset,length),this._message(16,[index,offset,length],null)}allowedFast(index){if(!this.hasFast)throw Error("fast extension is disabled");this._debug("allowed-fast %d",index),this.allowedFastSet.includes(index)||this.allowedFastSet.push(index),this._message(17,[index],null)}extended(ext,obj){if(this._debug("extended ext=%s",ext),"string"==typeof ext&&this.peerExtendedMapping[ext]&&(ext=this.peerExtendedMapping[ext]),"number"==typeof ext){const extId=Buffer.from([ext]),buf=Buffer.isBuffer(obj)?obj:bencode.encode(obj);this._message(20,[],Buffer.concat([extId,buf]))}else throw new Error(`Unrecognized extension: ${ext}`)}setEncrypt(sharedSecret,infoHash){let encryptKey,decryptKey,encryptKeyBuf,encryptKeyIntArray,decryptKeyBuf,decryptKeyIntArray;switch(this.type){case"tcpIncoming":encryptKey=sha1.sync(Buffer.from(this._utfToHex("keyB")+sharedSecret+infoHash,"hex")),decryptKey=sha1.sync(Buffer.from(this._utfToHex("keyA")+sharedSecret+infoHash,"hex")),encryptKeyBuf=Buffer.from(encryptKey,"hex"),encryptKeyIntArray=[];for(const value of encryptKeyBuf.values())encryptKeyIntArray.push(value);decryptKeyBuf=Buffer.from(decryptKey,"hex"),decryptKeyIntArray=[];for(const value of decryptKeyBuf.values())decryptKeyIntArray.push(value);this._encryptGenerator=new RC4(encryptKeyIntArray),this._decryptGenerator=new RC4(decryptKeyIntArray);break;case"tcpOutgoing":encryptKey=sha1.sync(Buffer.from(this._utfToHex("keyA")+sharedSecret+infoHash,"hex")),decryptKey=sha1.sync(Buffer.from(this._utfToHex("keyB")+sharedSecret+infoHash,"hex")),encryptKeyBuf=Buffer.from(encryptKey,"hex"),encryptKeyIntArray=[];for(const value of encryptKeyBuf.values())encryptKeyIntArray.push(value);decryptKeyBuf=Buffer.from(decryptKey,"hex"),decryptKeyIntArray=[];for(const value of decryptKeyBuf.values())decryptKeyIntArray.push(value);this._encryptGenerator=new RC4(encryptKeyIntArray),this._decryptGenerator=new RC4(decryptKeyIntArray);break;default:return!1;}for(let i=0;1024>i;i++)this._encryptGenerator.randomByte(),this._decryptGenerator.randomByte();return this._setGenerators=!0,!0}_read(){}_message(id,numbers,data){const dataLength=data?data.length:0,buffer=Buffer.allocUnsafe(5+4*numbers.length);buffer.writeUInt32BE(buffer.length+dataLength-4,0),buffer[4]=id;for(let i=0;irequest===this._pull(this.peerRequests,index,offset,length)?err?(this._debug("error satisfying request index=%d offset=%d length=%d (%s)",index,offset,length,err.message),void(this.hasFast&&this.reject(index,offset,length))):void this.piece(index,offset,buffer):void 0,request=new Request(index,offset,length,respond);this.peerRequests.push(request),this.emit("request",index,offset,length,respond)}_onPiece(index,offset,buffer){this._debug("got piece index=%d offset=%d",index,offset),this._callback(this._pull(this.requests,index,offset,buffer.length),null,buffer),this.downloaded+=buffer.length,this.downloadSpeed(buffer.length),this.emit("download",buffer.length),this.emit("piece",index,offset,buffer)}_onCancel(index,offset,length){this._debug("got cancel index=%d offset=%d length=%d",index,offset,length),this._pull(this.peerRequests,index,offset,length),this.emit("cancel",index,offset,length)}_onPort(port){this._debug("got port %d",port),this.emit("port",port)}_onSuggest(index){return this.hasFast?void(this._debug("got suggest %d",index),this.emit("suggest",index)):(this._debug("Error: got suggest whereas fast extension is disabled"),void this.destroy())}_onHaveAll(){return this.hasFast?void(this._debug("got have-all"),this.peerPieces=new HaveAllBitField,this.emit("have-all")):(this._debug("Error: got have-all whereas fast extension is disabled"),void this.destroy())}_onHaveNone(){return this.hasFast?void(this._debug("got have-none"),this.emit("have-none")):(this._debug("Error: got have-none whereas fast extension is disabled"),void this.destroy())}_onReject(index,offset,length){return this.hasFast?void(this._debug("got reject index=%d offset=%d length=%d",index,offset,length),this._callback(this._pull(this.requests,index,offset,length),new Error("request was rejected"),null),this.emit("reject",index,offset,length)):(this._debug("Error: got reject whereas fast extension is disabled"),void this.destroy())}_onAllowedFast(index){return this.hasFast?void(this._debug("got allowed-fast %d",index),!this.peerAllowedFastSet.includes(index)&&this.peerAllowedFastSet.push(index),this.peerAllowedFastSet.length>ALLOWED_FAST_SET_MAX_LENGTH&&this.peerAllowedFastSet.shift(),this.emit("allowed-fast",index)):(this._debug("Error: got allowed-fast whereas fast extension is disabled"),void this.destroy())}_onExtended(ext,buf){if(0===ext){let info;try{info=bencode.decode(buf)}catch(err){this._debug("ignoring invalid extended handshake: %s",err.message||err)}if(!info)return;if(this.peerExtendedHandshake=info,"object"==typeof info.m)for(const name in info.m)this.peerExtendedMapping[name]=+info.m[name].toString();for(const name in this._ext)this.peerExtendedMapping[name]&&this._ext[name].onExtendedHandshake(this.peerExtendedHandshake);this._debug("got extended handshake"),this.emit("extended","handshake",this.peerExtendedHandshake)}else this.extendedMapping[ext]&&(ext=this.extendedMapping[ext],this._ext[ext]&&this._ext[ext].onMessage(buf)),this._debug("got extended message ext=%s",ext),this.emit("extended",ext,buf)}_onTimeout(){this._debug("request timed out"),this._callback(this.requests.shift(),new Error("request has timed out"),null),this.emit("timeout")}_write(data,encoding,cb){if(2===this._encryptionMethod&&this._cryptoHandshakeDone&&(data=this._decrypt(data)),this._bufferSize+=data.length,this._buffer.push(data),1this._waitMaxBytes+this._cryptoSyncPattern.length)return this._debug("Error: could not resynchronize"),void this.destroy()}for(;this._bufferSize>=this._parserSize&&!this._cryptoSyncPattern;)if(0===this._parserSize)this._parser(Buffer.from([]));else{const buffer=this._buffer[0];this._bufferSize-=this._parserSize,this._buffer=this._bufferSize?[buffer.slice(this._parserSize)]:[],this._parser(buffer.slice(0,this._parserSize))}cb(null)}_callback(request,err,buffer){request&&(this._resetTimeout(!this.peerChoking&&!this._finished),request.callback(err,buffer))}_resetTimeout(setAgain){if(!setAgain||!this._timeoutMs||!this.requests.length)return clearTimeout(this._timeout),this._timeout=null,void(this._timeoutExpiresAt=null);const timeoutExpiresAt=Date.now()+this._timeoutMs;if(this._timeout){if(timeoutExpiresAt-this._timeoutExpiresAt<.05*this._timeoutMs)return;clearTimeout(this._timeout)}this._timeoutExpiresAt=timeoutExpiresAt,this._timeout=setTimeout(()=>this._onTimeout(),this._timeoutMs),this._timeoutUnref&&this._timeout.unref&&this._timeout.unref()}_parse(size,parser){this._parserSize=size,this._parser=parser}_parseUntil(pattern,maxBytes){this._cryptoSyncPattern=pattern,this._waitMaxBytes=maxBytes}_onMessageLength(buffer){const length=buffer.readUInt32BE(0);0{const pstrlen=pstrLenBuffer.readUInt8(0);19===pstrlen?this._parse(pstrlen+48,this._onHandshakeBuffer):this._parsePe1(pstrLenBuffer)})}_parsePe1(pubKeyPrefix){this._parse(95,pubKeySuffix=>{this._onPe1(Buffer.concat([pubKeyPrefix,pubKeySuffix])),this._parsePe3()})}_parsePe2(){this._parse(96,pubKey=>{for(this._onPe2(pubKey);!this._setGenerators;);this._parsePe4()})}_parsePe3(){const hash1Buffer=Buffer.from(sha1.sync(Buffer.from(this._utfToHex("req1")+this._sharedSecret,"hex")),"hex");this._parseUntil(hash1Buffer,512),this._parse(20,buffer=>{for(this._onPe3(buffer);!this._setGenerators;);this._parsePe3Encrypted()})}_parsePe3Encrypted(){this._parse(14,buffer=>{const vcBuffer=this._decryptHandshake(buffer.slice(0,8)),peerProvideBuffer=this._decryptHandshake(buffer.slice(8,12)),padCLen=this._decryptHandshake(buffer.slice(12,14)).readUInt16BE(0);this._parse(padCLen,padCBuffer=>{padCBuffer=this._decryptHandshake(padCBuffer),this._parse(2,iaLenBuf=>{const iaLen=this._decryptHandshake(iaLenBuf).readUInt16BE(0);this._parse(iaLen,iaBuffer=>{iaBuffer=this._decryptHandshake(iaBuffer),this._onPe3Encrypted(vcBuffer,peerProvideBuffer,padCBuffer,iaBuffer);const pstrlen=iaLen?iaBuffer.readUInt8(0):null,protocol=iaLen?iaBuffer.slice(1,20):null;19===pstrlen&&"BitTorrent protocol"===protocol.toString()?this._onHandshakeBuffer(iaBuffer.slice(1)):this._parseHandshake()})})})})}_parsePe4(){const vcBufferEncrypted=this._decryptHandshake(VC);this._parseUntil(vcBufferEncrypted,512),this._parse(6,buffer=>{const peerSelectBuffer=this._decryptHandshake(buffer.slice(0,4)),padDLen=this._decryptHandshake(buffer.slice(4,6)).readUInt16BE(0);this._parse(padDLen,padDBuf=>{this._decryptHandshake(padDBuf),this._onPe4(peerSelectBuffer),this._parseHandshake(null)})})}_parseHandshake(){this._parse(1,buffer=>{const pstrlen=buffer.readUInt8(0);return 19===pstrlen?void this._parse(pstrlen+48,this._onHandshakeBuffer):(this._debug("Error: wire not speaking BitTorrent protocol (%s)",pstrlen.toString()),void this.end())})}_onHandshakeBuffer(handshake){const protocol=handshake.slice(0,19);return"BitTorrent protocol"===protocol.toString()?void(handshake=handshake.slice(19),this._onHandshake(handshake.slice(8,28),handshake.slice(28,48),{dht:!!(1&handshake[7]),fast:!!(4&handshake[7]),extended:!!(16&handshake[5])}),this._parse(4,this._onMessageLength)):(this._debug("Error: wire not speaking BitTorrent protocol (%s)",protocol.toString()),void this.end())}_onFinish(){for(this._finished=!0,this.push(null);this.read(););for(clearInterval(this._keepAliveInterval),this._parse(Number.MAX_VALUE,()=>{});this.peerRequests.length;)this.peerRequests.pop();for(;this.requests.length;)this._callback(this.requests.pop(),new Error("wire was closed"),null)}_debug(...args){args[0]=`[${this._debugId}] ${args[0]}`,debug(...args)}_pull(requests,piece,offset,length){for(let i=0;i(announceUrl=announceUrl.toString(),"/"===announceUrl[announceUrl.length-1]&&(announceUrl=announceUrl.substring(0,announceUrl.length-1)),announceUrl)),announce=Array.from(new Set(announce));const webrtcSupport=!1!==this._wrtc&&(!!this._wrtc||Peer.WEBRTC_SUPPORT),nextTickWarn=err=>{queueMicrotask(()=>{this.emit("warning",err)})};this._trackers=announce.map(announceUrl=>{let parsedUrl;try{parsedUrl=common.parseUrl(announceUrl)}catch(err){return nextTickWarn(new Error(`Invalid tracker URL: ${announceUrl}`)),null}const port=parsedUrl.port;if(0>port||65535{tracker.setInterval()})}stop(opts){opts=this._defaultAnnounceOpts(opts),opts.event="stopped",debug("send `stop` %o",opts),this._announce(opts)}complete(opts){opts||(opts={}),opts=this._defaultAnnounceOpts(opts),opts.event="completed",debug("send `complete` %o",opts),this._announce(opts)}update(opts){opts=this._defaultAnnounceOpts(opts),opts.event&&delete opts.event,debug("send `update` %o",opts),this._announce(opts)}_announce(opts){this._trackers.forEach(tracker=>{tracker.announce(opts)})}scrape(opts){debug("send `scrape`"),opts||(opts={}),this._trackers.forEach(tracker=>{tracker.scrape(opts)})}setInterval(intervalMs){debug("setInterval %d",intervalMs),this._trackers.forEach(tracker=>{tracker.setInterval(intervalMs)})}destroy(cb){if(!this.destroyed){this.destroyed=!0,debug("destroy");const tasks=this._trackers.map(tracker=>cb=>{tracker.destroy(cb)});parallel(tasks,cb),this._trackers=[],this._getAnnounceOpts=null}}_defaultAnnounceOpts(opts={}){return null==opts.numwant&&(opts.numwant=common.DEFAULT_ANNOUNCE_PEERS),null==opts.uploaded&&(opts.uploaded=0),null==opts.downloaded&&(opts.downloaded=0),this._getAnnounceOpts&&(opts=Object.assign({},opts,this._getAnnounceOpts())),opts}}Client.scrape=(opts,cb)=>{if(cb=once(cb),!opts.infoHash)throw new Error("Option `infoHash` is required");if(!opts.announce)throw new Error("Option `announce` is required");const clientOpts=Object.assign({},opts,{infoHash:Array.isArray(opts.infoHash)?opts.infoHash[0]:opts.infoHash,peerId:Buffer.from("01234567890123456789"),port:6881}),client=new Client(clientOpts);client.once("error",cb),client.once("warning",cb);let len=Array.isArray(opts.infoHash)?opts.infoHash.length:1;const results={};return client.on("scrape",data=>{if(len-=1,results[data.infoHash]=data,0===len){client.destroy();const keys=Object.keys(results);1===keys.length?cb(null,results[keys[0]]):cb(null,results)}}),opts.infoHash=Array.isArray(opts.infoHash)?opts.infoHash.map(infoHash=>Buffer.from(infoHash,"hex")):Buffer.from(opts.infoHash,"hex"),client.scrape({infoHash:opts.infoHash}),client},module.exports=Client}).call(this)}).call(this,require("_process"),require("buffer").Buffer)},{"./lib/client/http-tracker":42,"./lib/client/udp-tracker":42,"./lib/client/websocket-tracker":35,"./lib/common":36,_process:193,buffer:76,debug:91,events:123,once:178,"queue-microtask":206,"run-parallel":233,"simple-peer":247}],34:[function(require,module,exports){const EventEmitter=require("events");class Tracker extends EventEmitter{constructor(client,announceUrl){super(),this.client=client,this.announceUrl=announceUrl,this.interval=null,this.destroyed=!1}setInterval(intervalMs){null==intervalMs&&(intervalMs=this.DEFAULT_ANNOUNCE_INTERVAL),clearInterval(this.interval),intervalMs&&(this.interval=setInterval(()=>{this.announce(this.client._defaultAnnounceOpts())},intervalMs),this.interval.unref&&this.interval.unref())}}module.exports=Tracker},{events:123}],35:[function(require,module,exports){function noop(){}const clone=require("clone"),debug=require("debug")("bittorrent-tracker:websocket-tracker"),Peer=require("simple-peer"),randombytes=require("randombytes"),Socket=require("simple-websocket"),Socks=require("socks"),common=require("../common"),Tracker=require("./tracker"),socketPool={},RECONNECT_MINIMUM=10000,RECONNECT_MAXIMUM=3600000,RECONNECT_VARIANCE=300000,OFFER_TIMEOUT=50000;class WebSocketTracker extends Tracker{constructor(client,announceUrl){super(client,announceUrl),debug("new websocket tracker %s",announceUrl),this.peers={},this.socket=null,this.reconnecting=!1,this.retries=0,this.reconnectTimer=null,this.expectingResponse=!1,this._openSocket()}announce(opts){if(this.destroyed||this.reconnecting)return;if(!this.socket.connected)return void this.socket.once("connect",()=>{this.announce(opts)});const params=Object.assign({},opts,{action:"announce",info_hash:this.client._infoHashBinary,peer_id:this.client._peerIdBinary});if(this._trackerId&&(params.trackerid=this._trackerId),"stopped"===opts.event||"completed"===opts.event)this._send(params);else{const numwant=_Mathmin(opts.numwant,5);this._generateOffers(numwant,offers=>{params.numwant=numwant,params.offers=offers,this._send(params)})}}scrape(opts){if(this.destroyed||this.reconnecting)return;if(!this.socket.connected)return void this.socket.once("connect",()=>{this.scrape(opts)});const infoHashes=Array.isArray(opts.infoHash)&&0infoHash.toString("binary")):opts.infoHash&&opts.infoHash.toString("binary")||this.client._infoHashBinary,params={action:"scrape",info_hash:infoHashes};this._send(params)}destroy(cb=noop){function destroyCleanup(){timeout&&(clearTimeout(timeout),timeout=null),socket.removeListener("data",destroyCleanup),socket.destroy(),socket=null}if(this.destroyed)return cb(null);for(const peerId in this.destroyed=!0,clearInterval(this.interval),clearTimeout(this.reconnectTimer),this.peers){const peer=this.peers[peerId];clearTimeout(peer.trackerTimeout),peer.destroy()}if(this.peers=null,this.socket&&(this.socket.removeListener("connect",this._onSocketConnectBound),this.socket.removeListener("data",this._onSocketDataBound),this.socket.removeListener("close",this._onSocketCloseBound),this.socket.removeListener("error",this._onSocketErrorBound),this.socket=null),this._onSocketConnectBound=null,this._onSocketErrorBound=null,this._onSocketDataBound=null,this._onSocketCloseBound=null,socketPool[this.announceUrl]&&(socketPool[this.announceUrl].consumers-=1),0{this._onSocketConnect()},this._onSocketErrorBound=err=>{this._onSocketError(err)},this._onSocketDataBound=data=>{this._onSocketData(data)},this._onSocketCloseBound=()=>{this._onSocketClose()},this.socket=socketPool[this.announceUrl],this.socket)socketPool[this.announceUrl].consumers+=1,this.socket.connected&&this._onSocketConnectBound();else{const parsedUrl=new URL(this.announceUrl);let agent;this.client._proxyOpts&&(agent="wss:"===parsedUrl.protocol?this.client._proxyOpts.httpsAgent:this.client._proxyOpts.httpAgent,!agent&&this.client._proxyOpts.socksProxy&&(agent=new Socks.Agent(clone(this.client._proxyOpts.socksProxy),"wss:"===parsedUrl.protocol))),this.socket=socketPool[this.announceUrl]=new Socket({url:this.announceUrl,agent}),this.socket.consumers=1,this.socket.once("connect",this._onSocketConnectBound)}this.socket.on("data",this._onSocketDataBound),this.socket.once("close",this._onSocketCloseBound),this.socket.once("error",this._onSocketErrorBound)}_onSocketConnect(){this.destroyed||this.reconnecting&&(this.reconnecting=!1,this.retries=0,this.announce(this.client._defaultAnnounceOpts()))}_onSocketData(data){if(!this.destroyed){this.expectingResponse=!1;try{data=JSON.parse(data)}catch(err){return void this.client.emit("warning",new Error("Invalid tracker response"))}"announce"===data.action?this._onAnnounceResponse(data):"scrape"===data.action?this._onScrapeResponse(data):this._onSocketError(new Error(`invalid action in WS response: ${data.action}`))}}_onAnnounceResponse(data){if(data.info_hash!==this.client._infoHashBinary)return void debug("ignoring websocket data from %s for %s (looking for %s: reused socket)",this.announceUrl,common.binaryToHex(data.info_hash),this.client.infoHash);if(data.peer_id&&data.peer_id===this.client._peerIdBinary)return;debug("received %s from %s for %s",JSON.stringify(data),this.announceUrl,this.client.infoHash);const failure=data["failure reason"];if(failure)return this.client.emit("warning",new Error(failure));const warning=data["warning message"];warning&&this.client.emit("warning",new Error(warning));const interval=data.interval||data["min interval"];interval&&this.setInterval(1e3*interval);const trackerId=data["tracker id"];if(trackerId&&(this._trackerId=trackerId),null!=data.complete){const response=Object.assign({},data,{announce:this.announceUrl,infoHash:common.binaryToHex(data.info_hash)});this.client.emit("update",response)}let peer;if(data.offer&&data.peer_id&&(debug("creating peer (from remote offer)"),peer=this._createPeer(),peer.id=common.binaryToHex(data.peer_id),peer.once("signal",answer=>{const params={action:"announce",info_hash:this.client._infoHashBinary,peer_id:this.client._peerIdBinary,to_peer_id:data.peer_id,answer,offer_id:data.offer_id};this._trackerId&&(params.trackerid=this._trackerId),this._send(params)}),this.client.emit("peer",peer),peer.signal(data.offer)),data.answer&&data.peer_id){const offerId=common.binaryToHex(data.offer_id);peer=this.peers[offerId],peer?(peer.id=common.binaryToHex(data.peer_id),this.client.emit("peer",peer),peer.signal(data.answer),clearTimeout(peer.trackerTimeout),peer.trackerTimeout=null,delete this.peers[offerId]):debug(`got unexpected answer: ${JSON.stringify(data.answer)}`)}}_onScrapeResponse(data){data=data.files||{};const keys=Object.keys(data);return 0===keys.length?void this.client.emit("warning",new Error("invalid scrape response")):void keys.forEach(infoHash=>{const response=Object.assign(data[infoHash],{announce:this.announceUrl,infoHash:common.binaryToHex(infoHash)});this.client.emit("scrape",response)})}_onSocketClose(){this.destroyed||(this.destroy(),this._startReconnectTimer())}_onSocketError(err){this.destroyed||(this.destroy(),this.client.emit("warning",err),this._startReconnectTimer())}_startReconnectTimer(){const ms=_Mathfloor(Math.random()*RECONNECT_VARIANCE)+_Mathmin(_Mathpow(2,this.retries)*RECONNECT_MINIMUM,RECONNECT_MAXIMUM);this.reconnecting=!0,clearTimeout(this.reconnectTimer),this.reconnectTimer=setTimeout(()=>{this.retries++,this._openSocket()},ms),this.reconnectTimer.unref&&this.reconnectTimer.unref(),debug("reconnecting socket in %s ms",ms)}_send(params){if(!this.destroyed){this.expectingResponse=!0;const message=JSON.stringify(params);debug("send %s",message),this.socket.send(message)}}_generateOffers(numwant,cb){function generateOffer(){const offerId=randombytes(20).toString("hex");debug("creating peer (from _generateOffers)");const peer=self.peers[offerId]=self._createPeer({initiator:!0});peer.once("signal",offer=>{offers.push({offer,offer_id:common.hexToBinary(offerId)}),checkDone()}),peer.trackerTimeout=setTimeout(()=>{debug("tracker timeout: destroying peer"),peer.trackerTimeout=null,delete self.peers[offerId],peer.destroy()},OFFER_TIMEOUT),peer.trackerTimeout.unref&&peer.trackerTimeout.unref()}function checkDone(){offers.length===numwant&&(debug("generated %s offers",numwant),cb(offers))}const self=this,offers=[];debug("generating %s offers",numwant);for(let i=0;i("string"!=typeof str&&(str+=""),Buffer.from(str,"binary").toString("hex")),exports.hexToBinary=str=>("string"!=typeof str&&(str+=""),Buffer.from(str,"hex").toString("binary")),exports.parseUrl=str=>{const url=new URL(str.replace(/^udp:/,"http:"));return str.match(/^udp:/)&&Object.defineProperties(url,{href:{value:url.href.replace(/^http/,"udp")},protocol:{value:url.protocol.replace(/^http/,"udp")},origin:{value:url.origin.replace(/^http/,"udp")}}),url};const config=require("./common-node");Object.assign(exports,config)}).call(this)}).call(this,require("buffer").Buffer)},{"./common-node":42,buffer:76}],37:[function(require,module,exports){(function(Buffer){(function(){/*! blob-to-buffer. MIT License. Feross Aboukhadijeh */module.exports=function blobToBuffer(blob,cb){function onLoadEnd(e){reader.removeEventListener("loadend",onLoadEnd,!1),e.error?cb(e.error):cb(null,Buffer.from(reader.result))}if("undefined"==typeof Blob||!(blob instanceof Blob))throw new Error("first argument must be a Blob");if("function"!=typeof cb)throw new Error("second argument must be a function");const reader=new FileReader;reader.addEventListener("loadend",onLoadEnd,!1),reader.readAsArrayBuffer(blob)}}).call(this)}).call(this,require("buffer").Buffer)},{buffer:76}],38:[function(require,module,exports){function concat(chunks,size){if("string"==typeof chunks[0])return chunks.join("");if("number"==typeof chunks[0])return new Uint8Array(chunks);const b=new Uint8Array(size);let offset=0;for(let i=0,l=chunks.length;i=size){const b=concat(buffered,bufferedBytes);let offset=0;for(;bufferedBytes>=size;)yield b.slice(offset,offset+size),bufferedBytes-=size,offset+=size;buffered=[b.slice(offset,b.length)]}bufferedBytes&&(yield concat(buffered,zeroPadding?size:bufferedBytes))}},{}],39:[function(require,module,exports){(function(Buffer){(function(){const{Transform}=require("readable-stream");class Block extends Transform{constructor(size,opts={}){super(opts),"object"==typeof size&&(opts=size,size=opts.size),this.size=size||512;const{nopad,zeroPadding=!0}=opts;this._zeroPadding=!nopad&&!!zeroPadding,this._buffered=[],this._bufferedBytes=0}_transform(buf,enc,next){for(this._bufferedBytes+=buf.length,this._buffered.push(buf);this._bufferedBytes>=this.size;){this._bufferedBytes-=this.size;const blockBufs=[];for(let blockBufsBytes=0;blockBufsBytes=c?c-48:65<=c&&70>=c?c-55:97<=c&&102>=c?c-87:void assert(!1,"Invalid character in "+string)}function parseHexByte(string,lowerBound,index){var r=parseHex4Bits(string,index);return index-1>=lowerBound&&(r|=parseHex4Bits(string,index-1)<<4),r}function parseBase(str,start,end,mul){for(var r=0,b=0,len=_Mathmin(str.length,end),i=start,c;i"}function toBitArray(num){for(var w=Array(num.bitLength()),bit=0;bit>>wbit}return w}function smallMulTo(self,num,out){out.negative=num.negative^self.negative;var len=0|self.length+num.length;out.length=len,len=0|len-1;var a=0|self.words[0],b=0|num.words[0],r=a*b,lo=67108863&r,carry=0|r/67108864;out.words[0]=lo;for(var k=1;k>>26,rword=67108863&carry,maxJ=_Mathmin(k,num.length-1),j=_Mathmax(0,k-self.length+1),i;j<=maxJ;j++)i=0|k-j,a=0|self.words[i],b=0|num.words[j],r=a*b+rword,ncarry+=0|r/67108864,rword=67108863&r;out.words[k]=0|rword,carry=0|ncarry}return 0===carry?out.length--:out.words[k]=0|carry,out._strip()}function bigMulTo(self,num,out){out.negative=num.negative^self.negative,out.length=self.length+num.length;for(var carry=0,hncarry=0,k=0,ncarry;k>>26),hncarry+=ncarry>>>26,ncarry&=67108863}out.words[k]=rword,carry=ncarry,ncarry=hncarry}return 0===carry?out.length--:out.words[k]=carry,out._strip()}function jumboMulTo(self,num,out){return bigMulTo(self,num,out)}function FFTM(x,y){this.x=x,this.y=y}function MPrime(name,p){this.name=name,this.p=new BN(p,16),this.n=this.p.bitLength(),this.k=new BN(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function K256(){MPrime.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function P224(){MPrime.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function P192(){MPrime.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function P25519(){MPrime.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function Red(m){if("string"==typeof m){var prime=BN._prime(m);this.m=prime.p,this.prime=prime}else assert(m.gtn(1),"modulus must be greater than 1"),this.m=m,this.prime=null}function Mont(m){Red.call(this,m),this.shift=this.m.bitLength(),0!=this.shift%26&&(this.shift+=26-this.shift%26),this.r=new BN(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof module?module.exports=BN:exports.BN=BN,BN.BN=BN,BN.wordSize=26;var Buffer;try{Buffer="undefined"!=typeof window&&"undefined"!=typeof window.Buffer?window.Buffer:require("buffer").Buffer}catch(e){}if(BN.isBN=function isBN(num){return!!(num instanceof BN)||null!==num&&"object"==typeof num&&num.constructor.wordSize===BN.wordSize&&Array.isArray(num.words)},BN.max=function max(left,right){return 0left.cmp(right)?left:right},BN.prototype._init=function init(number,base,endian){if("number"==typeof number)return this._initNumber(number,base,endian);if("object"==typeof number)return this._initArray(number,base,endian);"hex"===base&&(base=16),assert(base===(0|base)&&2<=base&&36>=base),number=number.toString().replace(/\s+/g,"");var start=0;"-"===number[0]&&(start++,this.negative=1),startnumber&&(this.negative=1,number=-number),67108864>number?(this.words=[67108863&number],this.length=1):4503599627370496>number?(this.words=[67108863&number,67108863&number/67108864],this.length=2):(assert(9007199254740992>number),this.words=[67108863&number,67108863&number/67108864,1],this.length=3),"le"!==endian||this._initArray(this.toArray(),base,endian)},BN.prototype._initArray=function _initArray(number,base,endian){if(assert("number"==typeof number.length),0>=number.length)return this.words=[0],this.length=1,this;this.length=_Mathceil(number.length/3),this.words=Array(this.length);for(var i=0;i>>26-off,off+=24,26<=off&&(off-=26,j++);else if("le"===endian)for(i=0,j=0;i>>26-off,off+=24,26<=off&&(off-=26,j++);return this._strip()},BN.prototype._parseHex=function _parseHex(number,start,endian){this.length=_Mathceil((number.length-start)/6),this.words=Array(this.length);for(var i=0;i=start;i-=2)w=parseHexByte(number,start,i)<>>26):off+=8;else{var parseLength=number.length-start;for(i=0==parseLength%2?start+1:start;i>>26):off+=8}this._strip()},BN.prototype._parseBase=function _parseBase(number,base,start){this.words=[0],this.length=1;for(var limbLen=0,limbPow=1;67108863>=limbPow;limbPow*=base)limbLen++;limbLen--,limbPow=0|limbPow/base;for(var total=number.length-start,mod=total%limbLen,end=_Mathmin(total,total-mod)+start,word=0,i=start;ithis.words[0]+word?this.words[0]+=word:this._iaddn(word);if(0!==mod){var pow=1;for(word=parseBase(number,i,number.length,base),i=0;ithis.words[0]+word?this.words[0]+=word:this._iaddn(word)}this._strip()},BN.prototype.copy=function copy(dest){dest.words=Array(this.length);for(var i=0;i>>24-off,off+=2,26<=off&&(off-=26,i--),out=0!==carry||i!==this.length-1?zeros[6-word.length]+word+out:word+out}for(0!==carry&&(out=carry.toString(16)+out);0!=out.length%padding;)out="0"+out;return 0!==this.negative&&(out="-"+out),out}if(base===(0|base)&&2<=base&&36>=base){var groupSize=groupSizes[base],groupBase=groupBases[base];out="";var c=this.clone();for(c.negative=0;!c.isZero();){var r=c.modrn(groupBase).toString(base);c=c.idivn(groupBase),out=c.isZero()?r+out:zeros[groupSize-r.length]+r+out}for(this.isZero()&&(out="0"+out);0!=out.length%padding;)out="0"+out;return 0!==this.negative&&(out="-"+out),out}assert(!1,"Base should be between 2 and 36")},BN.prototype.toNumber=function toNumber(){var ret=this.words[0];return 2===this.length?ret+=67108864*this.words[1]:3===this.length&&1===this.words[2]?ret+=4503599627370496+67108864*this.words[1]:2>8),position>16),6==shift?(position>24),carry=0,shift=0):(carry=word>>>24,shift+=2);if(position>8),0<=position&&(res[position--]=255&word>>16),6==shift?(0<=position&&(res[position--]=255&word>>24),carry=0,shift=0):(carry=word>>>24,shift+=2);if(0<=position)for(res[position--]=carry;0<=position;)res[position--]=0},BN.prototype._countBits=_Mathclz?function _countBits(w){return 32-_Mathclz(w)}:function _countBits(w){var t=w,r=0;return 4096<=t&&(r+=13,t>>>=13),64<=t&&(r+=7,t>>>=7),8<=t&&(r+=4,t>>>=4),2<=t&&(r+=2,t>>>=2),r+t},BN.prototype._zeroBits=function _zeroBits(w){if(0===w)return 26;var t=w,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},BN.prototype.bitLength=function bitLength(){var w=this.words[this.length-1],hi=this._countBits(w);return 26*(this.length-1)+hi},BN.prototype.zeroBits=function zeroBits(){if(this.isZero())return 0;for(var r=0,i=0,b;inum.length?this.clone().ior(num):num.clone().ior(this)},BN.prototype.uor=function uor(num){return this.length>num.length?this.clone().iuor(num):num.clone().iuor(this)},BN.prototype.iuand=function iuand(num){var b;b=this.length>num.length?num:this;for(var i=0;inum.length?this.clone().iand(num):num.clone().iand(this)},BN.prototype.uand=function uand(num){return this.length>num.length?this.clone().iuand(num):num.clone().iuand(this)},BN.prototype.iuxor=function iuxor(num){var a,b;this.length>num.length?(a=this,b=num):(a=num,b=this);for(var i=0;inum.length?this.clone().ixor(num):num.clone().ixor(this)},BN.prototype.uxor=function uxor(num){return this.length>num.length?this.clone().iuxor(num):num.clone().iuxor(this)},BN.prototype.inotn=function inotn(width){assert("number"==typeof width&&0<=width);var bytesNeeded=0|_Mathceil(width/26),bitsLeft=width%26;this._expand(bytesNeeded),0>26-bitsLeft),this._strip()},BN.prototype.notn=function notn(width){return this.clone().inotn(width)},BN.prototype.setn=function setn(bit,val){assert("number"==typeof bit&&0<=bit);var off=0|bit/26,wbit=bit%26;return this._expand(off+1),val?this.words[off]|=1<num.length?(a=this,b=num):(a=num,b=this);for(var carry=0,i=0;i>>26;for(;0!==carry&&i>>26;if(this.length=a.length,0!==carry)this.words[this.length]=carry,this.length++;else if(a!==this)for(;inum.length?this.clone().iadd(num):num.clone().iadd(this)},BN.prototype.isub=function isub(num){if(0!==num.negative){num.negative=0;var r=this.iadd(num);return num.negative=1,r._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(num),this.negative=1,this._normSign();var cmp=this.cmp(num);if(0===cmp)return this.negative=0,this.length=1,this.words[0]=0,this;var a,b;0>26,this.words[i]=67108863&r;for(;0!==carry&&i>26,this.words[i]=67108863&r;if(0===carry&&i>>13,a1=0|a[1],al1=8191&a1,ah1=a1>>>13,a2=0|a[2],al2=8191&a2,ah2=a2>>>13,a3=0|a[3],al3=8191&a3,ah3=a3>>>13,a4=0|a[4],al4=8191&a4,ah4=a4>>>13,a5=0|a[5],al5=8191&a5,ah5=a5>>>13,a6=0|a[6],al6=8191&a6,ah6=a6>>>13,a7=0|a[7],al7=8191&a7,ah7=a7>>>13,a8=0|a[8],al8=8191&a8,ah8=a8>>>13,a9=0|a[9],al9=8191&a9,ah9=a9>>>13,b0=0|b[0],bl0=8191&b0,bh0=b0>>>13,b1=0|b[1],bl1=8191&b1,bh1=b1>>>13,b2=0|b[2],bl2=8191&b2,bh2=b2>>>13,b3=0|b[3],bl3=8191&b3,bh3=b3>>>13,b4=0|b[4],bl4=8191&b4,bh4=b4>>>13,b5=0|b[5],bl5=8191&b5,bh5=b5>>>13,b6=0|b[6],bl6=8191&b6,bh6=b6>>>13,b7=0|b[7],bl7=8191&b7,bh7=b7>>>13,b8=0|b[8],bl8=8191&b8,bh8=b8>>>13,b9=0|b[9],bl9=8191&b9,bh9=b9>>>13,lo,mid,hi;out.negative=self.negative^num.negative,out.length=19,lo=_Mathimul(al0,bl0),mid=_Mathimul(al0,bh0),mid=0|mid+_Mathimul(ah0,bl0),hi=_Mathimul(ah0,bh0);var w0=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w0>>>26),w0&=67108863,lo=_Mathimul(al1,bl0),mid=_Mathimul(al1,bh0),mid=0|mid+_Mathimul(ah1,bl0),hi=_Mathimul(ah1,bh0),lo=0|lo+_Mathimul(al0,bl1),mid=0|mid+_Mathimul(al0,bh1),mid=0|mid+_Mathimul(ah0,bl1),hi=0|hi+_Mathimul(ah0,bh1);var w1=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w1>>>26),w1&=67108863,lo=_Mathimul(al2,bl0),mid=_Mathimul(al2,bh0),mid=0|mid+_Mathimul(ah2,bl0),hi=_Mathimul(ah2,bh0),lo=0|lo+_Mathimul(al1,bl1),mid=0|mid+_Mathimul(al1,bh1),mid=0|mid+_Mathimul(ah1,bl1),hi=0|hi+_Mathimul(ah1,bh1),lo=0|lo+_Mathimul(al0,bl2),mid=0|mid+_Mathimul(al0,bh2),mid=0|mid+_Mathimul(ah0,bl2),hi=0|hi+_Mathimul(ah0,bh2);var w2=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w2>>>26),w2&=67108863,lo=_Mathimul(al3,bl0),mid=_Mathimul(al3,bh0),mid=0|mid+_Mathimul(ah3,bl0),hi=_Mathimul(ah3,bh0),lo=0|lo+_Mathimul(al2,bl1),mid=0|mid+_Mathimul(al2,bh1),mid=0|mid+_Mathimul(ah2,bl1),hi=0|hi+_Mathimul(ah2,bh1),lo=0|lo+_Mathimul(al1,bl2),mid=0|mid+_Mathimul(al1,bh2),mid=0|mid+_Mathimul(ah1,bl2),hi=0|hi+_Mathimul(ah1,bh2),lo=0|lo+_Mathimul(al0,bl3),mid=0|mid+_Mathimul(al0,bh3),mid=0|mid+_Mathimul(ah0,bl3),hi=0|hi+_Mathimul(ah0,bh3);var w3=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w3>>>26),w3&=67108863,lo=_Mathimul(al4,bl0),mid=_Mathimul(al4,bh0),mid=0|mid+_Mathimul(ah4,bl0),hi=_Mathimul(ah4,bh0),lo=0|lo+_Mathimul(al3,bl1),mid=0|mid+_Mathimul(al3,bh1),mid=0|mid+_Mathimul(ah3,bl1),hi=0|hi+_Mathimul(ah3,bh1),lo=0|lo+_Mathimul(al2,bl2),mid=0|mid+_Mathimul(al2,bh2),mid=0|mid+_Mathimul(ah2,bl2),hi=0|hi+_Mathimul(ah2,bh2),lo=0|lo+_Mathimul(al1,bl3),mid=0|mid+_Mathimul(al1,bh3),mid=0|mid+_Mathimul(ah1,bl3),hi=0|hi+_Mathimul(ah1,bh3),lo=0|lo+_Mathimul(al0,bl4),mid=0|mid+_Mathimul(al0,bh4),mid=0|mid+_Mathimul(ah0,bl4),hi=0|hi+_Mathimul(ah0,bh4);var w4=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w4>>>26),w4&=67108863,lo=_Mathimul(al5,bl0),mid=_Mathimul(al5,bh0),mid=0|mid+_Mathimul(ah5,bl0),hi=_Mathimul(ah5,bh0),lo=0|lo+_Mathimul(al4,bl1),mid=0|mid+_Mathimul(al4,bh1),mid=0|mid+_Mathimul(ah4,bl1),hi=0|hi+_Mathimul(ah4,bh1),lo=0|lo+_Mathimul(al3,bl2),mid=0|mid+_Mathimul(al3,bh2),mid=0|mid+_Mathimul(ah3,bl2),hi=0|hi+_Mathimul(ah3,bh2),lo=0|lo+_Mathimul(al2,bl3),mid=0|mid+_Mathimul(al2,bh3),mid=0|mid+_Mathimul(ah2,bl3),hi=0|hi+_Mathimul(ah2,bh3),lo=0|lo+_Mathimul(al1,bl4),mid=0|mid+_Mathimul(al1,bh4),mid=0|mid+_Mathimul(ah1,bl4),hi=0|hi+_Mathimul(ah1,bh4),lo=0|lo+_Mathimul(al0,bl5),mid=0|mid+_Mathimul(al0,bh5),mid=0|mid+_Mathimul(ah0,bl5),hi=0|hi+_Mathimul(ah0,bh5);var w5=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w5>>>26),w5&=67108863,lo=_Mathimul(al6,bl0),mid=_Mathimul(al6,bh0),mid=0|mid+_Mathimul(ah6,bl0),hi=_Mathimul(ah6,bh0),lo=0|lo+_Mathimul(al5,bl1),mid=0|mid+_Mathimul(al5,bh1),mid=0|mid+_Mathimul(ah5,bl1),hi=0|hi+_Mathimul(ah5,bh1),lo=0|lo+_Mathimul(al4,bl2),mid=0|mid+_Mathimul(al4,bh2),mid=0|mid+_Mathimul(ah4,bl2),hi=0|hi+_Mathimul(ah4,bh2),lo=0|lo+_Mathimul(al3,bl3),mid=0|mid+_Mathimul(al3,bh3),mid=0|mid+_Mathimul(ah3,bl3),hi=0|hi+_Mathimul(ah3,bh3),lo=0|lo+_Mathimul(al2,bl4),mid=0|mid+_Mathimul(al2,bh4),mid=0|mid+_Mathimul(ah2,bl4),hi=0|hi+_Mathimul(ah2,bh4),lo=0|lo+_Mathimul(al1,bl5),mid=0|mid+_Mathimul(al1,bh5),mid=0|mid+_Mathimul(ah1,bl5),hi=0|hi+_Mathimul(ah1,bh5),lo=0|lo+_Mathimul(al0,bl6),mid=0|mid+_Mathimul(al0,bh6),mid=0|mid+_Mathimul(ah0,bl6),hi=0|hi+_Mathimul(ah0,bh6);var w6=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w6>>>26),w6&=67108863,lo=_Mathimul(al7,bl0),mid=_Mathimul(al7,bh0),mid=0|mid+_Mathimul(ah7,bl0),hi=_Mathimul(ah7,bh0),lo=0|lo+_Mathimul(al6,bl1),mid=0|mid+_Mathimul(al6,bh1),mid=0|mid+_Mathimul(ah6,bl1),hi=0|hi+_Mathimul(ah6,bh1),lo=0|lo+_Mathimul(al5,bl2),mid=0|mid+_Mathimul(al5,bh2),mid=0|mid+_Mathimul(ah5,bl2),hi=0|hi+_Mathimul(ah5,bh2),lo=0|lo+_Mathimul(al4,bl3),mid=0|mid+_Mathimul(al4,bh3),mid=0|mid+_Mathimul(ah4,bl3),hi=0|hi+_Mathimul(ah4,bh3),lo=0|lo+_Mathimul(al3,bl4),mid=0|mid+_Mathimul(al3,bh4),mid=0|mid+_Mathimul(ah3,bl4),hi=0|hi+_Mathimul(ah3,bh4),lo=0|lo+_Mathimul(al2,bl5),mid=0|mid+_Mathimul(al2,bh5),mid=0|mid+_Mathimul(ah2,bl5),hi=0|hi+_Mathimul(ah2,bh5),lo=0|lo+_Mathimul(al1,bl6),mid=0|mid+_Mathimul(al1,bh6),mid=0|mid+_Mathimul(ah1,bl6),hi=0|hi+_Mathimul(ah1,bh6),lo=0|lo+_Mathimul(al0,bl7),mid=0|mid+_Mathimul(al0,bh7),mid=0|mid+_Mathimul(ah0,bl7),hi=0|hi+_Mathimul(ah0,bh7);var w7=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w7>>>26),w7&=67108863,lo=_Mathimul(al8,bl0),mid=_Mathimul(al8,bh0),mid=0|mid+_Mathimul(ah8,bl0),hi=_Mathimul(ah8,bh0),lo=0|lo+_Mathimul(al7,bl1),mid=0|mid+_Mathimul(al7,bh1),mid=0|mid+_Mathimul(ah7,bl1),hi=0|hi+_Mathimul(ah7,bh1),lo=0|lo+_Mathimul(al6,bl2),mid=0|mid+_Mathimul(al6,bh2),mid=0|mid+_Mathimul(ah6,bl2),hi=0|hi+_Mathimul(ah6,bh2),lo=0|lo+_Mathimul(al5,bl3),mid=0|mid+_Mathimul(al5,bh3),mid=0|mid+_Mathimul(ah5,bl3),hi=0|hi+_Mathimul(ah5,bh3),lo=0|lo+_Mathimul(al4,bl4),mid=0|mid+_Mathimul(al4,bh4),mid=0|mid+_Mathimul(ah4,bl4),hi=0|hi+_Mathimul(ah4,bh4),lo=0|lo+_Mathimul(al3,bl5),mid=0|mid+_Mathimul(al3,bh5),mid=0|mid+_Mathimul(ah3,bl5),hi=0|hi+_Mathimul(ah3,bh5),lo=0|lo+_Mathimul(al2,bl6),mid=0|mid+_Mathimul(al2,bh6),mid=0|mid+_Mathimul(ah2,bl6),hi=0|hi+_Mathimul(ah2,bh6),lo=0|lo+_Mathimul(al1,bl7),mid=0|mid+_Mathimul(al1,bh7),mid=0|mid+_Mathimul(ah1,bl7),hi=0|hi+_Mathimul(ah1,bh7),lo=0|lo+_Mathimul(al0,bl8),mid=0|mid+_Mathimul(al0,bh8),mid=0|mid+_Mathimul(ah0,bl8),hi=0|hi+_Mathimul(ah0,bh8);var w8=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w8>>>26),w8&=67108863,lo=_Mathimul(al9,bl0),mid=_Mathimul(al9,bh0),mid=0|mid+_Mathimul(ah9,bl0),hi=_Mathimul(ah9,bh0),lo=0|lo+_Mathimul(al8,bl1),mid=0|mid+_Mathimul(al8,bh1),mid=0|mid+_Mathimul(ah8,bl1),hi=0|hi+_Mathimul(ah8,bh1),lo=0|lo+_Mathimul(al7,bl2),mid=0|mid+_Mathimul(al7,bh2),mid=0|mid+_Mathimul(ah7,bl2),hi=0|hi+_Mathimul(ah7,bh2),lo=0|lo+_Mathimul(al6,bl3),mid=0|mid+_Mathimul(al6,bh3),mid=0|mid+_Mathimul(ah6,bl3),hi=0|hi+_Mathimul(ah6,bh3),lo=0|lo+_Mathimul(al5,bl4),mid=0|mid+_Mathimul(al5,bh4),mid=0|mid+_Mathimul(ah5,bl4),hi=0|hi+_Mathimul(ah5,bh4),lo=0|lo+_Mathimul(al4,bl5),mid=0|mid+_Mathimul(al4,bh5),mid=0|mid+_Mathimul(ah4,bl5),hi=0|hi+_Mathimul(ah4,bh5),lo=0|lo+_Mathimul(al3,bl6),mid=0|mid+_Mathimul(al3,bh6),mid=0|mid+_Mathimul(ah3,bl6),hi=0|hi+_Mathimul(ah3,bh6),lo=0|lo+_Mathimul(al2,bl7),mid=0|mid+_Mathimul(al2,bh7),mid=0|mid+_Mathimul(ah2,bl7),hi=0|hi+_Mathimul(ah2,bh7),lo=0|lo+_Mathimul(al1,bl8),mid=0|mid+_Mathimul(al1,bh8),mid=0|mid+_Mathimul(ah1,bl8),hi=0|hi+_Mathimul(ah1,bh8),lo=0|lo+_Mathimul(al0,bl9),mid=0|mid+_Mathimul(al0,bh9),mid=0|mid+_Mathimul(ah0,bl9),hi=0|hi+_Mathimul(ah0,bh9);var w9=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w9>>>26),w9&=67108863,lo=_Mathimul(al9,bl1),mid=_Mathimul(al9,bh1),mid=0|mid+_Mathimul(ah9,bl1),hi=_Mathimul(ah9,bh1),lo=0|lo+_Mathimul(al8,bl2),mid=0|mid+_Mathimul(al8,bh2),mid=0|mid+_Mathimul(ah8,bl2),hi=0|hi+_Mathimul(ah8,bh2),lo=0|lo+_Mathimul(al7,bl3),mid=0|mid+_Mathimul(al7,bh3),mid=0|mid+_Mathimul(ah7,bl3),hi=0|hi+_Mathimul(ah7,bh3),lo=0|lo+_Mathimul(al6,bl4),mid=0|mid+_Mathimul(al6,bh4),mid=0|mid+_Mathimul(ah6,bl4),hi=0|hi+_Mathimul(ah6,bh4),lo=0|lo+_Mathimul(al5,bl5),mid=0|mid+_Mathimul(al5,bh5),mid=0|mid+_Mathimul(ah5,bl5),hi=0|hi+_Mathimul(ah5,bh5),lo=0|lo+_Mathimul(al4,bl6),mid=0|mid+_Mathimul(al4,bh6),mid=0|mid+_Mathimul(ah4,bl6),hi=0|hi+_Mathimul(ah4,bh6),lo=0|lo+_Mathimul(al3,bl7),mid=0|mid+_Mathimul(al3,bh7),mid=0|mid+_Mathimul(ah3,bl7),hi=0|hi+_Mathimul(ah3,bh7),lo=0|lo+_Mathimul(al2,bl8),mid=0|mid+_Mathimul(al2,bh8),mid=0|mid+_Mathimul(ah2,bl8),hi=0|hi+_Mathimul(ah2,bh8),lo=0|lo+_Mathimul(al1,bl9),mid=0|mid+_Mathimul(al1,bh9),mid=0|mid+_Mathimul(ah1,bl9),hi=0|hi+_Mathimul(ah1,bh9);var w10=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w10>>>26),w10&=67108863,lo=_Mathimul(al9,bl2),mid=_Mathimul(al9,bh2),mid=0|mid+_Mathimul(ah9,bl2),hi=_Mathimul(ah9,bh2),lo=0|lo+_Mathimul(al8,bl3),mid=0|mid+_Mathimul(al8,bh3),mid=0|mid+_Mathimul(ah8,bl3),hi=0|hi+_Mathimul(ah8,bh3),lo=0|lo+_Mathimul(al7,bl4),mid=0|mid+_Mathimul(al7,bh4),mid=0|mid+_Mathimul(ah7,bl4),hi=0|hi+_Mathimul(ah7,bh4),lo=0|lo+_Mathimul(al6,bl5),mid=0|mid+_Mathimul(al6,bh5),mid=0|mid+_Mathimul(ah6,bl5),hi=0|hi+_Mathimul(ah6,bh5),lo=0|lo+_Mathimul(al5,bl6),mid=0|mid+_Mathimul(al5,bh6),mid=0|mid+_Mathimul(ah5,bl6),hi=0|hi+_Mathimul(ah5,bh6),lo=0|lo+_Mathimul(al4,bl7),mid=0|mid+_Mathimul(al4,bh7),mid=0|mid+_Mathimul(ah4,bl7),hi=0|hi+_Mathimul(ah4,bh7),lo=0|lo+_Mathimul(al3,bl8),mid=0|mid+_Mathimul(al3,bh8),mid=0|mid+_Mathimul(ah3,bl8),hi=0|hi+_Mathimul(ah3,bh8),lo=0|lo+_Mathimul(al2,bl9),mid=0|mid+_Mathimul(al2,bh9),mid=0|mid+_Mathimul(ah2,bl9),hi=0|hi+_Mathimul(ah2,bh9);var w11=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w11>>>26),w11&=67108863,lo=_Mathimul(al9,bl3),mid=_Mathimul(al9,bh3),mid=0|mid+_Mathimul(ah9,bl3),hi=_Mathimul(ah9,bh3),lo=0|lo+_Mathimul(al8,bl4),mid=0|mid+_Mathimul(al8,bh4),mid=0|mid+_Mathimul(ah8,bl4),hi=0|hi+_Mathimul(ah8,bh4),lo=0|lo+_Mathimul(al7,bl5),mid=0|mid+_Mathimul(al7,bh5),mid=0|mid+_Mathimul(ah7,bl5),hi=0|hi+_Mathimul(ah7,bh5),lo=0|lo+_Mathimul(al6,bl6),mid=0|mid+_Mathimul(al6,bh6),mid=0|mid+_Mathimul(ah6,bl6),hi=0|hi+_Mathimul(ah6,bh6),lo=0|lo+_Mathimul(al5,bl7),mid=0|mid+_Mathimul(al5,bh7),mid=0|mid+_Mathimul(ah5,bl7),hi=0|hi+_Mathimul(ah5,bh7),lo=0|lo+_Mathimul(al4,bl8),mid=0|mid+_Mathimul(al4,bh8),mid=0|mid+_Mathimul(ah4,bl8),hi=0|hi+_Mathimul(ah4,bh8),lo=0|lo+_Mathimul(al3,bl9),mid=0|mid+_Mathimul(al3,bh9),mid=0|mid+_Mathimul(ah3,bl9),hi=0|hi+_Mathimul(ah3,bh9);var w12=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w12>>>26),w12&=67108863,lo=_Mathimul(al9,bl4),mid=_Mathimul(al9,bh4),mid=0|mid+_Mathimul(ah9,bl4),hi=_Mathimul(ah9,bh4),lo=0|lo+_Mathimul(al8,bl5),mid=0|mid+_Mathimul(al8,bh5),mid=0|mid+_Mathimul(ah8,bl5),hi=0|hi+_Mathimul(ah8,bh5),lo=0|lo+_Mathimul(al7,bl6),mid=0|mid+_Mathimul(al7,bh6),mid=0|mid+_Mathimul(ah7,bl6),hi=0|hi+_Mathimul(ah7,bh6),lo=0|lo+_Mathimul(al6,bl7),mid=0|mid+_Mathimul(al6,bh7),mid=0|mid+_Mathimul(ah6,bl7),hi=0|hi+_Mathimul(ah6,bh7),lo=0|lo+_Mathimul(al5,bl8),mid=0|mid+_Mathimul(al5,bh8),mid=0|mid+_Mathimul(ah5,bl8),hi=0|hi+_Mathimul(ah5,bh8),lo=0|lo+_Mathimul(al4,bl9),mid=0|mid+_Mathimul(al4,bh9),mid=0|mid+_Mathimul(ah4,bl9),hi=0|hi+_Mathimul(ah4,bh9);var w13=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w13>>>26),w13&=67108863,lo=_Mathimul(al9,bl5),mid=_Mathimul(al9,bh5),mid=0|mid+_Mathimul(ah9,bl5),hi=_Mathimul(ah9,bh5),lo=0|lo+_Mathimul(al8,bl6),mid=0|mid+_Mathimul(al8,bh6),mid=0|mid+_Mathimul(ah8,bl6),hi=0|hi+_Mathimul(ah8,bh6),lo=0|lo+_Mathimul(al7,bl7),mid=0|mid+_Mathimul(al7,bh7),mid=0|mid+_Mathimul(ah7,bl7),hi=0|hi+_Mathimul(ah7,bh7),lo=0|lo+_Mathimul(al6,bl8),mid=0|mid+_Mathimul(al6,bh8),mid=0|mid+_Mathimul(ah6,bl8),hi=0|hi+_Mathimul(ah6,bh8),lo=0|lo+_Mathimul(al5,bl9),mid=0|mid+_Mathimul(al5,bh9),mid=0|mid+_Mathimul(ah5,bl9),hi=0|hi+_Mathimul(ah5,bh9);var w14=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w14>>>26),w14&=67108863,lo=_Mathimul(al9,bl6),mid=_Mathimul(al9,bh6),mid=0|mid+_Mathimul(ah9,bl6),hi=_Mathimul(ah9,bh6),lo=0|lo+_Mathimul(al8,bl7),mid=0|mid+_Mathimul(al8,bh7),mid=0|mid+_Mathimul(ah8,bl7),hi=0|hi+_Mathimul(ah8,bh7),lo=0|lo+_Mathimul(al7,bl8),mid=0|mid+_Mathimul(al7,bh8),mid=0|mid+_Mathimul(ah7,bl8),hi=0|hi+_Mathimul(ah7,bh8),lo=0|lo+_Mathimul(al6,bl9),mid=0|mid+_Mathimul(al6,bh9),mid=0|mid+_Mathimul(ah6,bl9),hi=0|hi+_Mathimul(ah6,bh9);var w15=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w15>>>26),w15&=67108863,lo=_Mathimul(al9,bl7),mid=_Mathimul(al9,bh7),mid=0|mid+_Mathimul(ah9,bl7),hi=_Mathimul(ah9,bh7),lo=0|lo+_Mathimul(al8,bl8),mid=0|mid+_Mathimul(al8,bh8),mid=0|mid+_Mathimul(ah8,bl8),hi=0|hi+_Mathimul(ah8,bh8),lo=0|lo+_Mathimul(al7,bl9),mid=0|mid+_Mathimul(al7,bh9),mid=0|mid+_Mathimul(ah7,bl9),hi=0|hi+_Mathimul(ah7,bh9);var w16=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w16>>>26),w16&=67108863,lo=_Mathimul(al9,bl8),mid=_Mathimul(al9,bh8),mid=0|mid+_Mathimul(ah9,bl8),hi=_Mathimul(ah9,bh8),lo=0|lo+_Mathimul(al8,bl9),mid=0|mid+_Mathimul(al8,bh9),mid=0|mid+_Mathimul(ah8,bl9),hi=0|hi+_Mathimul(ah8,bh9);var w17=0|(0|c+lo)+((8191&mid)<<13);c=0|(0|hi+(mid>>>13))+(w17>>>26),w17&=67108863,lo=_Mathimul(al9,bl9),mid=_Mathimul(al9,bh9),mid=0|mid+_Mathimul(ah9,bl9),hi=_Mathimul(ah9,bh9);var w18=0|(0|c+lo)+((8191&mid)<<13);return c=0|(0|hi+(mid>>>13))+(w18>>>26),w18&=67108863,o[0]=w0,o[1]=w1,o[2]=w2,o[3]=w3,o[4]=w4,o[5]=w5,o[6]=w6,o[7]=w7,o[8]=w8,o[9]=w9,o[10]=w10,o[11]=w11,o[12]=w12,o[13]=w13,o[14]=w14,o[15]=w15,o[16]=w16,o[17]=w17,o[18]=w18,0!==c&&(o[19]=c,out.length++),out};_Mathimul||(comb10MulTo=smallMulTo),BN.prototype.mulTo=function mulTo(num,out){var len=this.length+num.length,res;return res=10===this.length&&10===num.length?comb10MulTo(this,num,out):63>len?smallMulTo(this,num,out):1024>len?bigMulTo(this,num,out):jumboMulTo(this,num,out),res},FFTM.prototype.makeRBT=function makeRBT(N){for(var t=Array(N),l=BN.prototype._countBits(N)-1,i=0;i>=1;return rb},FFTM.prototype.permute=function permute(rbt,rws,iws,rtws,itws,N){for(var i=0;i>>=1)i++;return 1<=N))for(var i=0,t;iw?0:0|w/67108864;return ws},FFTM.prototype.convert13b=function convert13b(ws,len,rws,N){for(var carry=0,i=0;i>>=13,rws[2*i+1]=8191&carry,carry>>>=13;for(i=2*len;inum;isNegNum&&(num=-num),assert("number"==typeof num),assert(67108864>num);for(var carry=0,i=0;i>=26,carry+=0|w/67108864,carry+=lo>>>26,this.words[i]=67108863&lo}return 0!==carry&&(this.words[i]=carry,this.length++),isNegNum?this.ineg():this},BN.prototype.muln=function muln(num){return this.clone().imuln(num)},BN.prototype.sqr=function sqr(){return this.mul(this)},BN.prototype.isqr=function isqr(){return this.imul(this.clone())},BN.prototype.pow=function pow(num){var w=toBitArray(num);if(0===w.length)return new BN(1);for(var res=this,i=0;i>>26-r<<26-r,i;if(0!=r){var carry=0;for(i=0;i>>26-r}carry&&(this.words[i]=carry,this.length++)}if(0!==s){for(i=this.length-1;0<=i;i--)this.words[i+s]=this.words[i];for(i=0;i>>r<s)for(this.length-=s,i=0;i=h);i--){var word=0|this.words[i];this.words[i]=carry<<26-r|word>>>r,carry=word&mask}return maskedWords&&0!==carry&&(maskedWords.words[maskedWords.length++]=carry),0===this.length&&(this.words[0]=0,this.length=1),this._strip()},BN.prototype.ishrn=function ishrn(bits,hint,extended){return assert(0===this.negative),this.iushrn(bits,hint,extended)},BN.prototype.shln=function shln(bits){return this.clone().ishln(bits)},BN.prototype.ushln=function ushln(bits){return this.clone().iushln(bits)},BN.prototype.shrn=function shrn(bits){return this.clone().ishrn(bits)},BN.prototype.ushrn=function ushrn(bits){return this.clone().iushrn(bits)},BN.prototype.testn=function testn(bit){assert("number"==typeof bit&&0<=bit);var r=bit%26,s=(bit-r)/26,q=1<>>r<num),0>num?this.isubn(-num):0===this.negative?this._iaddn(num):1===this.length&&(0|this.words[0])<=num?(this.words[0]=num-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(num),this.negative=1,this)},BN.prototype._iaddn=function _iaddn(num){this.words[0]+=num;for(var i=0;inum),0>num)return this.iaddn(-num);if(0!==this.negative)return this.negative=0,this.iaddn(num),this.negative=1,this;if(this.words[0]-=num,1===this.length&&0>this.words[0])this.words[0]=-this.words[0],this.negative=1;else for(var i=0;ithis.words[i];i++)this.words[i]+=67108864,this.words[i+1]-=1;return this._strip()},BN.prototype.addn=function addn(num){return this.clone().iaddn(num)},BN.prototype.subn=function subn(num){return this.clone().isubn(num)},BN.prototype.iabs=function iabs(){return this.negative=0,this},BN.prototype.abs=function abs(){return this.clone().iabs()},BN.prototype._ishlnsubmul=function _ishlnsubmul(num,mul,shift){var len=num.length+shift,i;this._expand(len);var carry=0,w;for(i=0;i>26)-(0|right/67108864),this.words[i+shift]=67108863&w}for(;i>26,this.words[i+shift]=67108863&w;if(0===carry)return this._strip();for(assert(-1===carry),carry=0,i=0;i>26,this.words[i]=67108863&w;return this.negative=1,this._strip()},BN.prototype._wordDiv=function _wordDiv(num,mode){var shift=this.length-num.length,a=this.clone(),b=num,bhi=0|b.words[b.length-1],bhiBits=this._countBits(bhi);shift=26-bhiBits,0!=shift&&(b=b.ushln(shift),a.iushln(shift),bhi=0|b.words[b.length-1]);var m=a.length-b.length,q;if("mod"!==mode){q=new BN(null),q.length=m+1,q.words=Array(q.length);for(var i=0;ithis.length||0>this.cmp(num)?{div:new BN(0),mod:this}:1===num.length?"div"===mode?{div:this.divn(num.words[0]),mod:null}:"mod"===mode?{div:null,mod:new BN(this.modrn(num.words[0]))}:{div:this.divn(num.words[0]),mod:new BN(this.modrn(num.words[0]))}:this._wordDiv(num,mode):(res=this.neg().divmod(num.neg(),mode),"div"!==mode&&(mod=res.mod.neg(),positive&&0!==mod.negative&&mod.isub(num)),{div:res.div,mod:mod})},BN.prototype.div=function div(num){return this.divmod(num,"div",!1).div},BN.prototype.mod=function mod(num){return this.divmod(num,"mod",!1).mod},BN.prototype.umod=function umod(num){return this.divmod(num,"mod",!0).mod},BN.prototype.divRound=function divRound(num){var dm=this.divmod(num);if(dm.mod.isZero())return dm.div;var mod=0===dm.div.negative?dm.mod:dm.mod.isub(num),half=num.ushrn(1),r2=num.andln(1),cmp=mod.cmp(half);return 0>cmp||1===r2&&0===cmp?dm.div:0===dm.div.negative?dm.div.iaddn(1):dm.div.isubn(1)},BN.prototype.modrn=function modrn(num){var isNegNum=0>num;isNegNum&&(num=-num),assert(67108863>=num);for(var p=67108864%num,acc=0,i=this.length-1;0<=i;i--)acc=(p*acc+(0|this.words[i]))%num;return isNegNum?-acc:acc},BN.prototype.modn=function modn(num){return this.modrn(num)},BN.prototype.idivn=function idivn(num){var isNegNum=0>num;isNegNum&&(num=-num),assert(67108863>=num);for(var carry=0,i=this.length-1,w;0<=i;i--)w=(0|this.words[i])+67108864*carry,this.words[i]=0|w/num,carry=w%num;return this._strip(),isNegNum?this.ineg():this},BN.prototype.divn=function divn(num){return this.clone().idivn(num)},BN.prototype.egcd=function egcd(p){assert(0===p.negative),assert(!p.isZero());var x=this,y=p.clone();x=0===x.negative?x.clone():x.umod(p);for(var A=new BN(1),B=new BN(0),C=new BN(0),D=new BN(1),g=0;x.isEven()&&y.isEven();)x.iushrn(1),y.iushrn(1),++g;for(var yp=y.clone(),xp=x.clone();!x.isZero();){for(var i=0,im=1;0==(x.words[0]&im)&&26>i;++i,im<<=1);if(0j;++j,jm<<=1);if(0i;++i,im<<=1);if(0j;++j,jm<<=1);if(0res.cmpn(0)&&res.iadd(p),res},BN.prototype.gcd=function gcd(num){if(this.isZero())return num.abs();if(num.isZero())return this.abs();var a=this.clone(),b=num.clone();a.negative=0,b.negative=0;for(var shift=0;a.isEven()&&b.isEven();shift++)a.iushrn(1),b.iushrn(1);do{for(;a.isEven();)a.iushrn(1);for(;b.isEven();)b.iushrn(1);var r=a.cmp(b);if(0>r){var t=a;a=b,b=t}else if(0===r||0===b.cmpn(1))break;a.isub(b)}while(!0);return b.iushln(shift)},BN.prototype.invm=function invm(num){return this.egcd(num).a.umod(num)},BN.prototype.isEven=function isEven(){return 0==(1&this.words[0])},BN.prototype.isOdd=function isOdd(){return 1==(1&this.words[0])},BN.prototype.andln=function andln(num){return this.words[0]&num},BN.prototype.bincn=function bincn(bit){assert("number"==typeof bit);var r=bit%26,s=(bit-r)/26,q=1<>>26,w&=67108863,this.words[i]=w;return 0!==carry&&(this.words[i]=carry,this.length++),this},BN.prototype.isZero=function isZero(){return 1===this.length&&0===this.words[0]},BN.prototype.cmpn=function cmpn(num){var negative=0>num;if(0!==this.negative&&!negative)return-1;if(0===this.negative&&negative)return 1;this._strip();var res;if(1=num,"Number is too big");var w=0|this.words[0];res=w===num?0:wnum.length)return 1;if(this.lengthb&&(res=1);break}}return res},BN.prototype.gtn=function gtn(num){return 1===this.cmpn(num)},BN.prototype.gt=function gt(num){return 1===this.cmp(num)},BN.prototype.gten=function gten(num){return 0<=this.cmpn(num)},BN.prototype.gte=function gte(num){return 0<=this.cmp(num)},BN.prototype.ltn=function ltn(num){return-1===this.cmpn(num)},BN.prototype.lt=function lt(num){return-1===this.cmp(num)},BN.prototype.lten=function lten(num){return 0>=this.cmpn(num)},BN.prototype.lte=function lte(num){return 0>=this.cmp(num)},BN.prototype.eqn=function eqn(num){return 0===this.cmpn(num)},BN.prototype.eq=function eq(num){return 0===this.cmp(num)},BN.red=function red(num){return new Red(num)},BN.prototype.toRed=function toRed(ctx){return assert(!this.red,"Already a number in reduction context"),assert(0===this.negative,"red works only with positives"),ctx.convertTo(this)._forceRed(ctx)},BN.prototype.fromRed=function fromRed(){return assert(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},BN.prototype._forceRed=function _forceRed(ctx){return this.red=ctx,this},BN.prototype.forceRed=function forceRed(ctx){return assert(!this.red,"Already a number in reduction context"),this._forceRed(ctx)},BN.prototype.redAdd=function redAdd(num){return assert(this.red,"redAdd works only with red numbers"),this.red.add(this,num)},BN.prototype.redIAdd=function redIAdd(num){return assert(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,num)},BN.prototype.redSub=function redSub(num){return assert(this.red,"redSub works only with red numbers"),this.red.sub(this,num)},BN.prototype.redISub=function redISub(num){return assert(this.red,"redISub works only with red numbers"),this.red.isub(this,num)},BN.prototype.redShl=function redShl(num){return assert(this.red,"redShl works only with red numbers"),this.red.shl(this,num)},BN.prototype.redMul=function redMul(num){return assert(this.red,"redMul works only with red numbers"),this.red._verify2(this,num),this.red.mul(this,num)},BN.prototype.redIMul=function redIMul(num){return assert(this.red,"redMul works only with red numbers"),this.red._verify2(this,num),this.red.imul(this,num)},BN.prototype.redSqr=function redSqr(){return assert(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},BN.prototype.redISqr=function redISqr(){return assert(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},BN.prototype.redSqrt=function redSqrt(){return assert(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},BN.prototype.redInvm=function redInvm(){return assert(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},BN.prototype.redNeg=function redNeg(){return assert(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},BN.prototype.redPow=function redPow(num){return assert(this.red&&!num.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,num)};var primes={k256:null,p224:null,p192:null,p25519:null};MPrime.prototype._tmp=function _tmp(){var tmp=new BN(null);return tmp.words=Array(_Mathceil(this.n/13)),tmp},MPrime.prototype.ireduce=function ireduce(num){var r=num,rlen;do this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),rlen=r.bitLength();while(rlen>this.n);var cmp=rlen=input.length)return input.words[0]=0,void(input.length=1);var prev=input.words[9];for(output.words[output.length++]=prev&mask,i=10;i>>22,prev=next}prev>>>=22,input.words[i-10]=prev,input.length-=0===prev&&10>>=26,num.words[i]=lo,carry=hi}return 0!==carry&&(num.words[num.length++]=carry),num},BN._prime=function prime(name){if(primes[name])return primes[name];var prime;if("k256"===name)prime=new K256;else if("p224"===name)prime=new P224;else if("p192"===name)prime=new P192;else if("p25519"===name)prime=new P25519;else throw new Error("Unknown prime "+name);return primes[name]=prime,prime},Red.prototype._verify1=function _verify1(a){assert(0===a.negative,"red works only with positives"),assert(a.red,"red works only with red numbers")},Red.prototype._verify2=function _verify2(a,b){assert(0==(a.negative|b.negative),"red works only with positives"),assert(a.red&&a.red===b.red,"red works only with red numbers")},Red.prototype.imod=function imod(a){return this.prime?this.prime.ireduce(a)._forceRed(this):(move(a,a.umod(this.m)._forceRed(this)),a)},Red.prototype.neg=function neg(a){return a.isZero()?a.clone():this.m.sub(a)._forceRed(this)},Red.prototype.add=function add(a,b){this._verify2(a,b);var res=a.add(b);return 0<=res.cmp(this.m)&&res.isub(this.m),res._forceRed(this)},Red.prototype.iadd=function iadd(a,b){this._verify2(a,b);var res=a.iadd(b);return 0<=res.cmp(this.m)&&res.isub(this.m),res},Red.prototype.sub=function sub(a,b){this._verify2(a,b);var res=a.sub(b);return 0>res.cmpn(0)&&res.iadd(this.m),res._forceRed(this)},Red.prototype.isub=function isub(a,b){this._verify2(a,b);var res=a.isub(b);return 0>res.cmpn(0)&&res.iadd(this.m),res},Red.prototype.shl=function shl(a,num){return this._verify1(a),this.imod(a.ushln(num))},Red.prototype.imul=function imul(a,b){return this._verify2(a,b),this.imod(a.imul(b))},Red.prototype.mul=function mul(a,b){return this._verify2(a,b),this.imod(a.mul(b))},Red.prototype.isqr=function isqr(a){return this.imul(a,a.clone())},Red.prototype.sqr=function sqr(a){return this.mul(a,a)},Red.prototype.sqrt=function sqrt(a){if(a.isZero())return a.clone();var mod3=this.m.andln(3);if(assert(1==mod3%2),3===mod3){var pow=this.m.add(new BN(1)).iushrn(2);return this.pow(a,pow)}for(var q=this.m.subn(1),s=0;!q.isZero()&&0===q.andln(1);)s++,q.iushrn(1);assert(!q.isZero());var one=new BN(1).toRed(this),nOne=one.redNeg(),lpow=this.m.subn(1).iushrn(1),z=this.m.bitLength();for(z=new BN(2*z*z).toRed(this);0!==this.pow(z,lpow).cmp(nOne);)z.redIAdd(nOne);for(var c=this.pow(z,q),r=this.pow(a,q.addn(1).iushrn(1)),t=this.pow(a,q),m=s;0!==t.cmp(one);){for(var tmp=t,i=0;0!==tmp.cmp(one);i++)tmp=tmp.redSqr();assert(i>j,res!==wnd[0]&&(res=this.sqr(res)),0===bit&&0===current){currentLen=0;continue}current<<=1,current|=bit,currentLen++,(4===currentLen||0===i&&0===j)&&(res=this.mul(res,wnd[current]),currentLen=0,current=0)}start=26}return res},Red.prototype.convertTo=function convertTo(num){var r=num.umod(this.m);return r===num?r.clone():r},Red.prototype.convertFrom=function convertFrom(num){var res=num.clone();return res.red=null,res},BN.mont=function mont(num){return new Mont(num)},inherits(Mont,Red),Mont.prototype.convertTo=function convertTo(num){return this.imod(num.ushln(this.shift))},Mont.prototype.convertFrom=function convertFrom(num){var r=this.imod(num.mul(this.rinv));return r.red=null,r},Mont.prototype.imul=function imul(a,b){if(a.isZero()||b.isZero())return a.words[0]=0,a.length=1,a;var t=a.imul(b),c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),u=t.isub(c).iushrn(this.shift),res=u;return 0<=u.cmp(this.m)?res=u.isub(this.m):0>u.cmpn(0)&&(res=u.iadd(this.m)),res._forceRed(this)},Mont.prototype.mul=function mul(a,b){if(a.isZero()||b.isZero())return new BN(0)._forceRed(this);var t=a.mul(b),c=t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),u=t.isub(c).iushrn(this.shift),res=u;return 0<=u.cmp(this.m)?res=u.isub(this.m):0>u.cmpn(0)&&(res=u.iadd(this.m)),res._forceRed(this)},Mont.prototype.invm=function invm(a){var res=this.imod(a._invmp(this.m).mul(this.r2));return res._forceRed(this)}})("undefined"==typeof module||module,this)},{buffer:42}],41:[function(require,module,exports){function Rand(rand){this.rand=rand}var r;if(module.exports=function rand(len){return r||(r=new Rand(null)),r.generate(len)},module.exports.Rand=Rand,Rand.prototype.generate=function generate(len){return this._rand(len)},Rand.prototype._rand=function _rand(n){if(this.rand.getBytes)return this.rand.getBytes(n);for(var res=new Uint8Array(n),i=0;i>>24]^SUB_MIX1[255&s1>>>16]^SUB_MIX2[255&s2>>>8]^SUB_MIX3[255&s3]^keySchedule[ksRow++],t1=SUB_MIX0[s1>>>24]^SUB_MIX1[255&s2>>>16]^SUB_MIX2[255&s3>>>8]^SUB_MIX3[255&s0]^keySchedule[ksRow++],t2=SUB_MIX0[s2>>>24]^SUB_MIX1[255&s3>>>16]^SUB_MIX2[255&s0>>>8]^SUB_MIX3[255&s1]^keySchedule[ksRow++],t3=SUB_MIX0[s3>>>24]^SUB_MIX1[255&s0>>>16]^SUB_MIX2[255&s1>>>8]^SUB_MIX3[255&s2]^keySchedule[ksRow++],s0=t0,s1=t1,s2=t2,s3=t3;return t0=(SBOX[s0>>>24]<<24|SBOX[255&s1>>>16]<<16|SBOX[255&s2>>>8]<<8|SBOX[255&s3])^keySchedule[ksRow++],t1=(SBOX[s1>>>24]<<24|SBOX[255&s2>>>16]<<16|SBOX[255&s3>>>8]<<8|SBOX[255&s0])^keySchedule[ksRow++],t2=(SBOX[s2>>>24]<<24|SBOX[255&s3>>>16]<<16|SBOX[255&s0>>>8]<<8|SBOX[255&s1])^keySchedule[ksRow++],t3=(SBOX[s3>>>24]<<24|SBOX[255&s0>>>16]<<16|SBOX[255&s1>>>8]<<8|SBOX[255&s2])^keySchedule[ksRow++],t0>>>=0,t1>>>=0,t2>>>=0,t3>>>=0,[t0,t1,t2,t3]}function AES(key){this._key=asUInt32Array(key),this._reset()}var Buffer=require("safe-buffer").Buffer,RCON=[0,1,2,4,8,16,32,64,128,27,54],G=function(){for(var d=Array(256),j=0;256>j;j++)d[j]=128>j?j<<1:283^j<<1;for(var SBOX=[],INV_SBOX=[],SUB_MIX=[[],[],[],[]],INV_SUB_MIX=[[],[],[],[]],x=0,xi=0,i=0,sx;256>i;++i){sx=xi^xi<<1^xi<<2^xi<<3^xi<<4,sx=99^(sx>>>8^255&sx),SBOX[x]=sx,INV_SBOX[sx]=x;var x2=d[x],x4=d[x2],x8=d[x4],t=257*d[sx]^16843008*sx;SUB_MIX[0][x]=t<<24|t>>>8,SUB_MIX[1][x]=t<<16|t>>>16,SUB_MIX[2][x]=t<<8|t>>>24,SUB_MIX[3][x]=t,t=16843009*x8^65537*x4^257*x2^16843008*x,INV_SUB_MIX[0][sx]=t<<24|t>>>8,INV_SUB_MIX[1][sx]=t<<16|t>>>16,INV_SUB_MIX[2][sx]=t<<8|t>>>24,INV_SUB_MIX[3][sx]=t,0===x?x=xi=1:(x=x2^d[d[d[x8^x2]]],xi^=d[d[xi]])}return{SBOX:SBOX,INV_SBOX:INV_SBOX,SUB_MIX:SUB_MIX,INV_SUB_MIX:INV_SUB_MIX}}();AES.blockSize=16,AES.keySize=32,AES.prototype.blockSize=AES.blockSize,AES.prototype.keySize=AES.keySize,AES.prototype._reset=function(){for(var keyWords=this._key,keySize=keyWords.length,nRounds=keySize+6,ksRows=4*(nRounds+1),keySchedule=[],k=0;k>>24,t=G.SBOX[t>>>24]<<24|G.SBOX[255&t>>>16]<<16|G.SBOX[255&t>>>8]<<8|G.SBOX[255&t],t^=RCON[0|k/keySize]<<24):6>>24]<<24|G.SBOX[255&t>>>16]<<16|G.SBOX[255&t>>>8]<<8|G.SBOX[255&t]),keySchedule[k]=keySchedule[k-keySize]^t}for(var invKeySchedule=[],ik=0;ikik||4>=ksR?tt:G.INV_SUB_MIX[0][G.SBOX[tt>>>24]]^G.INV_SUB_MIX[1][G.SBOX[255&tt>>>16]]^G.INV_SUB_MIX[2][G.SBOX[255&tt>>>8]]^G.INV_SUB_MIX[3][G.SBOX[255&tt]]}this._nRounds=nRounds,this._keySchedule=keySchedule,this._invKeySchedule=invKeySchedule},AES.prototype.encryptBlockRaw=function(M){return M=asUInt32Array(M),cryptBlock(M,this._keySchedule,G.SUB_MIX,G.SBOX,this._nRounds)},AES.prototype.encryptBlock=function(M){var out=this.encryptBlockRaw(M),buf=Buffer.allocUnsafe(16);return buf.writeUInt32BE(out[0],0),buf.writeUInt32BE(out[1],4),buf.writeUInt32BE(out[2],8),buf.writeUInt32BE(out[3],12),buf},AES.prototype.decryptBlock=function(M){M=asUInt32Array(M);var m1=M[1];M[1]=M[3],M[3]=m1;var out=cryptBlock(M,this._invKeySchedule,G.INV_SUB_MIX,G.INV_SBOX,this._nRounds),buf=Buffer.allocUnsafe(16);return buf.writeUInt32BE(out[0],0),buf.writeUInt32BE(out[3],4),buf.writeUInt32BE(out[2],8),buf.writeUInt32BE(out[1],12),buf},AES.prototype.scrub=function(){scrubVec(this._keySchedule),scrubVec(this._invKeySchedule),scrubVec(this._key)},module.exports.AES=AES},{"safe-buffer":235}],44:[function(require,module,exports){function xorTest(a,b){var out=0;a.length!==b.length&&out++;for(var len=_Mathmin(a.length,b.length),i=0;irump&&(rump=Buffer.alloc(rump,0),this._ghash.update(rump))}this._called=!0;var out=this._mode.encrypt(this,chunk);return this._decrypt?this._ghash.update(chunk):this._ghash.update(out),this._len+=chunk.length,out},StreamCipher.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error("Unsupported state or unable to authenticate data");var tag=xor(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&xorTest(tag,this._authTag))throw new Error("Unsupported state or unable to authenticate data");this._authTag=tag,this._cipher.scrub()},StreamCipher.prototype.getAuthTag=function getAuthTag(){if(this._decrypt||!Buffer.isBuffer(this._authTag))throw new Error("Attempting to get auth tag in unsupported state");return this._authTag},StreamCipher.prototype.setAuthTag=function setAuthTag(tag){if(!this._decrypt)throw new Error("Attempting to set auth tag in unsupported state");this._authTag=tag},StreamCipher.prototype.setAAD=function setAAD(buf){if(this._called)throw new Error("Attempting to set AAD in unsupported state");this._ghash.update(buf),this._alen+=buf.length},module.exports=StreamCipher},{"./aes":43,"./ghash":48,"./incr32":49,"buffer-xor":75,"cipher-base":80,inherits:147,"safe-buffer":235}],45:[function(require,module,exports){function getCiphers(){return Object.keys(modes)}var ciphers=require("./encrypter"),deciphers=require("./decrypter"),modes=require("./modes/list.json");exports.createCipher=exports.Cipher=ciphers.createCipher,exports.createCipheriv=exports.Cipheriv=ciphers.createCipheriv,exports.createDecipher=exports.Decipher=deciphers.createDecipher,exports.createDecipheriv=exports.Decipheriv=deciphers.createDecipheriv,exports.listCiphers=exports.getCiphers=getCiphers},{"./decrypter":46,"./encrypter":47,"./modes/list.json":57}],46:[function(require,module,exports){function Decipher(mode,key,iv){Transform.call(this),this._cache=new Splitter,this._last=void 0,this._cipher=new aes.AES(key),this._prev=Buffer.from(iv),this._mode=mode,this._autopadding=!0}function Splitter(){this.cache=Buffer.allocUnsafe(0)}function unpad(last){var padded=last[15];if(1>padded||16>>0,0),buf.writeUInt32BE(out[1]>>>0,4),buf.writeUInt32BE(out[2]>>>0,8),buf.writeUInt32BE(out[3]>>>0,12),buf}function GHASH(key){this.h=key,this.state=Buffer.alloc(16,0),this.cache=Buffer.allocUnsafe(0)}var Buffer=require("safe-buffer").Buffer,ZEROES=Buffer.alloc(16,0);GHASH.prototype.ghash=function(block){for(var i=-1;++i++i;){for(xi=0!=(this.state[~~(i/8)]&1<<7-i%8),xi&&(Zi[0]^=Vi[0],Zi[1]^=Vi[1],Zi[2]^=Vi[2],Zi[3]^=Vi[3]),lsbVi=0!=(1&Vi[3]),j=3;0>>1|(1&Vi[j-1])<<31;Vi[0]>>>=1,lsbVi&&(Vi[0]^=-520093696)}this.state=fromArray(Zi)},GHASH.prototype.update=function(buf){this.cache=Buffer.concat([this.cache,buf]);for(var chunk;16<=this.cache.length;)chunk=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(chunk)},GHASH.prototype.final=function(abl,bl){return this.cache.length&&this.ghash(Buffer.concat([this.cache,ZEROES],16)),this.ghash(fromArray([0,abl,0,bl])),this.state},module.exports=GHASH},{"safe-buffer":235}],49:[function(require,module,exports){function incr32(iv){for(var len=iv.length,item;len--;)if(item=iv.readUInt8(len),255===item)iv.writeUInt8(0,len);else{item++,iv.writeUInt8(item,len);break}}module.exports=incr32},{}],50:[function(require,module,exports){var xor=require("buffer-xor");exports.encrypt=function(self,block){var data=xor(block,self._prev);return self._prev=self._cipher.encryptBlock(data),self._prev},exports.decrypt=function(self,block){var pad=self._prev;self._prev=block;var out=self._cipher.decryptBlock(block);return xor(out,pad)}},{"buffer-xor":75}],51:[function(require,module,exports){function encryptStart(self,data,decrypt){var len=data.length,out=xor(data,self._cache);return self._cache=self._cache.slice(len),self._prev=Buffer.concat([self._prev,decrypt?data:out]),out}var Buffer=require("safe-buffer").Buffer,xor=require("buffer-xor");exports.encrypt=function(self,data,decrypt){for(var out=Buffer.allocUnsafe(0),len;data.length;)if(0===self._cache.length&&(self._cache=self._cipher.encryptBlock(self._prev),self._prev=Buffer.allocUnsafe(0)),self._cache.length<=data.length)len=self._cache.length,out=Buffer.concat([out,encryptStart(self,data.slice(0,len),decrypt)]),data=data.slice(len);else{out=Buffer.concat([out,encryptStart(self,data,decrypt)]);break}return out}},{"buffer-xor":75,"safe-buffer":235}],52:[function(require,module,exports){function encryptByte(self,byteParam,decrypt){for(var i=-1,len=8,out=0,pad,bit,value;++i>i%8,self._prev=shiftIn(self._prev,decrypt?bit:value);return out}function shiftIn(buffer,value){var len=buffer.length,i=-1,out=Buffer.allocUnsafe(buffer.length);for(buffer=Buffer.concat([buffer,Buffer.from([value])]);++i>7;return out}var Buffer=require("safe-buffer").Buffer;exports.encrypt=function(self,chunk,decrypt){for(var len=chunk.length,out=Buffer.allocUnsafe(len),i=-1;++ipadNum?1:0;for(len=_Mathmin(sig.length,pad.length),sig.length!==pad.length&&(out=1),i=-1;++i=b.cmpn(0))throw new Error("invalid sig");if(b.cmp(q)>=q)throw new Error("invalid sig")}var Buffer=require("safe-buffer").Buffer,BN=require("bn.js"),EC=require("elliptic").ec,parseKeys=require("parse-asn1"),curves=require("./curves.json");module.exports=verify},{"./curves.json":66,"bn.js":40,elliptic:104,"parse-asn1":183,"safe-buffer":235}],70:[function(require,module,exports){function copyProps(src,dst){for(var key in src)dst[key]=src[key]}function SafeBuffer(arg,encodingOrOffset,length){return Buffer(arg,encodingOrOffset,length)}var buffer=require("buffer"),Buffer=buffer.Buffer;Buffer.from&&Buffer.alloc&&Buffer.allocUnsafe&&Buffer.allocUnsafeSlow?module.exports=buffer:(copyProps(buffer,exports),exports.Buffer=SafeBuffer),copyProps(Buffer,SafeBuffer),SafeBuffer.from=function(arg,encodingOrOffset,length){if("number"==typeof arg)throw new TypeError("Argument must not be a number");return Buffer(arg,encodingOrOffset,length)},SafeBuffer.alloc=function(size,fill,encoding){if("number"!=typeof size)throw new TypeError("Argument must be a number");var buf=Buffer(size);return void 0===fill?buf.fill(0):"string"==typeof encoding?buf.fill(fill,encoding):buf.fill(fill),buf},SafeBuffer.allocUnsafe=function(size){if("number"!=typeof size)throw new TypeError("Argument must be a number");return Buffer(size)},SafeBuffer.allocUnsafeSlow=function(size){if("number"!=typeof size)throw new TypeError("Argument must be a number");return buffer.SlowBuffer(size)}},{buffer:76}],71:[function(require,module,exports){"use strict";function _normalizeEncoding(enc){if(!enc)return"utf8";for(var retried;!0;)switch(enc){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return enc;default:if(retried)return;enc=(""+enc).toLowerCase(),retried=!0;}}function normalizeEncoding(enc){var nenc=_normalizeEncoding(enc);if("string"!=typeof nenc&&(Buffer.isEncoding===isEncoding||!isEncoding(enc)))throw new Error("Unknown encoding: "+enc);return nenc||enc}function StringDecoder(encoding){this.encoding=normalizeEncoding(encoding);var nb;switch(this.encoding){case"utf16le":this.text=utf16Text,this.end=utf16End,nb=4;break;case"utf8":this.fillLast=utf8FillLast,nb=4;break;case"base64":this.text=base64Text,this.end=base64End,nb=3;break;default:return this.write=simpleWrite,void(this.end=simpleEnd);}this.lastNeed=0,this.lastTotal=0,this.lastChar=Buffer.allocUnsafe(nb)}function utf8CheckByte(byte){if(127>=byte)return 0;return 6==byte>>5?2:14==byte>>4?3:30==byte>>3?4:2==byte>>6?-1:-2}function utf8CheckIncomplete(self,buf,i){var j=buf.length-1;if(j=c)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=buf[buf.length-2],this.lastChar[1]=buf[buf.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=buf[buf.length-1],buf.toString("utf16le",i,buf.length-1)}function utf16End(buf){var r=buf&&buf.length?this.write(buf):"";if(this.lastNeed){var end=this.lastTotal-this.lastNeed;return r+this.lastChar.toString("utf16le",0,end)}return r}function base64Text(buf,i){var n=(buf.length-i)%3;return 0==n?buf.toString("base64",i):(this.lastNeed=3-n,this.lastTotal=3,1==n?this.lastChar[0]=buf[buf.length-1]:(this.lastChar[0]=buf[buf.length-2],this.lastChar[1]=buf[buf.length-1]),buf.toString("base64",i,buf.length-n))}function base64End(buf){var r=buf&&buf.length?this.write(buf):"";return this.lastNeed?r+this.lastChar.toString("base64",0,3-this.lastNeed):r}function simpleWrite(buf){return buf.toString(this.encoding)}function simpleEnd(buf){return buf&&buf.length?this.write(buf):""}var Buffer=require("safe-buffer").Buffer,isEncoding=Buffer.isEncoding||function(encoding){switch(encoding=""+encoding,encoding&&encoding.toLowerCase()){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":return!0;default:return!1;}};exports.StringDecoder=StringDecoder,StringDecoder.prototype.write=function(buf){if(0===buf.length)return"";var r,i;if(this.lastNeed){if(r=this.fillLast(buf),void 0===r)return"";i=this.lastNeed,this.lastNeed=0}else i=0;return isize)throw new RangeError("\"size\" argument must not be negative");return Buffer.allocUnsafe?Buffer.allocUnsafe(size):new Buffer(size)}module.exports=allocUnsafe}).call(this)}).call(this,require("buffer").Buffer)},{buffer:76}],73:[function(require,module,exports){(function(Buffer){(function(){var bufferFill=require("buffer-fill"),allocUnsafe=require("buffer-alloc-unsafe");module.exports=function alloc(size,fill,encoding){if("number"!=typeof size)throw new TypeError("\"size\" argument must be a number");if(0>size)throw new RangeError("\"size\" argument must not be negative");if(Buffer.alloc)return Buffer.alloc(size,fill,encoding);var buffer=allocUnsafe(size);return 0===size?buffer:void 0===fill?bufferFill(buffer,0):("string"!=typeof encoding&&(encoding=void 0),bufferFill(buffer,fill,encoding))}}).call(this)}).call(this,require("buffer").Buffer)},{buffer:76,"buffer-alloc-unsafe":72,"buffer-fill":74}],74:[function(require,module,exports){(function(Buffer){(function(){function isSingleByte(val){return 1===val.length&&256>val.charCodeAt(0)}function fillWithNumber(buffer,val,start,end){if(0>start||end>buffer.length)throw new RangeError("Out of range index");return start>>>=0,end=void 0===end?buffer.length:end>>>0,end>start&&buffer.fill(val,start,end),buffer}function fillWithBuffer(buffer,val,start,end){if(0>start||end>buffer.length)throw new RangeError("Out of range index");if(end<=start)return buffer;start>>>=0,end=void 0===end?buffer.length:end>>>0;for(var pos=start,len=val.length;pos<=end-len;)val.copy(buffer,pos),pos+=len;return pos!==end&&val.copy(buffer,pos,0,end-pos),buffer}function fill(buffer,val,start,end,encoding){if(hasFullSupport)return buffer.fill(val,start,end,encoding);if("number"==typeof val)return fillWithNumber(buffer,val,start,end);if("string"==typeof val){if("string"==typeof start?(encoding=start,start=0,end=buffer.length):"string"==typeof end&&(encoding=end,end=buffer.length),void 0!==encoding&&"string"!=typeof encoding)throw new TypeError("encoding must be a string");if("latin1"===encoding&&(encoding="binary"),"string"==typeof encoding&&!Buffer.isEncoding(encoding))throw new TypeError("Unknown encoding: "+encoding);if(""===val)return fillWithNumber(buffer,0,start,end);if(isSingleByte(val))return fillWithNumber(buffer,val.charCodeAt(0),start,end);val=new Buffer(val,encoding)}return Buffer.isBuffer(val)?fillWithBuffer(buffer,val,start,end):fillWithNumber(buffer,0,start,end)}var hasFullSupport=function(){try{if(!Buffer.isEncoding("latin1"))return!1;var buf=Buffer.alloc?Buffer.alloc(4):new Buffer(4);return buf.fill("ab","ucs2"),"61006200"===buf.toString("hex")}catch(_){return!1}}();module.exports=fill}).call(this)}).call(this,require("buffer").Buffer)},{buffer:76}],75:[function(require,module,exports){(function(Buffer){(function(){module.exports=function xor(a,b){for(var length=_Mathmin(a.length,b.length),buffer=new Buffer(length),i=0;i
+ * @license MIT
+ */"use strict";function typedArraySupport(){try{var arr=new Uint8Array(1);return arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===arr.foo()}catch(e){return!1}}function createBuffer(length){if(2147483647size)throw new RangeError("The value \""+size+"\" is invalid for option \"size\"")}function alloc(size,fill,encoding){return assertSize(size),0>=size?createBuffer(size):void 0===fill?createBuffer(size):"string"==typeof encoding?createBuffer(size).fill(fill,encoding):createBuffer(size).fill(fill)}function allocUnsafe(size){return assertSize(size),createBuffer(0>size?0:0|checked(size))}function fromString(string,encoding){if(("string"!=typeof encoding||""===encoding)&&(encoding="utf8"),!Buffer.isEncoding(encoding))throw new TypeError("Unknown encoding: "+encoding);var length=0|byteLength(string,encoding),buf=createBuffer(length),actual=buf.write(string,encoding);return actual!==length&&(buf=buf.slice(0,actual)),buf}function fromArrayLike(array){for(var length=0>array.length?0:0|checked(array.length),buf=createBuffer(length),i=0;ibyteOffset||array.byteLength=2147483647)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+2147483647 .toString(16)+" bytes");return 0|length}function SlowBuffer(length){return+length!=length&&(length=0),Buffer.alloc(+length)}function byteLength(string,encoding){if(Buffer.isBuffer(string))return string.length;if(ArrayBuffer.isView(string)||isInstance(string,ArrayBuffer))return string.byteLength;if("string"!=typeof string)throw new TypeError("The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type "+typeof string);var len=string.length,mustMatch=2>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return mustMatch?-1:utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase(),loweredCase=!0;}}function slowToString(encoding,start,end){var loweredCase=!1;if((void 0===start||0>start)&&(start=0),start>this.length)return"";if((void 0===end||end>this.length)&&(end=this.length),0>=end)return"";if(end>>>=0,start>>>=0,end<=start)return"";for(encoding||(encoding="utf8");!0;)switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase(),loweredCase=!0;}}function swap(b,n,m){var i=b[n];b[n]=b[m],b[m]=i}function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(0===buffer.length)return-1;if("string"==typeof byteOffset?(encoding=byteOffset,byteOffset=0):2147483647byteOffset&&(byteOffset=-2147483648),byteOffset=+byteOffset,numberIsNaN(byteOffset)&&(byteOffset=dir?0:buffer.length-1),0>byteOffset&&(byteOffset=buffer.length+byteOffset),byteOffset>=buffer.length){if(dir)return-1;byteOffset=buffer.length-1}else if(0>byteOffset)if(dir)byteOffset=0;else return-1;if("string"==typeof val&&(val=Buffer.from(val,encoding)),Buffer.isBuffer(val))return 0===val.length?-1:arrayIndexOf(buffer,val,byteOffset,encoding,dir);if("number"==typeof val)return val&=255,"function"==typeof Uint8Array.prototype.indexOf?dir?Uint8Array.prototype.indexOf.call(buffer,val,byteOffset):Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset):arrayIndexOf(buffer,[val],byteOffset,encoding,dir);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){function read(buf,i){return 1===indexSize?buf[i]:buf.readUInt16BE(i*indexSize)}var indexSize=1,arrLength=arr.length,valLength=val.length;if(void 0!==encoding&&(encoding=(encoding+"").toLowerCase(),"ucs2"===encoding||"ucs-2"===encoding||"utf16le"===encoding||"utf-16le"===encoding)){if(2>arr.length||2>val.length)return-1;indexSize=2,arrLength/=2,valLength/=2,byteOffset/=2}var i;if(dir){var foundIndex=-1;for(i=byteOffset;iarrLength&&(byteOffset=arrLength-valLength),i=byteOffset;0<=i;i--){for(var found=!0,j=0;jremaining&&(length=remaining)):length=remaining;var strLen=string.length;length>strLen/2&&(length=strLen/2);for(var i=0,parsed;ifirstByte&&(codePoint=firstByte):2===bytesPerSequence?(secondByte=buf[i+1],128==(192&secondByte)&&(tempCodePoint=(31&firstByte)<<6|63&secondByte,127tempCodePoint||57343tempCodePoint&&(codePoint=tempCodePoint))):void 0}null===codePoint?(codePoint=65533,bytesPerSequence=1):65535>>10),codePoint=56320|1023&codePoint),res.push(codePoint),i+=bytesPerSequence}return decodeCodePointsArray(res)}function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=4096)return _StringfromCharCode.apply(String,codePoints);for(var res="",i=0;istart)&&(start=0),(!end||0>end||end>len)&&(end=len);for(var out="",i=start;ioffset)throw new RangeError("offset is not uint");if(offset+ext>length)throw new RangeError("Trying to access beyond buffer length")}function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError("\"buffer\" argument must be a Buffer instance");if(value>max||valuebuf.length)throw new RangeError("Index out of range")}function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(0>offset)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){return value=+value,offset>>>=0,noAssert||checkIEEE754(buf,value,offset,4,34028234663852886e22,-34028234663852886e22),ieee754.write(buf,value,offset,littleEndian,23,4),offset+4}function writeDouble(buf,value,offset,littleEndian,noAssert){return value=+value,offset>>>=0,noAssert||checkIEEE754(buf,value,offset,8,17976931348623157e292,-17976931348623157e292),ieee754.write(buf,value,offset,littleEndian,52,8),offset+8}function base64clean(str){if(str=str.split("=")[0],str=str.trim().replace(INVALID_BASE64_RE,""),2>str.length)return"";for(;0!=str.length%4;)str+="=";return str}function toHex(n){return 16>n?"0"+n.toString(16):n.toString(16)}function utf8ToBytes(string,units){units=units||1/0;for(var length=string.length,leadSurrogate=null,bytes=[],i=0,codePoint;icodePoint){if(!leadSurrogate){if(56319codePoint){-1<(units-=3)&&bytes.push(239,191,189),leadSurrogate=codePoint;continue}codePoint=(leadSurrogate-55296<<10|codePoint-56320)+65536}else leadSurrogate&&-1<(units-=3)&&bytes.push(239,191,189);if(leadSurrogate=null,128>codePoint){if(0>(units-=1))break;bytes.push(codePoint)}else if(2048>codePoint){if(0>(units-=2))break;bytes.push(192|codePoint>>6,128|63&codePoint)}else if(65536>codePoint){if(0>(units-=3))break;bytes.push(224|codePoint>>12,128|63&codePoint>>6,128|63&codePoint)}else if(1114112>codePoint){if(0>(units-=4))break;bytes.push(240|codePoint>>18,128|63&codePoint>>12,128|63&codePoint>>6,128|63&codePoint)}else throw new Error("Invalid code point")}return bytes}function asciiToBytes(str){for(var byteArray=[],i=0;i(units-=2));++i)c=str.charCodeAt(i),hi=c>>8,lo=c%256,byteArray.push(lo),byteArray.push(hi);return byteArray}function base64ToBytes(str){return base64.toByteArray(base64clean(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i=dst.length||i>=src.length);++i)dst[i+offset]=src[i];return i}function isInstance(obj,type){return obj instanceof type||null!=obj&&null!=obj.constructor&&null!=obj.constructor.name&&obj.constructor.name===type.name}function numberIsNaN(obj){return obj!==obj}var base64=require("base64-js"),ieee754=require("ieee754");exports.Buffer=Buffer,exports.SlowBuffer=SlowBuffer,exports.INSPECT_MAX_BYTES=50;var K_MAX_LENGTH=2147483647;exports.kMaxLength=2147483647,Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport(),Buffer.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(Buffer.prototype,"parent",{enumerable:!0,get:function(){return Buffer.isBuffer(this)?this.buffer:void 0}}),Object.defineProperty(Buffer.prototype,"offset",{enumerable:!0,get:function(){return Buffer.isBuffer(this)?this.byteOffset:void 0}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&Buffer[Symbol.species]===Buffer&&Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),Buffer.poolSize=8192,Buffer.from=function(value,encodingOrOffset,length){return from(value,encodingOrOffset,length)},Buffer.prototype.__proto__=Uint8Array.prototype,Buffer.__proto__=Uint8Array,Buffer.alloc=function(size,fill,encoding){return alloc(size,fill,encoding)},Buffer.allocUnsafe=function(size){return allocUnsafe(size)},Buffer.allocUnsafeSlow=function(size){return allocUnsafe(size)},Buffer.isBuffer=function isBuffer(b){return null!=b&&!0===b._isBuffer&&b!==Buffer.prototype},Buffer.compare=function compare(a,b){if(isInstance(a,Uint8Array)&&(a=Buffer.from(a,a.offset,a.byteLength)),isInstance(b,Uint8Array)&&(b=Buffer.from(b,b.offset,b.byteLength)),!Buffer.isBuffer(a)||!Buffer.isBuffer(b))throw new TypeError("The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array");if(a===b)return 0;for(var x=a.length,y=b.length,i=0,len=_Mathmin(x,y);imax&&(str+=" ... "),""},Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(isInstance(target,Uint8Array)&&(target=Buffer.from(target,target.offset,target.byteLength)),!Buffer.isBuffer(target))throw new TypeError("The \"target\" argument must be one of type Buffer or Uint8Array. Received type "+typeof target);if(void 0===start&&(start=0),void 0===end&&(end=target?target.length:0),void 0===thisStart&&(thisStart=0),void 0===thisEnd&&(thisEnd=this.length),0>start||end>target.length||0>thisStart||thisEnd>this.length)throw new RangeError("out of range index");if(thisStart>=thisEnd&&start>=end)return 0;if(thisStart>=thisEnd)return-1;if(start>=end)return 1;if(start>>>=0,end>>>=0,thisStart>>>=0,thisEnd>>>=0,this===target)return 0;for(var x=thisEnd-thisStart,y=end-start,len=_Mathmin(x,y),thisCopy=this.slice(thisStart,thisEnd),targetCopy=target.slice(start,end),i=0;i>>=0,isFinite(length)?(length>>>=0,void 0===encoding&&(encoding="utf8")):(encoding=length,length=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var remaining=this.length-offset;if((void 0===length||length>remaining)&&(length=remaining),0length||0>offset)||offset>this.length)throw new RangeError("Attempt to write outside buffer bounds");encoding||(encoding="utf8");for(var loweredCase=!1;;)switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase(),loweredCase=!0;}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var MAX_ARGUMENTS_LENGTH=4096;Buffer.prototype.slice=function slice(start,end){var len=this.length;start=~~start,end=void 0===end?len:~~end,0>start?(start+=len,0>start&&(start=0)):start>len&&(start=len),0>end?(end+=len,0>end&&(end=0)):end>len&&(end=len),end>>=0,byteLength>>>=0,noAssert||checkOffset(offset,byteLength,this.length);for(var val=this[offset],mul=1,i=0;++i>>=0,byteLength>>>=0,noAssert||checkOffset(offset,byteLength,this.length);for(var val=this[offset+--byteLength],mul=1;0>>=0,noAssert||checkOffset(offset,1,this.length),this[offset]},Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,2,this.length),this[offset]|this[offset+1]<<8},Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,2,this.length),this[offset]<<8|this[offset+1]},Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,4,this.length),(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+16777216*this[offset+3]},Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,4,this.length),16777216*this[offset]+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])},Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset>>>=0,byteLength>>>=0,noAssert||checkOffset(offset,byteLength,this.length);for(var val=this[offset],mul=1,i=0;++i=mul&&(val-=_Mathpow(2,8*byteLength)),val},Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset>>>=0,byteLength>>>=0,noAssert||checkOffset(offset,byteLength,this.length);for(var i=byteLength,mul=1,val=this[offset+--i];0=mul&&(val-=_Mathpow(2,8*byteLength)),val},Buffer.prototype.readInt8=function readInt8(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,1,this.length),128&this[offset]?-1*(255-this[offset]+1):this[offset]},Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){offset>>>=0,noAssert||checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return 32768&val?4294901760|val:val},Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){offset>>>=0,noAssert||checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return 32768&val?4294901760|val:val},Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,4,this.length),this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,4,this.length),this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]},Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,4,this.length),ieee754.read(this,offset,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,4,this.length),ieee754.read(this,offset,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,8,this.length),ieee754.read(this,offset,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){return offset>>>=0,noAssert||checkOffset(offset,8,this.length),ieee754.read(this,offset,!1,52,8)},Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){if(value=+value,offset>>>=0,byteLength>>>=0,!noAssert){var maxBytes=_Mathpow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var mul=1,i=0;for(this[offset]=255&value;++i>>=0,byteLength>>>=0,!noAssert){var maxBytes=_Mathpow(2,8*byteLength)-1;checkInt(this,value,offset,byteLength,maxBytes,0)}var i=byteLength-1,mul=1;for(this[offset+i]=255&value;0<=--i&&(mul*=256);)this[offset+i]=255&value/mul;return offset+byteLength},Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,1,255,0),this[offset]=255&value,offset+1},Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,2,65535,0),this[offset]=255&value,this[offset+1]=value>>>8,offset+2},Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,2,65535,0),this[offset]=value>>>8,this[offset+1]=255&value,offset+2},Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,4,4294967295,0),this[offset+3]=value>>>24,this[offset+2]=value>>>16,this[offset+1]=value>>>8,this[offset]=255&value,offset+4},Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,4,4294967295,0),this[offset]=value>>>24,this[offset+1]=value>>>16,this[offset+2]=value>>>8,this[offset+3]=255&value,offset+4},Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){if(value=+value,offset>>>=0,!noAssert){var limit=_Mathpow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0,mul=1,sub=0;for(this[offset]=255&value;++ivalue&&0===sub&&0!==this[offset+i-1]&&(sub=1),this[offset+i]=255&(value/mul>>0)-sub;return offset+byteLength},Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){if(value=+value,offset>>>=0,!noAssert){var limit=_Mathpow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1,mul=1,sub=0;for(this[offset+i]=255&value;0<=--i&&(mul*=256);)0>value&&0===sub&&0!==this[offset+i+1]&&(sub=1),this[offset+i]=255&(value/mul>>0)-sub;return offset+byteLength},Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,1,127,-128),0>value&&(value=255+value+1),this[offset]=255&value,offset+1},Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,2,32767,-32768),this[offset]=255&value,this[offset+1]=value>>>8,offset+2},Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,2,32767,-32768),this[offset]=value>>>8,this[offset+1]=255&value,offset+2},Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,4,2147483647,-2147483648),this[offset]=255&value,this[offset+1]=value>>>8,this[offset+2]=value>>>16,this[offset+3]=value>>>24,offset+4},Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){return value=+value,offset>>>=0,noAssert||checkInt(this,value,offset,4,2147483647,-2147483648),0>value&&(value=4294967295+value+1),this[offset]=value>>>24,this[offset+1]=value>>>16,this[offset+2]=value>>>8,this[offset+3]=255&value,offset+4},Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,!0,noAssert)},Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,!1,noAssert)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,!0,noAssert)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,!1,noAssert)},Buffer.prototype.copy=function copy(target,targetStart,start,end){if(!Buffer.isBuffer(target))throw new TypeError("argument should be a Buffer");if(start||(start=0),end||0===end||(end=this.length),targetStart>=target.length&&(targetStart=target.length),targetStart||(targetStart=0),0targetStart)throw new RangeError("targetStart out of bounds");if(0>start||start>=this.length)throw new RangeError("Index out of range");if(0>end)throw new RangeError("sourceEnd out of bounds");end>this.length&&(end=this.length),target.length-targetStartcode||"latin1"===encoding)&&(val=code)}}else"number"==typeof val&&(val&=255);if(0>start||this.length>>=0,end=end===void 0?this.length:end>>>0,val||(val=0);var i;if("number"==typeof val)for(i=start;i */const LRU=require("lru"),queueMicrotask=require("queue-microtask");class CacheStore{constructor(store,opts){if(this.store=store,this.chunkLength=store.chunkLength,this.inProgressGets=new Map,!this.store||!this.store.get||!this.store.put)throw new Error("First argument must be abstract-chunk-store compliant");this.cache=new LRU(opts)}put(index,buf,cb=()=>{}){return this.cache?void(this.cache.remove(index),this.store.put(index,buf,cb)):queueMicrotask(()=>cb(new Error("CacheStore closed")))}get(index,opts,cb=()=>{}){if("function"==typeof opts)return this.get(index,null,opts);if(!this.cache)return queueMicrotask(()=>cb(new Error("CacheStore closed")));opts||(opts={});let buf=this.cache.get(index);if(buf){const offset=opts.offset||0,len=opts.length||buf.length-offset;return(0!==offset||len!==buf.length)&&(buf=buf.slice(offset,len+offset)),queueMicrotask(()=>cb(null,buf))}let waiters=this.inProgressGets.get(index);const getAlreadyStarted=!!waiters;waiters||(waiters=[],this.inProgressGets.set(index,waiters)),waiters.push({opts,cb}),getAlreadyStarted||this.store.get(index,(err,buf)=>{err||null==this.cache||this.cache.set(index,buf);const inProgressEntry=this.inProgressGets.get(index);this.inProgressGets.delete(index);for(const{opts,cb}of inProgressEntry)if(err)cb(err);else{const offset=opts.offset||0,len=opts.length||buf.length-offset;let slicedBuf=buf;(0!==offset||len!==buf.length)&&(slicedBuf=buf.slice(offset,len+offset)),cb(null,slicedBuf)}})}close(cb=()=>{}){return this.cache?void(this.cache=null,this.store.close(cb)):queueMicrotask(()=>cb(new Error("CacheStore closed")))}destroy(cb=()=>{}){return this.cache?void(this.cache=null,this.store.destroy(cb)):queueMicrotask(()=>cb(new Error("CacheStore closed")))}}module.exports=CacheStore},{lru:156,"queue-microtask":206}],79:[function(require,module,exports){const BlockStream=require("block-stream2"),stream=require("readable-stream");class ChunkStoreWriteStream extends stream.Writable{constructor(store,chunkLength,opts={}){if(super(opts),!store||!store.put||!store.get)throw new Error("First argument must be an abstract-chunk-store compliant store");if(chunkLength=+chunkLength,!chunkLength)throw new Error("Second argument must be a chunk length");const zeroPadding=void 0!==opts.zeroPadding&&opts.zeroPadding;this._blockstream=new BlockStream(chunkLength,{...opts,zeroPadding}),this._outstandingPuts=0,this._storeMaxOutstandingPuts=opts.storeMaxOutstandingPuts||16;let index=0;const onData=chunk=>{this.destroyed||(this._outstandingPuts+=1,this._outstandingPuts>=this._storeMaxOutstandingPuts&&this._blockstream.pause(),store.put(index,chunk,err=>err?this.destroy(err):void(this._outstandingPuts-=1,this._outstandingPuts{this.destroy(err)})}_write(chunk,encoding,callback){this._blockstream.write(chunk,encoding,callback)}_final(cb){this._blockstream.end(),this._blockstream.once("end",()=>{0===this._outstandingPuts?cb(null):this._finalCb=cb})}destroy(err){this.destroyed||(this.destroyed=!0,err&&this.emit("error",err),this.emit("close"))}}module.exports=ChunkStoreWriteStream},{"block-stream2":39,"readable-stream":228}],80:[function(require,module,exports){function CipherBase(hashMode){Transform.call(this),this.hashMode="string"==typeof hashMode,this.hashMode?this[hashMode]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}var Buffer=require("safe-buffer").Buffer,Transform=require("stream").Transform,StringDecoder=require("string_decoder").StringDecoder,inherits=require("inherits");inherits(CipherBase,Transform),CipherBase.prototype.update=function(data,inputEnc,outputEnc){"string"==typeof data&&(data=Buffer.from(data,inputEnc));var outData=this._update(data);return this.hashMode?this:(outputEnc&&(outData=this._toString(outData,outputEnc)),outData)},CipherBase.prototype.setAutoPadding=function(){},CipherBase.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},CipherBase.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},CipherBase.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},CipherBase.prototype._transform=function(data,_,next){var err;try{this.hashMode?this._update(data):this.push(this._update(data))}catch(e){err=e}finally{next(err)}},CipherBase.prototype._flush=function(done){var err;try{this.push(this.__final())}catch(e){err=e}done(err)},CipherBase.prototype._finalOrDigest=function(outputEnc){var outData=this.__final()||Buffer.alloc(0);return outputEnc&&(outData=this._toString(outData,outputEnc,!0)),outData},CipherBase.prototype._toString=function(value,enc,fin){if(this._decoder||(this._decoder=new StringDecoder(enc),this._encoding=enc),this._encoding!==enc)throw new Error("can't switch encodings");var out=this._decoder.write(value);return fin&&(out+=this._decoder.end()),out},module.exports=CipherBase},{inherits:147,"safe-buffer":235,stream:256,string_decoder:71}],81:[function(require,module,exports){(function(Buffer){(function(){var clone=function(){"use strict";function _instanceof(obj,type){return null!=type&&obj instanceof type}function clone(parent,circular,depth,prototype,includeNonEnumerable){function _clone(parent,depth){if(null===parent)return null;if(0===depth)return parent;var child,proto;if("object"!=typeof parent)return parent;if(_instanceof(parent,nativeMap))child=new nativeMap;else if(_instanceof(parent,nativeSet))child=new nativeSet;else if(_instanceof(parent,nativePromise))child=new nativePromise(function(resolve,reject){parent.then(function(value){resolve(_clone(value,depth-1))},function(err){reject(_clone(err,depth-1))})});else if(clone.__isArray(parent))child=[];else if(clone.__isRegExp(parent))child=new RegExp(parent.source,__getRegExpFlags(parent)),parent.lastIndex&&(child.lastIndex=parent.lastIndex);else if(clone.__isDate(parent))child=new Date(parent.getTime());else{if(useBuffer&&Buffer.isBuffer(parent))return child=Buffer.allocUnsafe?Buffer.allocUnsafe(parent.length):new Buffer(parent.length),parent.copy(child),child;_instanceof(parent,Error)?child=Object.create(parent):"undefined"==typeof prototype?(proto=Object.getPrototypeOf(parent),child=Object.create(proto)):(child=Object.create(prototype),proto=prototype)}if(circular){var index=allParents.indexOf(parent);if(-1!=index)return allChildren[index];allParents.push(parent),allChildren.push(child)}for(var i in _instanceof(parent,nativeMap)&&parent.forEach(function(value,key){var keyChild=_clone(key,depth-1),valueChild=_clone(value,depth-1);child.set(keyChild,valueChild)}),_instanceof(parent,nativeSet)&&parent.forEach(function(value){var entryChild=_clone(value,depth-1);child.add(entryChild)}),parent){var attrs;(proto&&(attrs=Object.getOwnPropertyDescriptor(proto,i)),!(attrs&&null==attrs.set))&&(child[i]=_clone(parent[i],depth-1))}if(Object.getOwnPropertySymbols)for(var symbols=Object.getOwnPropertySymbols(parent),i=0;iblocksize){var hash="rmd160"===alg?new RIPEMD160:sha(alg);key=hash.update(key).digest()}else key.length64?key=alg(key):key.length<64&&(key=Buffer.concat([key,ZEROS],64));for(var ipad=this._ipad=Buffer.allocUnsafe(64),opad=this._opad=Buffer.allocUnsafe(64),i=0;i<64;i++)ipad[i]=54^key[i],opad[i]=92^key[i];this._hash=[ipad]}var inherits=require("inherits"),Buffer=require("safe-buffer").Buffer,Base=require("cipher-base"),ZEROS=Buffer.alloc(128),blocksize=64;inherits(Hmac,Base),Hmac.prototype._update=function(data){this._hash.push(data)},Hmac.prototype._final=function(){var h=this._alg(Buffer.concat(this._hash));return this._alg(Buffer.concat([this._opad,h]))},module.exports=Hmac},{"cipher-base":80,inherits:147,"safe-buffer":235}],89:[function(require,module,exports){(function(Buffer){(function(){function createTorrent(input,opts,cb){"function"==typeof opts&&([opts,cb]=[cb,opts]),opts=opts?Object.assign({},opts):{},_parseInput(input,opts,(err,files,singleFileTorrent)=>err?cb(err):void(opts.singleFileTorrent=singleFileTorrent,onFiles(files,opts,cb)))}function parseInput(input,opts,cb){"function"==typeof opts&&([opts,cb]=[cb,opts]),opts=opts?Object.assign({},opts):{},_parseInput(input,opts,cb)}function _parseInput(input,opts,cb){function processInput(){parallel(input.map(item=>cb=>{const file={};if(isBlob(item))file.getStream=item.stream(),file.length=item.size;else if(Buffer.isBuffer(item))file.getStream=[item],file.length=item.length;else if(isReadable(item))file.getStream=getStreamStream(item,file),file.length=0;else{if("string"==typeof item){if("function"!=typeof getFiles)throw new Error("filesystem paths do not work in the browser");const keepRoot=1err?cb(err):void(files=files.flat(),cb(null,files,isSingleFileTorrent)))}if(isFileList(input)&&(input=Array.from(input)),Array.isArray(input)||(input=[input]),0===input.length)throw new Error("invalid input type");input.forEach(item=>{if(null==item)throw new Error(`invalid input type: ${item}`)}),input=input.map(item=>isBlob(item)&&"string"==typeof item.path&&"function"==typeof getFiles?item.path:item),1!==input.length||"string"==typeof input[0]||input[0].name||(input[0].name=opts.name);let commonPrefix=null;input.forEach((item,i)=>{if("string"==typeof item)return;let path=item.fullPath||item.name;path||(path=`Unknown File ${i+1}`,item.unknownName=!0),item[pathSymbol]=path.split("/"),item[pathSymbol][0]||item[pathSymbol].shift(),2>item[pathSymbol].length?commonPrefix=null:0===i&&1"string"==typeof item||!isJunkPath(item[pathSymbol]))),commonPrefix&&input.forEach(item=>{const pathless=(Buffer.isBuffer(item)||isReadable(item))&&!item[pathSymbol];"string"==typeof item||pathless||item[pathSymbol].shift()}),!opts.name&&commonPrefix&&(opts.name=commonPrefix),opts.name||input.some(item=>"string"==typeof item?(opts.name=corePath.basename(item),!0):!item.unknownName&&(opts.name=item[pathSymbol][item[pathSymbol].length-1],!0)),opts.name||(opts.name=`Unnamed Torrent ${Date.now()}`);const numPaths=input.reduce((sum,item)=>sum+ +("string"==typeof item),0);let isSingleFileTorrent=1===input.length;if(1===input.length&&"string"==typeof input[0]){if("function"!=typeof getFiles)throw new Error("filesystem paths do not work in the browser");isFile(input[0],(err,pathIsFile)=>err?cb(err):void(isSingleFileTorrent=pathIsFile,processInput()))}else queueMicrotask(processInput)}async function getPieceList(files,pieceLength,estimatedTorrentLength,opts,cb){const pieces=[];let length=0,hashedLength=0;const streams=files.map(file=>file.getStream),onProgress=opts.onProgress;let remainingHashes=0,pieceNum=0,ended=!1;const iterator=blockIterator(joinIterator(streams),pieceLength,{zeroPadding:!1});try{for await(const chunk of iterator)await new Promise(resolve=>{length+=chunk.length;const i=pieceNum;++pieceNum,++remainingHashes{pieces[i]=hash,--remainingHashes,hashedLength+=chunk.length,onProgress&&onProgress(hashedLength,estimatedTorrentLength),resolve(),ended&&0==remainingHashes&&cb(null,Buffer.from(pieces.join(""),"hex"),length)})});if(0==remainingHashes)return cb(null,Buffer.from(pieces.join(""),"hex"),length);ended=!0}catch(err){cb(err)}}function onFiles(files,opts,cb){let announceList=opts.announceList;announceList||("string"==typeof opts.announce?announceList=[[opts.announce]]:Array.isArray(opts.announce)&&(announceList=opts.announce.map(u=>[u]))),announceList||(announceList=[]),globalThis.WEBTORRENT_ANNOUNCE&&("string"==typeof globalThis.WEBTORRENT_ANNOUNCE?announceList.push([[globalThis.WEBTORRENT_ANNOUNCE]]):Array.isArray(globalThis.WEBTORRENT_ANNOUNCE)&&(announceList=announceList.concat(globalThis.WEBTORRENT_ANNOUNCE.map(u=>[u])))),opts.announce===void 0&&opts.announceList===void 0&&(announceList=announceList.concat(module.exports.announceList)),"string"==typeof opts.urlList&&(opts.urlList=[opts.urlList]);const torrent={info:{name:opts.name},"creation date":_Mathceil((+opts.creationDate||Date.now())/1e3),encoding:"UTF-8"};0!==announceList.length&&(torrent.announce=announceList[0][0],torrent["announce-list"]=announceList),opts.comment!==void 0&&(torrent.comment=opts.comment),opts.createdBy!==void 0&&(torrent["created by"]=opts.createdBy),opts.private!==void 0&&(torrent.info.private=+opts.private),opts.info!==void 0&&Object.assign(torrent.info,opts.info),opts.sslCert!==void 0&&(torrent.info["ssl-cert"]=opts.sslCert),opts.urlList!==void 0&&(torrent["url-list"]=opts.urlList);const estimatedTorrentLength=files.reduce(sumLength,0),pieceLength=opts.pieceLength||calcPieceLength(estimatedTorrentLength);torrent.info["piece length"]=pieceLength,getPieceList(files,pieceLength,estimatedTorrentLength,opts,(err,pieces,torrentLength)=>err?cb(err):void(torrent.info.pieces=pieces,files.forEach(file=>{delete file.getStream}),opts.singleFileTorrent?torrent.info.length=torrentLength:torrent.info.files=files,cb(null,bencode.encode(torrent))))}function isJunkPath(path){const filename=path[path.length-1];return"."===filename[0]&&junk.is(filename)}function sumLength(sum,file){return sum+file.length}function isBlob(obj){return"undefined"!=typeof Blob&&obj instanceof Blob}function isFileList(obj){return"undefined"!=typeof FileList&&obj instanceof FileList}function isReadable(obj){return"object"==typeof obj&&null!=obj&&"function"==typeof obj.pipe}async function*getStreamStream(readable,file){for await(const chunk of readable)file.length+=chunk.length,yield chunk}/*! create-torrent. MIT License. WebTorrent LLC */const bencode=require("bencode"),blockIterator=require("block-iterator"),calcPieceLength=require("piece-length"),corePath=require("path"),isFile=require("is-file"),junk=require("junk"),joinIterator=require("join-async-iterator"),parallel=require("run-parallel"),queueMicrotask=require("queue-microtask"),sha1=require("simple-sha1");require("fast-readable-async-iterator");const getFiles=require("./get-files"),announceList=[["udp://tracker.leechers-paradise.org:6969"],["udp://tracker.coppersurfer.tk:6969"],["udp://tracker.opentrackr.org:1337"],["udp://explodie.org:6969"],["udp://tracker.empire-js.us:1337"],["wss://tracker.btorrent.xyz"],["wss://tracker.openwebtorrent.com"]],pathSymbol=Symbol("itemPath"),MAX_OUTSTANDING_HASHES=5;module.exports=createTorrent,module.exports.parseInput=parseInput,module.exports.announceList=announceList,module.exports.isJunkPath=isJunkPath}).call(this)}).call(this,require("buffer").Buffer)},{"./get-files":42,bencode:27,"block-iterator":38,buffer:76,"fast-readable-async-iterator":128,"is-file":42,"join-async-iterator":150,junk:151,path:185,"piece-length":192,"queue-microtask":206,"run-parallel":233,"simple-sha1":248}],90:[function(require,module,exports){"use strict";exports.randomBytes=exports.rng=exports.pseudoRandomBytes=exports.prng=require("randombytes"),exports.createHash=exports.Hash=require("create-hash"),exports.createHmac=exports.Hmac=require("create-hmac");var algos=require("browserify-sign/algos"),algoKeys=Object.keys(algos),hashes=["sha1","sha224","sha256","sha384","sha512","md5","rmd160"].concat(algoKeys);exports.getHashes=function(){return hashes};var p=require("pbkdf2");exports.pbkdf2=p.pbkdf2,exports.pbkdf2Sync=p.pbkdf2Sync;var aes=require("browserify-cipher");exports.Cipher=aes.Cipher,exports.createCipher=aes.createCipher,exports.Cipheriv=aes.Cipheriv,exports.createCipheriv=aes.createCipheriv,exports.Decipher=aes.Decipher,exports.createDecipher=aes.createDecipher,exports.Decipheriv=aes.Decipheriv,exports.createDecipheriv=aes.createDecipheriv,exports.getCiphers=aes.getCiphers,exports.listCiphers=aes.listCiphers;var dh=require("diffie-hellman");exports.DiffieHellmanGroup=dh.DiffieHellmanGroup,exports.createDiffieHellmanGroup=dh.createDiffieHellmanGroup,exports.getDiffieHellman=dh.getDiffieHellman,exports.createDiffieHellman=dh.createDiffieHellman,exports.DiffieHellman=dh.DiffieHellman;var sign=require("browserify-sign");exports.createSign=sign.createSign,exports.Sign=sign.Sign,exports.createVerify=sign.createVerify,exports.Verify=sign.Verify,exports.createECDH=require("create-ecdh");var publicEncrypt=require("public-encrypt");exports.publicEncrypt=publicEncrypt.publicEncrypt,exports.privateEncrypt=publicEncrypt.privateEncrypt,exports.publicDecrypt=publicEncrypt.publicDecrypt,exports.privateDecrypt=publicEncrypt.privateDecrypt;var rf=require("randomfill");exports.randomFill=rf.randomFill,exports.randomFillSync=rf.randomFillSync,exports.createCredentials=function(){throw new Error("sorry, createCredentials is not implemented yet\nwe accept pull requests\nhttps://github.com/crypto-browserify/crypto-browserify")},exports.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},{"browserify-cipher":60,"browserify-sign":67,"browserify-sign/algos":64,"create-ecdh":83,"create-hash":85,"create-hmac":87,"diffie-hellman":99,pbkdf2:186,"public-encrypt":194,randombytes:209,randomfill:210}],91:[function(require,module,exports){(function(process){(function(){function useColors(){return!!("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))||!("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&31<=parseInt(RegExp.$1,10)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))}function formatArgs(args){if(args[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+args[0]+(this.useColors?"%c ":" ")+"+"+module.exports.humanize(this.diff),!this.useColors)return;const c="color: "+this.color;args.splice(1,0,c,"color: inherit");let index=0,lastC=0;args[0].replace(/%[a-zA-Z%]/g,match=>{"%%"===match||(index++,"%c"===match&&(lastC=index))}),args.splice(lastC,0,c)}function save(namespaces){try{namespaces?exports.storage.setItem("debug",namespaces):exports.storage.removeItem("debug")}catch(error){}}function load(){let r;try{r=exports.storage.getItem("debug")}catch(error){}return!r&&"undefined"!=typeof process&&"env"in process&&(r=process.env.DEBUG),r}function localstorage(){try{return localStorage}catch(error){}}exports.formatArgs=formatArgs,exports.save=save,exports.load=load,exports.useColors=useColors,exports.storage=localstorage(),exports.destroy=(()=>{let warned=!1;return()=>{warned||(warned=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),exports.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],exports.log=console.debug||console.log||(()=>{}),module.exports=require("./common")(exports);const{formatters}=module.exports;formatters.j=function(v){try{return JSON.stringify(v)}catch(error){return"[UnexpectedJSONParseError]: "+error.message}}}).call(this)}).call(this,require("_process"))},{"./common":92,_process:193}],92:[function(require,module,exports){function setup(env){function selectColor(namespace){let hash=0;for(let i=0;i{if("%%"===match)return"%";index++;const formatter=createDebug.formatters[format];if("function"==typeof formatter){const val=args[index];match=formatter.call(self,val),args.splice(index,1),index--}return match}),createDebug.formatArgs.call(self,args);const logFn=self.log||createDebug.log;logFn.apply(self,args)}let enableOverride=null,prevTime,namespacesCache,enabledCache;return debug.namespace=namespace,debug.useColors=createDebug.useColors(),debug.color=createDebug.selectColor(namespace),debug.extend=extend,debug.destroy=createDebug.destroy,Object.defineProperty(debug,"enabled",{enumerable:!0,configurable:!1,get:()=>null===enableOverride?(namespacesCache!==createDebug.namespaces&&(namespacesCache=createDebug.namespaces,enabledCache=createDebug.enabled(namespace)),enabledCache):enableOverride,set:v=>{enableOverride=v}}),"function"==typeof createDebug.init&&createDebug.init(debug),debug}function extend(namespace,delimiter){const newDebug=createDebug(this.namespace+("undefined"==typeof delimiter?":":delimiter)+namespace);return newDebug.log=this.log,newDebug}function enable(namespaces){createDebug.save(namespaces),createDebug.namespaces=namespaces,createDebug.names=[],createDebug.skips=[];let i;const split=("string"==typeof namespaces?namespaces:"").split(/[\s,]+/),len=split.length;for(i=0;i"-"+namespace)].join(",");return createDebug.enable(""),namespaces}function enabled(name){if("*"===name[name.length-1])return!0;let i,len;for(i=0,len=createDebug.skips.length;i{createDebug[key]=env[key]}),createDebug.names=[],createDebug.skips=[],createDebug.formatters={},createDebug.selectColor=selectColor,createDebug.enable(createDebug.load()),createDebug}module.exports=setup},{ms:176}],93:[function(require,module,exports){"use strict";exports.utils=require("./des/utils"),exports.Cipher=require("./des/cipher"),exports.DES=require("./des/des"),exports.CBC=require("./des/cbc"),exports.EDE=require("./des/ede")},{"./des/cbc":94,"./des/cipher":95,"./des/des":96,"./des/ede":97,"./des/utils":98}],94:[function(require,module,exports){"use strict";function CBCState(iv){assert.equal(iv.length,8,"Invalid IV length"),this.iv=Array(8);for(var i=0;i>>1],kL=utils.r28shl(kL,shift),kR=utils.r28shl(kR,shift),utils.pc2(kL,kR,state.keys,i)},DES.prototype._update=function _update(inp,inOff,out,outOff){var state=this._desState,l=utils.readUInt32BE(inp,inOff),r=utils.readUInt32BE(inp,inOff+4);utils.ip(l,r,state.tmp,0),l=state.tmp[0],r=state.tmp[1],"encrypt"===this.type?this._encrypt(state,l,r,state.tmp,0):this._decrypt(state,l,r,state.tmp,0),l=state.tmp[0],r=state.tmp[1],utils.writeUInt32BE(out,l,outOff),utils.writeUInt32BE(out,r,outOff+4)},DES.prototype._pad=function _pad(buffer,off){for(var value=buffer.length-off,i=off;i>>0,l=t}utils.rip(r,l,out,off)},DES.prototype._decrypt=function _decrypt(state,lStart,rStart,out,off){for(var l=rStart,r=lStart,i=state.keys.length-2;0<=i;i-=2){var keyL=state.keys[i],keyR=state.keys[i+1];utils.expand(l,state.tmp,0),keyL^=state.tmp[0],keyR^=state.tmp[1];var s=utils.substitute(keyL,keyR),f=utils.permute(s),t=l;l=(r^f)>>>0,r=t}utils.rip(l,r,out,off)}},{"./cipher":95,"./utils":98,inherits:147,"minimalistic-assert":168}],97:[function(require,module,exports){"use strict";function EDEState(type,key){assert.equal(key.length,24,"Invalid key length");var k1=key.slice(0,8),k2=key.slice(8,16),k3=key.slice(16,24);this.ciphers="encrypt"===type?[DES.create({type:"encrypt",key:k1}),DES.create({type:"decrypt",key:k2}),DES.create({type:"encrypt",key:k3})]:[DES.create({type:"decrypt",key:k3}),DES.create({type:"encrypt",key:k2}),DES.create({type:"decrypt",key:k1})]}function EDE(options){Cipher.call(this,options);var state=new EDEState(this.type,this.options.key);this._edeState=state}var assert=require("minimalistic-assert"),inherits=require("inherits"),Cipher=require("./cipher"),DES=require("./des");inherits(EDE,Cipher),module.exports=EDE,EDE.create=function create(options){return new EDE(options)},EDE.prototype._update=function _update(inp,inOff,out,outOff){var state=this._edeState;state.ciphers[0]._update(inp,inOff,out,outOff),state.ciphers[1]._update(out,outOff,out,outOff),state.ciphers[2]._update(out,outOff,out,outOff)},EDE.prototype._pad=DES.prototype._pad,EDE.prototype._unpad=DES.prototype._unpad},{"./cipher":95,"./des":96,inherits:147,"minimalistic-assert":168}],98:[function(require,module,exports){"use strict";exports.readUInt32BE=function readUInt32BE(bytes,off){var res=bytes[0+off]<<24|bytes[1+off]<<16|bytes[2+off]<<8|bytes[3+off];return res>>>0},exports.writeUInt32BE=function writeUInt32BE(bytes,value,off){bytes[0+off]=value>>>24,bytes[1+off]=255&value>>>16,bytes[2+off]=255&value>>>8,bytes[3+off]=255&value},exports.ip=function ip(inL,inR,out,off){for(var outL=0,outR=0,i=6;0<=i;i-=2){for(var j=0;24>=j;j+=8)outL<<=1,outL|=1&inR>>>j+i;for(var j=0;24>=j;j+=8)outL<<=1,outL|=1&inL>>>j+i}for(var i=6;0<=i;i-=2){for(var j=1;25>=j;j+=8)outR<<=1,outR|=1&inR>>>j+i;for(var j=1;25>=j;j+=8)outR<<=1,outR|=1&inL>>>j+i}out[off+0]=outL>>>0,out[off+1]=outR>>>0},exports.rip=function rip(inL,inR,out,off){for(var outL=0,outR=0,i=0;4>i;i++)for(var j=24;0<=j;j-=8)outL<<=1,outL|=1&inR>>>j+i,outL<<=1,outL|=1&inL>>>j+i;for(var i=4;8>i;i++)for(var j=24;0<=j;j-=8)outR<<=1,outR|=1&inR>>>j+i,outR<<=1,outR|=1&inL>>>j+i;out[off+0]=outL>>>0,out[off+1]=outR>>>0},exports.pc1=function pc1(inL,inR,out,off){for(var outL=0,outR=0,i=7;5<=i;i--){for(var j=0;24>=j;j+=8)outL<<=1,outL|=1&inR>>j+i;for(var j=0;24>=j;j+=8)outL<<=1,outL|=1&inL>>j+i}for(var j=0;24>=j;j+=8)outL<<=1,outL|=1&inR>>j+i;for(var i=1;3>=i;i++){for(var j=0;24>=j;j+=8)outR<<=1,outR|=1&inR>>j+i;for(var j=0;24>=j;j+=8)outR<<=1,outR|=1&inL>>j+i}for(var j=0;24>=j;j+=8)outR<<=1,outR|=1&inL>>j+i;out[off+0]=outL>>>0,out[off+1]=outR>>>0},exports.r28shl=function r28shl(num,shift){return 268435455&num<>>28-shift};var pc2table=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];exports.pc2=function pc2(inL,inR,out,off){for(var outL=0,outR=0,len=pc2table.length>>>1,i=0;i>>pc2table[i];for(var i=len;i>>pc2table[i];out[off+0]=outL>>>0,out[off+1]=outR>>>0},exports.expand=function expand(r,out,off){var outL=0,outR=0;outL=(1&r)<<5|r>>>27;for(var i=23;15<=i;i-=4)outL<<=6,outL|=63&r>>>i;for(var i=11;3<=i;i-=4)outR|=63&r>>>i,outR<<=6;outR|=(31&r)<<1|r>>>31,out[off+0]=outL>>>0,out[off+1]=outR>>>0};var sTable=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];exports.substitute=function substitute(inL,inR){for(var out=0,i=0;4>i;i++){var b=63&inL>>>18-6*i,sb=sTable[64*i+b];out<<=4,out|=sb}for(var i=0;4>i;i++){var b=63&inR>>>18-6*i,sb=sTable[256+64*i+b];out<<=4,out|=sb}return out>>>0};var permuteTable=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];exports.permute=function permute(num){for(var out=0,i=0;i>>permuteTable[i];return out>>>0},exports.padSplit=function padSplit(num,size,group){for(var str=num.toString(2);str.lengthk;k+=2){sqrt=_Mathceil(_Mathsqrt(k));for(var j=0;jbits)return 2===gen||5===gen?new BN([140,123]):new BN([140,39]);gen=new BN(gen);for(var num,n2;!0;){for(num=new BN(randomBytes(_Mathceil(bits/8)));num.bitLength()>bits;)num.ishrn(1);if(num.isEven()&&num.iadd(ONE),num.testn(1)||num.iadd(TWO),!gen.cmp(TWO))for(;num.mod(TWENTYFOUR).cmp(ELEVEN);)num.iadd(FOUR);else if(!gen.cmp(FIVE))for(;num.mod(TEN).cmp(THREE);)num.iadd(FOUR);if(n2=num.shrn(1),simpleSieve(n2)&&simpleSieve(num)&&fermatTest(n2)&&fermatTest(num)&&millerRabin.test(n2)&&millerRabin.test(num))return num}}var randomBytes=require("randombytes");module.exports=findPrime,findPrime.simpleSieve=simpleSieve,findPrime.fermatTest=fermatTest;var BN=require("bn.js"),TWENTYFOUR=new BN(24),MillerRabin=require("miller-rabin"),millerRabin=new MillerRabin,ONE=new BN(1),TWO=new BN(2),FIVE=new BN(5),SIXTEEN=new BN(16),EIGHT=new BN(8),TEN=new BN(10),THREE=new BN(3),SEVEN=new BN(7),ELEVEN=new BN(11),FOUR=new BN(4),TWELVE=new BN(12),primes=null},{"bn.js":103,"miller-rabin":162,randombytes:209}],102:[function(require,module,exports){module.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],103:[function(require,module,exports){arguments[4][22][0].apply(exports,arguments)},{buffer:42,dup:22}],104:[function(require,module,exports){"use strict";var elliptic=exports;elliptic.version=require("../package.json").version,elliptic.utils=require("./elliptic/utils"),elliptic.rand=require("brorand"),elliptic.curve=require("./elliptic/curve"),elliptic.curves=require("./elliptic/curves"),elliptic.ec=require("./elliptic/ec"),elliptic.eddsa=require("./elliptic/eddsa")},{"../package.json":120,"./elliptic/curve":107,"./elliptic/curves":110,"./elliptic/ec":111,"./elliptic/eddsa":114,"./elliptic/utils":118,brorand:41}],105:[function(require,module,exports){"use strict";function BaseCurve(type,conf){this.type=type,this.p=new BN(conf.p,16),this.red=conf.prime?BN.red(conf.prime):BN.mont(this.p),this.zero=new BN(0).toRed(this.red),this.one=new BN(1).toRed(this.red),this.two=new BN(2).toRed(this.red),this.n=conf.n&&new BN(conf.n,16),this.g=conf.g&&this.pointFromJSON(conf.g,conf.gRed),this._wnafT1=[,,,,],this._wnafT2=[,,,,],this._wnafT3=[,,,,],this._wnafT4=[,,,,],this._bitLength=this.n?this.n.bitLength():0;var adjustCount=this.n&&this.p.div(this.n);!adjustCount||0=j;l--)nafW=(nafW<<1)+naf[l];repr.push(nafW)}for(var a=this.jpoint(null,null,null),b=this.jpoint(null,null,null),i=I;0i)break;var z=naf[i];assert(0!==z),acc="affine"===p.type?0>1]):acc.mixedAdd(wnd[-z-1>>1].neg()):0>1]):acc.add(wnd[-z-1>>1].neg())}return"affine"===p.type?acc.toP():acc},BaseCurve.prototype._wnafMulAdd=function _wnafMulAdd(defW,points,coeffs,len,jacobianResult){var wndWidth=this._wnafT1,wnd=this._wnafT2,naf=this._wnafT3,max=0,i,j,p;for(i=0;ii)break;for(j=0;j>1]:0>z&&(p=wnd[j][-z-1>>1].neg());acc="affine"===p.type?acc.mixedAdd(p):acc.add(p)}}for(i=0;i=_Mathceil((k.bitLength()+1)/doubles.step)},BasePoint.prototype._getDoubles=function _getDoubles(step,power){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var doubles=[this],acc=this,i=0;i":""},Point.prototype.isInfinity=function isInfinity(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},Point.prototype._extDbl=function _extDbl(){var a=this.x.redSqr(),b=this.y.redSqr(),c=this.z.redSqr();c=c.redIAdd(c);var d=this.curve._mulA(a),e=this.x.redAdd(this.y).redSqr().redISub(a).redISub(b),g=d.redAdd(b),f=g.redSub(c),h=d.redSub(b),nx=e.redMul(f),ny=g.redMul(h),nt=e.redMul(h),nz=f.redMul(g);return this.curve.point(nx,ny,nz,nt)},Point.prototype._projDbl=function _projDbl(){var b=this.x.redAdd(this.y).redSqr(),c=this.x.redSqr(),d=this.y.redSqr(),nx,ny,nz,e,h,j;if(this.curve.twisted){e=this.curve._mulA(c);var f=e.redAdd(d);this.zOne?(nx=b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)),ny=f.redMul(e.redSub(d)),nz=f.redSqr().redSub(f).redSub(f)):(h=this.z.redSqr(),j=f.redSub(h).redISub(h),nx=b.redSub(c).redISub(d).redMul(j),ny=f.redMul(e.redSub(d)),nz=f.redMul(j))}else e=c.redAdd(d),h=this.curve._mulC(this.z).redSqr(),j=e.redSub(h).redSub(h),nx=this.curve._mulC(b.redISub(e)).redMul(j),ny=this.curve._mulC(e).redMul(c.redISub(d)),nz=e.redMul(j);return this.curve.point(nx,ny,nz)},Point.prototype.dbl=function dbl(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},Point.prototype._extAdd=function _extAdd(p){var a=this.y.redSub(this.x).redMul(p.y.redSub(p.x)),b=this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)),c=this.t.redMul(this.curve.dd).redMul(p.t),d=this.z.redMul(p.z.redAdd(p.z)),e=b.redSub(a),f=d.redSub(c),g=d.redAdd(c),h=b.redAdd(a),nx=e.redMul(f),ny=g.redMul(h),nt=e.redMul(h),nz=f.redMul(g);return this.curve.point(nx,ny,nz,nt)},Point.prototype._projAdd=function _projAdd(p){var a=this.z.redMul(p.z),b=a.redSqr(),c=this.x.redMul(p.x),d=this.y.redMul(p.y),e=this.curve.d.redMul(c).redMul(d),f=b.redSub(e),g=b.redAdd(e),tmp=this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d),nx=a.redMul(f).redMul(tmp),ny,nz;return this.curve.twisted?(ny=a.redMul(g).redMul(d.redSub(this.curve._mulA(c))),nz=f.redMul(g)):(ny=a.redMul(g).redMul(d.redSub(c)),nz=this.curve._mulC(f).redMul(g)),this.curve.point(nx,ny,nz)},Point.prototype.add=function add(p){return this.isInfinity()?p:p.isInfinity()?this:this.curve.extended?this._extAdd(p):this._projAdd(p)},Point.prototype.mul=function mul(k){return this._hasDoubles(k)?this.curve._fixedNafMul(this,k):this.curve._wnafMul(this,k)},Point.prototype.mulAdd=function mulAdd(k1,p,k2){return this.curve._wnafMulAdd(1,[this,p],[k1,k2],2,!1)},Point.prototype.jmulAdd=function jmulAdd(k1,p,k2){return this.curve._wnafMulAdd(1,[this,p],[k1,k2],2,!0)},Point.prototype.normalize=function normalize(){if(this.zOne)return this;var zi=this.z.redInvm();return this.x=this.x.redMul(zi),this.y=this.y.redMul(zi),this.t&&(this.t=this.t.redMul(zi)),this.z=this.curve.one,this.zOne=!0,this},Point.prototype.neg=function neg(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},Point.prototype.getX=function getX(){return this.normalize(),this.x.fromRed()},Point.prototype.getY=function getY(){return this.normalize(),this.y.fromRed()},Point.prototype.eq=function eq(other){return this===other||0===this.getX().cmp(other.getX())&&0===this.getY().cmp(other.getY())},Point.prototype.eqXToP=function eqXToP(x){var rx=x.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(rx))return!0;for(var xc=x.clone(),t=this.curve.redN.redMul(this.z);;){if(xc.iadd(this.curve.n),0<=xc.cmp(this.curve.p))return!1;if(rx.redIAdd(t),0===this.x.cmp(rx))return!0}},Point.prototype.toP=Point.prototype.normalize,Point.prototype.mixedAdd=Point.prototype.add},{"../utils":118,"./base":105,"bn.js":119,inherits:147}],107:[function(require,module,exports){"use strict";var curve=exports;curve.base=require("./base"),curve.short=require("./short"),curve.mont=require("./mont"),curve.edwards=require("./edwards")},{"./base":105,"./edwards":106,"./mont":108,"./short":109}],108:[function(require,module,exports){"use strict";function MontCurve(conf){Base.call(this,"mont",conf),this.a=new BN(conf.a,16).toRed(this.red),this.b=new BN(conf.b,16).toRed(this.red),this.i4=new BN(4).toRed(this.red).redInvm(),this.two=new BN(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function Point(curve,x,z){Base.BasePoint.call(this,curve,"projective"),null===x&&null===z?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new BN(x,16),this.z=new BN(z,16),!this.x.red&&(this.x=this.x.toRed(this.curve.red)),!this.z.red&&(this.z=this.z.toRed(this.curve.red)))}var BN=require("bn.js"),inherits=require("inherits"),Base=require("./base"),utils=require("../utils");inherits(MontCurve,Base),module.exports=MontCurve,MontCurve.prototype.validate=function validate(point){var x=point.normalize().x,x2=x.redSqr(),rhs=x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x),y=rhs.redSqrt();return 0===y.redSqr().cmp(rhs)},inherits(Point,Base.BasePoint),MontCurve.prototype.decodePoint=function decodePoint(bytes,enc){return this.point(utils.toArray(bytes,enc),1)},MontCurve.prototype.point=function point(x,z){return new Point(this,x,z)},MontCurve.prototype.pointFromJSON=function pointFromJSON(obj){return Point.fromJSON(this,obj)},Point.prototype.precompute=function precompute(){},Point.prototype._encode=function _encode(){return this.getX().toArray("be",this.curve.p.byteLength())},Point.fromJSON=function fromJSON(curve,obj){return new Point(curve,obj[0],obj[1]||curve.one)},Point.prototype.inspect=function inspect(){return this.isInfinity()?"":""},Point.prototype.isInfinity=function isInfinity(){return 0===this.z.cmpn(0)},Point.prototype.dbl=function dbl(){var a=this.x.redAdd(this.z),aa=a.redSqr(),b=this.x.redSub(this.z),bb=b.redSqr(),c=aa.redSub(bb),nx=aa.redMul(bb),nz=c.redMul(bb.redAdd(this.curve.a24.redMul(c)));return this.curve.point(nx,nz)},Point.prototype.add=function add(){throw new Error("Not supported on Montgomery curve")},Point.prototype.diffAdd=function diffAdd(p,diff){var a=this.x.redAdd(this.z),b=this.x.redSub(this.z),c=p.x.redAdd(p.z),d=p.x.redSub(p.z),da=d.redMul(a),cb=c.redMul(b),nx=diff.z.redMul(da.redAdd(cb).redSqr()),nz=diff.x.redMul(da.redISub(cb).redSqr());return this.curve.point(nx,nz)},Point.prototype.mul=function mul(k){for(var t=k.clone(),a=this,b=this.curve.point(null,null),c=this,bits=[];0!==t.cmpn(0);t.iushrn(1))bits.push(t.andln(1));for(var i=bits.length-1;0<=i;i--)0===bits[i]?(a=a.diffAdd(b,c),b=b.dbl()):(b=a.diffAdd(b,c),a=a.dbl());return b},Point.prototype.mulAdd=function mulAdd(){throw new Error("Not supported on Montgomery curve")},Point.prototype.jumlAdd=function jumlAdd(){throw new Error("Not supported on Montgomery curve")},Point.prototype.eq=function eq(other){return 0===this.getX().cmp(other.getX())},Point.prototype.normalize=function normalize(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},Point.prototype.getX=function getX(){return this.normalize(),this.x.fromRed()}},{"../utils":118,"./base":105,"bn.js":119,inherits:147}],109:[function(require,module,exports){"use strict";function ShortCurve(conf){Base.call(this,"short",conf),this.a=new BN(conf.a,16).toRed(this.red),this.b=new BN(conf.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(conf),this._endoWnafT1=[,,,,],this._endoWnafT2=[,,,,]}function Point(curve,x,y,isRed){Base.BasePoint.call(this,curve,"affine"),null===x&&null===y?(this.x=null,this.y=null,this.inf=!0):(this.x=new BN(x,16),this.y=new BN(y,16),isRed&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),!this.x.red&&(this.x=this.x.toRed(this.curve.red)),!this.y.red&&(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function JPoint(curve,x,y,z){Base.BasePoint.call(this,curve,"jacobian"),null===x&&null===y&&null===z?(this.x=this.curve.one,this.y=this.curve.one,this.z=new BN(0)):(this.x=new BN(x,16),this.y=new BN(y,16),this.z=new BN(z,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var utils=require("../utils"),BN=require("bn.js"),inherits=require("inherits"),Base=require("./base"),assert=utils.assert;inherits(ShortCurve,Base),module.exports=ShortCurve,ShortCurve.prototype._getEndomorphism=function _getEndomorphism(conf){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var beta,lambda;if(conf.beta)beta=new BN(conf.beta,16).toRed(this.red);else{var betas=this._getEndoRoots(this.p);beta=0>betas[0].cmp(betas[1])?betas[0]:betas[1],beta=beta.toRed(this.red)}if(conf.lambda)lambda=new BN(conf.lambda,16);else{var lambdas=this._getEndoRoots(this.n);0===this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta))?lambda=lambdas[0]:(lambda=lambdas[1],assert(0===this.g.mul(lambda).x.cmp(this.g.x.redMul(beta))))}var basis;return basis=conf.basis?conf.basis.map(function(vec){return{a:new BN(vec.a,16),b:new BN(vec.b,16)}}):this._getEndoBasis(lambda),{beta:beta,lambda:lambda,basis:basis}}},ShortCurve.prototype._getEndoRoots=function _getEndoRoots(num){var red=num===this.p?this.red:BN.mont(num),tinv=new BN(2).toRed(red).redInvm(),ntinv=tinv.redNeg(),s=new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv),l1=ntinv.redAdd(s).fromRed(),l2=ntinv.redSub(s).fromRed();return[l1,l2]},ShortCurve.prototype._getEndoBasis=function _getEndoBasis(lambda){for(var aprxSqrt=this.n.ushrn(_Mathfloor(this.n.bitLength()/2)),u=lambda,v=this.n.clone(),x1=new BN(1),y1=new BN(0),x2=new BN(0),y2=new BN(1),i=0,a0,b0,a1,b1,a2,b2,prevR,r,x,q;0!==u.cmpn(0);){q=v.div(u),r=v.sub(q.mul(u)),x=x2.sub(q.mul(x1));var y=y2.sub(q.mul(y1));if(!a1&&0>r.cmp(aprxSqrt))a0=prevR.neg(),b0=x1,a1=r.neg(),b1=x;else if(a1&&2==++i)break;prevR=r,v=u,u=r,x2=x1,x1=x,y2=y1,y1=y}a2=r.neg(),b2=x;var len1=a1.sqr().add(b1.sqr()),len2=a2.sqr().add(b2.sqr());return 0<=len2.cmp(len1)&&(a2=a0,b2=b0),a1.negative&&(a1=a1.neg(),b1=b1.neg()),a2.negative&&(a2=a2.neg(),b2=b2.neg()),[{a:a1,b:b1},{a:a2,b:b2}]},ShortCurve.prototype._endoSplit=function _endoSplit(k){var basis=this.endo.basis,v1=basis[0],v2=basis[1],c1=v2.b.mul(k).divRound(this.n),c2=v1.b.neg().mul(k).divRound(this.n),p1=c1.mul(v1.a),p2=c2.mul(v2.a),q1=c1.mul(v1.b),q2=c2.mul(v2.b),k1=k.sub(p1).sub(p2),k2=q1.add(q2).neg();return{k1:k1,k2:k2}},ShortCurve.prototype.pointFromX=function pointFromX(x,odd){x=new BN(x,16),x.red||(x=x.toRed(this.red));var y2=x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b),y=y2.redSqrt();if(0!==y.redSqr().redSub(y2).cmp(this.zero))throw new Error("invalid point");var isOdd=y.fromRed().isOdd();return(odd&&!isOdd||!odd&&isOdd)&&(y=y.redNeg()),this.point(x,y)},ShortCurve.prototype.validate=function validate(point){if(point.inf)return!0;var x=point.x,y=point.y,ax=this.a.redMul(x),rhs=x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);return 0===y.redSqr().redISub(rhs).cmpn(0)},ShortCurve.prototype._endoWnafMulAdd=function _endoWnafMulAdd(points,coeffs,jacobianResult){for(var npoints=this._endoWnafT1,ncoeffs=this._endoWnafT2,i=0;i":""},Point.prototype.isInfinity=function isInfinity(){return this.inf},Point.prototype.add=function add(p){if(this.inf)return p;if(p.inf)return this;if(this.eq(p))return this.dbl();if(this.neg().eq(p))return this.curve.point(null,null);if(0===this.x.cmp(p.x))return this.curve.point(null,null);var c=this.y.redSub(p.y);0!==c.cmpn(0)&&(c=c.redMul(this.x.redSub(p.x).redInvm()));var nx=c.redSqr().redISub(this.x).redISub(p.x),ny=c.redMul(this.x.redSub(nx)).redISub(this.y);return this.curve.point(nx,ny)},Point.prototype.dbl=function dbl(){if(this.inf)return this;var ys1=this.y.redAdd(this.y);if(0===ys1.cmpn(0))return this.curve.point(null,null);var a=this.curve.a,x2=this.x.redSqr(),dyinv=ys1.redInvm(),c=x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv),nx=c.redSqr().redISub(this.x.redAdd(this.x)),ny=c.redMul(this.x.redSub(nx)).redISub(this.y);return this.curve.point(nx,ny)},Point.prototype.getX=function getX(){return this.x.fromRed()},Point.prototype.getY=function getY(){return this.y.fromRed()},Point.prototype.mul=function mul(k){return k=new BN(k,16),this.isInfinity()?this:this._hasDoubles(k)?this.curve._fixedNafMul(this,k):this.curve.endo?this.curve._endoWnafMulAdd([this],[k]):this.curve._wnafMul(this,k)},Point.prototype.mulAdd=function mulAdd(k1,p2,k2){var points=[this,p2],coeffs=[k1,k2];return this.curve.endo?this.curve._endoWnafMulAdd(points,coeffs):this.curve._wnafMulAdd(1,points,coeffs,2)},Point.prototype.jmulAdd=function jmulAdd(k1,p2,k2){var points=[this,p2],coeffs=[k1,k2];return this.curve.endo?this.curve._endoWnafMulAdd(points,coeffs,!0):this.curve._wnafMulAdd(1,points,coeffs,2,!0)},Point.prototype.eq=function eq(p){return this===p||this.inf===p.inf&&(this.inf||0===this.x.cmp(p.x)&&0===this.y.cmp(p.y))},Point.prototype.neg=function neg(_precompute){if(this.inf)return this;var res=this.curve.point(this.x,this.y.redNeg());if(_precompute&&this.precomputed){var pre=this.precomputed,negate=function(p){return p.neg()};res.precomputed={naf:pre.naf&&{wnd:pre.naf.wnd,points:pre.naf.points.map(negate)},doubles:pre.doubles&&{step:pre.doubles.step,points:pre.doubles.points.map(negate)}}}return res},Point.prototype.toJ=function toJ(){if(this.inf)return this.curve.jpoint(null,null,null);var res=this.curve.jpoint(this.x,this.y,this.curve.one);return res},inherits(JPoint,Base.BasePoint),ShortCurve.prototype.jpoint=function jpoint(x,y,z){return new JPoint(this,x,y,z)},JPoint.prototype.toP=function toP(){if(this.isInfinity())return this.curve.point(null,null);var zinv=this.z.redInvm(),zinv2=zinv.redSqr(),ax=this.x.redMul(zinv2),ay=this.y.redMul(zinv2).redMul(zinv);return this.curve.point(ax,ay)},JPoint.prototype.neg=function neg(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},JPoint.prototype.add=function add(p){if(this.isInfinity())return p;if(p.isInfinity())return this;var pz2=p.z.redSqr(),z2=this.z.redSqr(),u1=this.x.redMul(pz2),u2=p.x.redMul(z2),s1=this.y.redMul(pz2.redMul(p.z)),s2=p.y.redMul(z2.redMul(this.z)),h=u1.redSub(u2),r=s1.redSub(s2);if(0===h.cmpn(0))return 0===r.cmpn(0)?this.dbl():this.curve.jpoint(null,null,null);var h2=h.redSqr(),h3=h2.redMul(h),v=u1.redMul(h2),nx=r.redSqr().redIAdd(h3).redISub(v).redISub(v),ny=r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)),nz=this.z.redMul(p.z).redMul(h);return this.curve.jpoint(nx,ny,nz)},JPoint.prototype.mixedAdd=function mixedAdd(p){if(this.isInfinity())return p.toJ();if(p.isInfinity())return this;var z2=this.z.redSqr(),u1=this.x,u2=p.x.redMul(z2),s1=this.y,s2=p.y.redMul(z2).redMul(this.z),h=u1.redSub(u2),r=s1.redSub(s2);if(0===h.cmpn(0))return 0===r.cmpn(0)?this.dbl():this.curve.jpoint(null,null,null);var h2=h.redSqr(),h3=h2.redMul(h),v=u1.redMul(h2),nx=r.redSqr().redIAdd(h3).redISub(v).redISub(v),ny=r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)),nz=this.z.redMul(h);return this.curve.jpoint(nx,ny,nz)},JPoint.prototype.dblp=function dblp(pow){if(0===pow)return this;if(this.isInfinity())return this;if(!pow)return this.dbl();var i;if(this.curve.zeroA||this.curve.threeA){var r=this;for(i=0;i":""},JPoint.prototype.isInfinity=function isInfinity(){return 0===this.z.cmpn(0)}},{"../utils":118,"./base":105,"bn.js":119,inherits:147}],110:[function(require,module,exports){"use strict";function PresetCurve(options){this.curve="short"===options.type?new curve.short(options):"edwards"===options.type?new curve.edwards(options):new curve.mont(options),this.g=this.curve.g,this.n=this.curve.n,this.hash=options.hash,assert(this.g.validate(),"Invalid curve"),assert(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function defineCurve(name,options){Object.defineProperty(curves,name,{configurable:!0,enumerable:!0,get:function(){var curve=new PresetCurve(options);return Object.defineProperty(curves,name,{configurable:!0,enumerable:!0,value:curve}),curve}})}var curves=exports,hash=require("hash.js"),curve=require("./curve"),utils=require("./utils"),assert=utils.assert;curves.PresetCurve=PresetCurve,defineCurve("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:hash.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),defineCurve("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:hash.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),defineCurve("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:hash.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),defineCurve("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:hash.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),defineCurve("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:hash.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),defineCurve("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:hash.sha256,gRed:!1,g:["9"]}),defineCurve("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:hash.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var pre;try{pre=require("./precomputed/secp256k1")}catch(e){pre=void 0}defineCurve("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:hash.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",pre]})},{"./curve":107,"./precomputed/secp256k1":117,"./utils":118,"hash.js":131}],111:[function(require,module,exports){"use strict";function EC(options){return this instanceof EC?void("string"==typeof options&&(assert(Object.prototype.hasOwnProperty.call(curves,options),"Unknown curve "+options),options=curves[options]),options instanceof curves.PresetCurve&&(options={curve:options}),this.curve=options.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=options.curve.g,this.g.precompute(options.curve.n.bitLength()+1),this.hash=options.hash||options.curve.hash):new EC(options)}var BN=require("bn.js"),HmacDRBG=require("hmac-drbg"),utils=require("../utils"),curves=require("../curves"),rand=require("brorand"),assert=utils.assert,KeyPair=require("./key"),Signature=require("./signature");module.exports=EC,EC.prototype.keyPair=function keyPair(options){return new KeyPair(this,options)},EC.prototype.keyFromPrivate=function keyFromPrivate(priv,enc){return KeyPair.fromPrivate(this,priv,enc)},EC.prototype.keyFromPublic=function keyFromPublic(pub,enc){return KeyPair.fromPublic(this,pub,enc)},EC.prototype.genKeyPair=function genKeyPair(options){options||(options={});for(var drbg=new HmacDRBG({hash:this.hash,pers:options.pers,persEnc:options.persEnc||"utf8",entropy:options.entropy||rand(this.hash.hmacStrength),entropyEnc:options.entropy&&options.entropyEnc||"utf8",nonce:this.n.toArray()}),bytes=this.n.byteLength(),ns2=this.n.sub(new BN(2));;){var priv=new BN(drbg.generate(bytes));if(!(0=k.cmpn(1)||0<=k.cmp(ns1))){var kp=this.g.mul(k);if(!kp.isInfinity()){var kpX=kp.getX(),r=kpX.umod(this.n);if(0!==r.cmpn(0)){var s=k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));if(s=s.umod(this.n),0!==s.cmpn(0)){var recoveryParam=(kp.getY().isOdd()?1:0)|(0===kpX.cmp(r)?0:2);return options.canonical&&0r.cmpn(1)||0<=r.cmp(this.n))return!1;if(0>s.cmpn(1)||0<=s.cmp(this.n))return!1;var sinv=s.invm(this.n),u1=sinv.mul(msg).umod(this.n),u2=sinv.mul(r).umod(this.n),p;return this.curve._maxwellTrick?(p=this.g.jmulAdd(u1,key.getPublic(),u2),!p.isInfinity()&&p.eqXToP(r)):(p=this.g.mulAdd(u1,key.getPublic(),u2),!p.isInfinity()&&0===p.getX().umod(this.n).cmp(r))},EC.prototype.recoverPubKey=function(msg,signature,j,enc){assert((3&j)===j,"The recovery param is more than two bits"),signature=new Signature(signature,enc);var n=this.n,e=new BN(msg),r=signature.r,s=signature.s,isYOdd=1&j,isSecondKey=j>>1;if(0<=r.cmp(this.curve.p.umod(this.curve.n))&&isSecondKey)throw new Error("Unable to find sencond key candinate");r=isSecondKey?this.curve.pointFromX(r.add(this.curve.n),isYOdd):this.curve.pointFromX(r,isYOdd);var rInv=signature.r.invm(n),s1=n.sub(e).mul(rInv).umod(n),s2=s.mul(rInv).umod(n);return this.g.mulAdd(s1,r,s2)},EC.prototype.getKeyRecoveryParam=function(e,signature,Q,enc){if(signature=new Signature(signature,enc),null!==signature.recoveryParam)return signature.recoveryParam;for(var i=0;4>i;i++){var Qprime;try{Qprime=this.recoverPubKey(e,signature,i)}catch(e){continue}if(Qprime.eq(Q))return i}throw new Error("Unable to find valid recovery factor")}},{"../curves":110,"../utils":118,"./key":112,"./signature":113,"bn.js":119,brorand:41,"hmac-drbg":143}],112:[function(require,module,exports){"use strict";function KeyPair(ec,options){this.ec=ec,this.priv=null,this.pub=null,options.priv&&this._importPrivate(options.priv,options.privEnc),options.pub&&this._importPublic(options.pub,options.pubEnc)}var BN=require("bn.js"),utils=require("../utils"),assert=utils.assert;module.exports=KeyPair,KeyPair.fromPublic=function fromPublic(ec,pub,enc){return pub instanceof KeyPair?pub:new KeyPair(ec,{pub:pub,pubEnc:enc})},KeyPair.fromPrivate=function fromPrivate(ec,priv,enc){return priv instanceof KeyPair?priv:new KeyPair(ec,{priv:priv,privEnc:enc})},KeyPair.prototype.validate=function validate(){var pub=this.getPublic();return pub.isInfinity()?{result:!1,reason:"Invalid public key"}:pub.validate()?pub.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},KeyPair.prototype.getPublic=function getPublic(compact,enc){return"string"==typeof compact&&(enc=compact,compact=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),enc?this.pub.encode(enc,compact):this.pub},KeyPair.prototype.getPrivate=function getPrivate(enc){return"hex"===enc?this.priv.toString(16,2):this.priv},KeyPair.prototype._importPrivate=function _importPrivate(key,enc){this.priv=new BN(key,enc||16),this.priv=this.priv.umod(this.ec.curve.n)},KeyPair.prototype._importPublic=function _importPublic(key,enc){return key.x||key.y?("mont"===this.ec.curve.type?assert(key.x,"Need x coordinate"):("short"===this.ec.curve.type||"edwards"===this.ec.curve.type)&&assert(key.x&&key.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(key.x,key.y))):void(this.pub=this.ec.curve.decodePoint(key,enc))},KeyPair.prototype.derive=function derive(pub){return pub.validate()||assert(pub.validate(),"public point not validated"),pub.mul(this.priv).getX()},KeyPair.prototype.sign=function sign(msg,enc,options){return this.ec.sign(msg,this,enc,options)},KeyPair.prototype.verify=function verify(msg,signature){return this.ec.verify(msg,signature,this)},KeyPair.prototype.inspect=function inspect(){return"