|  | var Buffer = require('buffer').Buffer | 
						
						
							|  | 
 | 
						
						
							|  | module.exports = function (buf) { | 
						
						
							|  | 	// If the buffer is backed by a Uint8Array, a faster version will work | 
						
						
							|  | 	if (buf instanceof Uint8Array) { | 
						
						
							|  | 		// If the buffer isn't a subarray, return the underlying ArrayBuffer | 
						
						
							|  | 		if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { | 
						
						
							|  | 			return buf.buffer | 
						
						
							|  | 		} else if (typeof buf.buffer.slice === 'function') { | 
						
						
							|  | 			// Otherwise we need to get a proper copy | 
						
						
							|  | 			return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) | 
						
						
							|  | 		} | 
						
						
							|  | 	} | 
						
						
							|  | 
 | 
						
						
							|  | 	if (Buffer.isBuffer(buf)) { | 
						
						
							|  | 		// This is the slow version that will work with any Buffer | 
						
						
							|  | 		// implementation (even in old browsers) | 
						
						
							|  | 		var arrayCopy = new Uint8Array(buf.length) | 
						
						
							|  | 		var len = buf.length | 
						
						
							|  | 		for (var i = 0; i < len; i++) { | 
						
						
							|  | 			arrayCopy[i] = buf[i] | 
						
						
							|  | 		} | 
						
						
							|  | 		return arrayCopy.buffer | 
						
						
							|  | 	} else { | 
						
						
							|  | 		throw new Error('Argument must be a Buffer') | 
						
						
							|  | 	} | 
						
						
							|  | }
 |