exports.clone = 
function (ary) {
  return ary.map(function (e) {
    return Array.isArray(e) ? exports.clone(e) : e
  })
}

var exports = module.exports = function (chars, exports) {

  chars = chars ||
  '!0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~'

  exports = exports || {} 

  exports.randstr   = randstr
  exports.between   = between
  exports.strord    = strord

  exports.lo        = chars[0]
  exports.hi        = chars[chars.length - 1]

  function randstr(l) {
    var str = ''
    while(l--) 
      str += chars[
        Math.floor(
          Math.random() * chars.length 
        )
      ]
    return str
  }

  /*
    SOME EXAMPLE STRINGS, IN ORDER
   
    0
    00001
    0001
    001
    001001
    00101
    0011
    0011001
    001100101
    00110011
    001101
    00111
    01  

    if you never make a string that ends in the lowest char,
    then it is always possible to make a string between two strings.
    this is like how decimals never end in 0. 

    example:

    between('A', 'AB') 

    ... 'AA' will sort between 'A' and 'AB' but then it is impossible
    to make a string inbetween 'A' and 'AA'.
    instead, return 'AAB', then there will be space.

  */

  function between (a, b) {


    var s = '', i = 0, c

     var i = 0
     while (true) {

      var _a = chars.indexOf(a[i])
      var _b = chars.indexOf(b[i])

      if(_a == -1) _a = 0
      if(_b == -1) _b = chars.length - 1

      i++

      if(_a + 1 < _b)
        c = chars[Math.round((_a+_b)/2)]
      else
        c = chars[_a]

      s += c

  /*
      console.log()
      console.log('<<<<', a)
      console.log('====', s)
      console.log('>>>>', b) 
      console.log(a < s && s < b)
  /**/

      if(a < s && s < b && c != '!')
        break;

    }

    return s
  }

  function strord (a, b) {
    return (
      a == b ?  0
    : a <  b ? -1
    :           1
    )
  }

  function concat(to, from) {
    while(from.length)
      to.push(from.shift())
    return to
  }

  return exports
}

exports(null, exports)

@@ -1752,11 +1752,18 @@
  != 
-'!'
+exports.lo
 )%0A  

use injectable low character