| 12345678910111213141516171819202122232425262728293031323334 | 
							- module.exports = debounce
 
- function debounce (fn, delay, at_start, guarantee) {
 
-   var timeout
 
-   var args
 
-   var self
 
-   return function debounced () {
 
-     self = this
 
-     args = Array.prototype.slice.call(arguments)
 
-     if (timeout && (at_start || guarantee)) {
 
-       return
 
-     } else if (!at_start) {
 
-       clear()
 
-       timeout = setTimeout(run, delay)
 
-       return timeout
 
-     }
 
-     timeout = setTimeout(clear, delay)
 
-     fn.apply(self, args)
 
-     function run () {
 
-       clear()
 
-       fn.apply(self, args)
 
-     }
 
-     function clear () {
 
-       clearTimeout(timeout)
 
-       timeout = null
 
-     }
 
-   }
 
- }
 
 
  |