| 'use strict'; | 
| var $ = require('../internals/export'); | 
| var uncurryThis = require('../internals/function-uncurry-this-clause'); | 
| var fails = require('../internals/fails'); | 
| var ArrayBufferModule = require('../internals/array-buffer'); | 
| var anObject = require('../internals/an-object'); | 
| var toAbsoluteIndex = require('../internals/to-absolute-index'); | 
| var toLength = require('../internals/to-length'); | 
|   | 
| var ArrayBuffer = ArrayBufferModule.ArrayBuffer; | 
| var DataView = ArrayBufferModule.DataView; | 
| var DataViewPrototype = DataView.prototype; | 
| var nativeArrayBufferSlice = uncurryThis(ArrayBuffer.prototype.slice); | 
| var getUint8 = uncurryThis(DataViewPrototype.getUint8); | 
| var setUint8 = uncurryThis(DataViewPrototype.setUint8); | 
|   | 
| var INCORRECT_SLICE = fails(function () { | 
|   return !new ArrayBuffer(2).slice(1, undefined).byteLength; | 
| }); | 
|   | 
| // `ArrayBuffer.prototype.slice` method | 
| // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice | 
| $({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, { | 
|   slice: function slice(start, end) { | 
|     if (nativeArrayBufferSlice && end === undefined) { | 
|       return nativeArrayBufferSlice(anObject(this), start); // FF fix | 
|     } | 
|     var length = anObject(this).byteLength; | 
|     var first = toAbsoluteIndex(start, length); | 
|     var fin = toAbsoluteIndex(end === undefined ? length : end, length); | 
|     var result = new ArrayBuffer(toLength(fin - first)); | 
|     var viewSource = new DataView(this); | 
|     var viewTarget = new DataView(result); | 
|     var index = 0; | 
|     while (first < fin) { | 
|       setUint8(viewTarget, index++, getUint8(viewSource, first++)); | 
|     } return result; | 
|   } | 
| }); |