text: 
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;
  
  var MAX_ARRAY_LENGTH = 4294967295;
  
  var symbolTag = '[object Symbol]';
  
  var reTrim = /^\s+|\s+$/g;
  
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
  
  var reIsBinary = /^0b[01]+$/i;
  
  var reIsOctal = /^0o[0-7]+$/i;
  
  var freeParseInt = parseInt;
  
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);
  
    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }
  
  var objectProto = Object.prototype;
  
  var objectToString = objectProto.toString;
  
  var nativeMin = Math.min;
  
  function isObject(value) {
    var type = typeof value;
    return !!value && (type == 'object' || type == 'function');
  }
  
  function isObjectLike(value) {
    return !!value && typeof value == 'object';
  }
  
  function isSymbol(value) {
    return typeof value == 'symbol' || isObjectLike(value) && objectToString.call(value) == symbolTag;
  }
  
  function toFinite(value) {
    if (!value) {
      return value === 0 ? value : 0;
    }
    value = toNumber(value);
    if (value === INFINITY || value === -INFINITY) {
      var sign = value < 0 ? -1 : 1;
      return sign * MAX_INTEGER;
    }
    return value === value ? value : 0;
  }
  
  function toInteger(value) {
    var result = toFinite(value),
        remainder = result % 1;
  
    return result === result ? remainder ? result - remainder : result : 0;
  }
  
  function toNumber(value) {
    if (typeof value == 'number') {
      return value;
    }
    if (isSymbol(value)) {
      return NAN;
    }
    if (isObject(value)) {
      var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
      value = isObject(other) ? other + '' : other;
    }
    if (typeof value != 'string') {
      return value === 0 ? value : +value;
    }
    value = value.replace(reTrim, '');
    var isBinary = reIsBinary.test(value);
    return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
  }
  
  function identity(value) {
    return value;
  }
  
  function times(n, iteratee) {
    n = toInteger(n);
    if (n < 1 || n > MAX_SAFE_INTEGER) {
      return [];
    }
    var index = MAX_ARRAY_LENGTH,
        length = nativeMin(n, MAX_ARRAY_LENGTH);
  
    iteratee = typeof iteratee == 'function' ? iteratee : identity;
    n -= MAX_ARRAY_LENGTH;
  
    var result = baseTimes(length, iteratee);
    while (++index < n) {
      iteratee(index);
    }
    return result;
  }
  
  module.exports = times;