| /*! | 
|   * prr | 
|   * (c) 2013 Rod Vagg <rod@vagg.org> | 
|   * https://github.com/rvagg/prr | 
|   * License: MIT | 
|   */ | 
|   | 
| (function (name, context, definition) { | 
|   if (typeof module != 'undefined' && module.exports) | 
|     module.exports = definition() | 
|   else | 
|     context[name] = definition() | 
| })('prr', this, function() { | 
|   | 
|   var setProperty = typeof Object.defineProperty == 'function' | 
|       ? function (obj, key, options) { | 
|           Object.defineProperty(obj, key, options) | 
|           return obj | 
|         } | 
|       : function (obj, key, options) { // < es5 | 
|           obj[key] = options.value | 
|           return obj | 
|         } | 
|   | 
|     , makeOptions = function (value, options) { | 
|         var oo = typeof options == 'object' | 
|           , os = !oo && typeof options == 'string' | 
|           , op = function (p) { | 
|               return oo | 
|                 ? !!options[p] | 
|                 : os | 
|                   ? options.indexOf(p[0]) > -1 | 
|                   : false | 
|             } | 
|   | 
|         return { | 
|             enumerable   : op('enumerable') | 
|           , configurable : op('configurable') | 
|           , writable     : op('writable') | 
|           , value        : value | 
|         } | 
|       } | 
|   | 
|     , prr = function (obj, key, value, options) { | 
|         var k | 
|   | 
|         options = makeOptions(value, options) | 
|   | 
|         if (typeof key == 'object') { | 
|           for (k in key) { | 
|             if (Object.hasOwnProperty.call(key, k)) { | 
|               options.value = key[k] | 
|               setProperty(obj, k, options) | 
|             } | 
|           } | 
|           return obj | 
|         } | 
|   | 
|         return setProperty(obj, key, options) | 
|       } | 
|   | 
|   return prr | 
| }) |