function ReadStream(opts) {
    assert.object(opts);
    if (opts.encoding !== null)
        assert.optionalString(opts.encoding, 'options.encoding');
    assert.optionalNumber(opts.end, 'options.end');
    assert.optionalNumber(opts.fd, 'options.fd');
    assert.object(opts.fs, 'options.fs');
    assert.optionalNumber(opts.start, 'options.start');
    assert.optionalBool(opts.autoClose, 'options.autoClose');

    stream.Readable.call(this, opts);

    this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;
    this.encoding = opts.encoding || null;

    this._fd = opts.fd;
    this._fs = opts.fs;
    this._end = opts.end || Infinity;
    this._start = opts.start || 0;

    this._pos = this._start;
    this._range = this._end - this._start;

    if (this._fd) {
        setImmediate(this.emit.bind(this, 'open', this._fd));
    } else {
        this._opening = true;
    }
}
function ReadStream(opts) {
    assert.object(opts);
    if (opts.encoding !== null)
        assert.optionalString(opts.encoding, 'options.encoding');
    assert.optionalNumber(opts.end, 'options.end');
    assert.optionalNumber(opts.fd, 'options.fd');
    assert.object(opts.fs, 'options.fs');
    assert.optionalNumber(opts.start, 'options.start');
    assert.optionalBool(opts.autoClose, 'options.autoClose');

    stream.Readable.call(this, opts);

    this.autoClose = opts.autoClose === undefined ? true : opts.autoClose;
    this.encoding = opts.encoding || null;

    this._fd = opts.fd;
    this._fs = opts.fs;
    this._end = opts.end || Infinity;
    this._start = opts.start || 0;

    this._pos = this._start;
    this._range = this._end - this._start;

    if (this._fd) {
        setImmediate(this.emit.bind(this, 'open', this._fd));
    } else {
        this._opening = true;
    }
}
function ReadStream ( opts ) { assert . object ( opts ) ; if ( opts . encoding !== null ) assert . optionalString ( opts . encoding , 'options.encoding' ) ; assert . optionalNumber ( opts . end , 'options.end' ) ; assert . optionalNumber ( opts . fd , 'options.fd' ) ; assert . object ( opts . fs , 'options.fs' ) ; assert . optionalNumber ( opts . start , 'options.start' ) ; assert . optionalBool ( opts . autoClose , 'options.autoClose' ) ; stream . Readable . call ( this , opts ) ; this . autoClose = opts . autoClose === undefined ? true : opts . autoClose ; this . encoding = opts . encoding || null ; this . _fd = opts . fd ; this . _fs = opts . fs ; this . _end = opts . end || Infinity ; this . _start = opts . start || 0 ; this . _pos = this . _start ; this . _range = this . _end - this . _start ; if ( this . _fd ) { setImmediate ( this . emit . bind ( this , 'open' , this . _fd ) ) ; } else { this . _opening = true ; } }
/--- Streams
/ --- Streams