diff --git a/dist/lodash.underscore.js b/dist/lodash.underscore.js
index b2b90bf1e..a776b8fb1 100644
--- a/dist/lodash.underscore.js
+++ b/dist/lodash.underscore.js
@@ -12,13 +12,7 @@
/** Used as a safe reference for `undefined` in pre ES5 environments */
var undefined;
- /** Used to generate unique IDs */
- var idCounter = 0;
-
- /** Used by methods to exit iteration */
- var breakIndicator = '__lodash_break_1335248838000__';
-
- /** Used to compose bitmasks for `__bindData__` */
+ /** Used to compose bitmasks for wrapper metadata */
var BIND_FLAG = 1,
BIND_KEY_FLAG = 2,
CURRY_FLAG = 4,
@@ -26,6 +20,18 @@
PARTIAL_FLAG = 16,
PARTIAL_RIGHT_FLAG = 32;
+ /** Used as the semantic version number */
+ var version = '2.4.1';
+
+ /** Used as the property name for wrapper metadata */
+ var expando = '__lodash@' + version + '__';
+
+ /** Used by methods to exit iteration */
+ var breakIndicator = expando + 'breaker__';
+
+ /** Used to generate unique IDs */
+ var idCounter = 0;
+
/** Used to match HTML entities and HTML characters */
var reEscapedHtml = /&(?:amp|lt|gt|quot|#x27);/g,
reUnescapedHtml = /[&<>"']/g;
@@ -35,9 +41,15 @@
reEvaluate = /<%([\s\S]+?)%>/g,
reInterpolate = /<%=([\s\S]+?)%>/g;
+ /** Used to detected named functions */
+ var reFuncName = /^\s*function[ \n\r\t]+\w/;
+
/** Used to ensure capturing order of template delimiters */
var reNoMatch = /($^)/;
+ /** Used to detect functions containing a `this` reference */
+ var reThis = /\bthis\b/;
+
/** Used to match unescaped characters in compiled string literals */
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
@@ -52,6 +64,14 @@
regexpClass = '[object RegExp]',
stringClass = '[object String]';
+ /** Used as the property descriptor for wrapper metadata */
+ var descriptor = {
+ 'configurable': false,
+ 'enumerable': false,
+ 'value': null,
+ 'writable': false
+ };
+
/**
* Used to convert characters to HTML entities:
*
@@ -229,7 +249,19 @@
hasOwnProperty = objectProto.hasOwnProperty,
push = arrayRef.push,
propertyIsEnumerable = objectProto.propertyIsEnumerable,
- splice = arrayRef.splice;
+ splice = arrayRef.splice,
+ unshift = arrayRef.unshift;
+
+ /** Used to set meta data on functions */
+ var defineProperty = (function() {
+ // IE 8 only accepts DOM elements
+ try {
+ var o = {},
+ func = isNative(func = Object.defineProperty) && func,
+ result = func(o, o, o) && func;
+ } catch(e) { }
+ return result;
+ }());
/* Native method shortcuts for methods with the same name as other `lodash` methods */
var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate,
@@ -410,13 +442,13 @@
* sets its meta data.
*
* @private
- * @param {Array} bindData The bind data array.
+ * @param {Array} data The metadata array.
* @returns {Function} Returns the new bound function.
*/
- function baseBind(bindData) {
- var func = bindData[0],
- partialArgs = bindData[2],
- thisArg = bindData[4];
+ function baseBind(data) {
+ var func = data[0],
+ thisArg = data[3],
+ partialArgs = data[4];
function bound() {
// `Function#bind` spec
@@ -438,6 +470,7 @@
}
return func.apply(thisArg, args || arguments);
}
+ setData(bound, data);
return bound;
}
@@ -485,6 +518,28 @@
if (typeof thisArg == 'undefined' || !('prototype' in func)) {
return func;
}
+ var data = func[expando];
+ if (typeof data == 'undefined') {
+ if (support.funcNames) {
+ data = !func.name;
+ }
+ data = data || !support.funcDecomp;
+ if (!data) {
+ var source = fnToString.call(func);
+ if (!support.funcNames) {
+ data = !reFuncName.test(source);
+ }
+ if (!data) {
+ // checks if `func` references the `this` keyword and stores the result
+ data = reThis.test(source);
+ setData(func, data);
+ }
+ }
+ }
+ // exit early if there are no `this` references or `func` is bound
+ if (data === false || (data !== true && data[1] & BIND_FLAG)) {
+ return func;
+ }
switch (argCount) {
case 1: return function(value) {
return func.call(thisArg, value);
@@ -507,16 +562,16 @@
* sets its meta data.
*
* @private
- * @param {Array} bindData The bind data array.
+ * @param {Array} data The metadata array.
* @returns {Function} Returns the new function.
*/
- function baseCreateWrapper(bindData) {
- var func = bindData[0],
- bitmask = bindData[1],
- partialArgs = bindData[2],
- partialRightArgs = bindData[3],
- thisArg = bindData[4],
- arity = bindData[5];
+ function baseCreateWrapper(data) {
+ var func = data[0],
+ bitmask = data[1],
+ arity = data[2],
+ thisArg = data[3],
+ partialArgs = data[4],
+ partialRightArgs = data[5];
var isBind = bitmask & BIND_FLAG,
isBindKey = bitmask & BIND_KEY_FLAG,
@@ -535,10 +590,15 @@
if (partialRightArgs) {
push.apply(args, partialRightArgs);
}
- if (isCurry && args.length < arity) {
+ var argsLength = arguments.length;
+ if (isCurry && argsLength < arity) {
bitmask |= PARTIAL_FLAG;
- bitmask &= ~PARTIAL_RIGHT_FLAG;
- return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~(BIND_FLAG | BIND_KEY_FLAG)), args, null, thisArg, arity]);
+ bitmask &= ~PARTIAL_RIGHT_FLAG
+ if (!isCurryBound) {
+ bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
+ }
+ var newArity = nativeMax(0, arity - argsLength);
+ return baseCreateWrapper([func, bitmask, newArity, thisArg, args]);
}
}
args || (args = arguments);
@@ -552,6 +612,7 @@
}
return func.apply(thisBinding, args);
}
+ setData(bound, data);
return bound;
}
@@ -879,25 +940,23 @@
* @param {Function|string} func The function or method name to reference.
* @param {number} bitmask The bitmask of flags to compose.
* The bitmask may be composed of the following flags:
- * 1 - `_.bind`
- * 2 - `_.bindKey`
- * 4 - `_.curry`
- * 8 - `_.curry` (bound)
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry`
+ * 8 - `_.curry` (bound)
* 16 - `_.partial`
* 32 - `_.partialRight`
+ * @param {number} [arity] The arity of `func`.
+ * @param {*} [thisArg] The `this` binding of `func`.
* @param {Array} [partialArgs] An array of arguments to prepend to those
* provided to the new function.
* @param {Array} [partialRightArgs] An array of arguments to append to those
* provided to the new function.
- * @param {*} [thisArg] The `this` binding of `func`.
- * @param {number} [arity] The arity of `func`.
* @returns {Function} Returns the new function.
*/
- function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
+ function createWrapper(func, bitmask, arity, thisArg, partialArgs, partialRightArgs) {
var isBind = bitmask & BIND_FLAG,
isBindKey = bitmask & BIND_KEY_FLAG,
- isCurry = bitmask & CURRY_FLAG,
- isCurryBound = bitmask & CURRY_BOUND_FLAG,
isPartial = bitmask & PARTIAL_FLAG,
isPartialRight = bitmask & PARTIAL_RIGHT_FLAG;
@@ -905,16 +964,69 @@
throw new TypeError;
}
if (isPartial && !partialArgs.length) {
- bitmask &= ~16;
+ bitmask &= ~PARTIAL_FLAG;
isPartial = partialArgs = false;
}
if (isPartialRight && !partialRightArgs.length) {
- bitmask &= ~32;
+ bitmask &= ~PARTIAL_RIGHT_FLAG;
isPartialRight = partialRightArgs = false;
}
+ var data = !isBindKey && func[expando];
+ if (data && data !== true) {
+ // shallow clone `data`
+ data = slice(data);
+
+ // clone partial left arguments
+ if (data[4]) {
+ data[4] = slice(data[4]);
+ }
+ // clone partial right arguments
+ if (data[5]) {
+ data[5] = slice(data[5]);
+ }
+ // set arity if provided
+ if (typeof arity == 'number') {
+ data[2] = arity;
+ }
+ // set `thisArg` if not previously bound
+ var bound = data[1] & BIND_FLAG;
+ if (isBind && !bound) {
+ data[3] = thisArg;
+ }
+ // set if currying a bound function
+ if (!isBind && bound) {
+ bitmask |= CURRY_BOUND_FLAG;
+ }
+ // append partial left arguments
+ if (isPartial) {
+ if (data[4]) {
+ push.apply(data[4], partialArgs);
+ } else {
+ data[4] = partialArgs;
+ }
+ }
+ // prepend partial right arguments
+ if (isPartialRight) {
+ if (data[5]) {
+ unshift.apply(data[5], partialRightArgs);
+ } else {
+ data[5] = partialRightArgs;
+ }
+ }
+ // merge flags
+ data[1] |= bitmask;
+ return createWrapper.apply(null, data);
+ }
+ if (arity == null) {
+ arity = isBindKey ? 0 : func.length;
+ } else if (arity < 0) {
+ arity = 0;
+ }
// fast path for `_.bind`
- var creater = (bitmask == BIND_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) ? baseBind : baseCreateWrapper;
- return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
+ data = [func, bitmask, arity, thisArg, partialArgs, partialRightArgs];
+ return (bitmask == BIND_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG))
+ ? baseBind(data)
+ : baseCreateWrapper(data);
}
/**
@@ -941,6 +1053,18 @@
return typeof value == 'function' && reNative.test(fnToString.call(value));
}
+ /**
+ * Sets wrapper metadata on a given function.
+ *
+ * @private
+ * @param {Function} func The function to set data on.
+ * @param {Array} value The data array to set.
+ */
+ var setData = !defineProperty ? noop : function(func, value) {
+ descriptor.value = value;
+ defineProperty(func, expando, descriptor);
+ };
+
/*--------------------------------------------------------------------------*/
/**
@@ -3156,9 +3280,14 @@
* // => 'hi fred'
*/
function bind(func, thisArg) {
- return arguments.length > 2
- ? createWrapper(func, BIND_FLAG | PARTIAL_FLAG, slice(arguments, 2), null, thisArg)
- : createWrapper(func, BIND_FLAG, null, null, thisArg);
+ if (arguments.length < 3) {
+ return createWrapper(func, BIND_FLAG, null, thisArg);
+ }
+ var arity = func && (func[expando] ? func[expando][2] : func.length),
+ partialArgs = slice(arguments, 2);
+
+ arity -= partialArgs.length;
+ return createWrapper(func, BIND_FLAG | PARTIAL_FLAG, arity, thisArg, partialArgs);
}
/**
@@ -3194,7 +3323,7 @@
while (++index < length) {
var key = funcs[index];
- object[key] = createWrapper(object[key], BIND_FLAG, null, null, object);
+ object[key] = createWrapper(object[key], BIND_FLAG, null, object);
}
return object;
}
@@ -3542,7 +3671,11 @@
* // => 'hi fred'
*/
function partial(func) {
- return createWrapper(func, PARTIAL_FLAG, slice(arguments, 1));
+ var arity = func && (func[expando] ? func[expando][2] : func.length),
+ partialArgs = slice(arguments, 1);
+
+ arity -= partialArgs.length;
+ return createWrapper(func, PARTIAL_FLAG, arity, null, partialArgs);
}
/**
@@ -3619,7 +3752,7 @@
* // => '
fred, barney, & pebbles
'
*/
function wrap(value, wrapper) {
- return createWrapper(wrapper, PARTIAL_FLAG, [value]);
+ return createWrapper(wrapper, PARTIAL_FLAG, null, null, [value]);
}
/*--------------------------------------------------------------------------*/
@@ -5071,7 +5204,7 @@
* @memberOf _
* @type string
*/
- lodash.VERSION = '2.4.1';
+ lodash.VERSION = version;
// add "Chaining" functions to the wrapper
lodash.prototype.chain = wrapperChain;
diff --git a/dist/lodash.underscore.min.js b/dist/lodash.underscore.min.js
index 6fa1588d2..2d01a6d64 100644
--- a/dist/lodash.underscore.min.js
+++ b/dist/lodash.underscore.min.js
@@ -3,38 +3,40 @@
* Lo-Dash 2.4.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
* Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
*/
-;(function(){function n(n){var r=[];if(!L(n))return r;for(var t in n)Pr.call(n,t)&&r.push(t);return r}function r(n,r){if(L(n))for(var t in n)if(r(n[t],t,n)===ir)break}function t(n,r,t){t=(t||0)-1;for(var e=n?n.length:0;++te||typeof t=="undefined"){t=1;break n}if(te(r,i)&&o.push(i)}return o}function v(n,r){var t=-1,e=n?n.length:0;if(typeof e=="number")for(;++tu(f,c))&&(t&&f.push(c),i.push(a))}return i}function _(n){return function(r,t,e){var u={};t=Z(t,e,3),e=-1;var o=r?r.length:0;if(typeof o=="number")for(;++ee?Xr(0,u+e):e||0;else if(e)return e=O(n,r),u&&n[e]===r?e:-1;
-return t(n,r,e)}function A(n,r,t){if(typeof r!="number"&&null!=r){var e=0,u=-1,o=n?n.length:0;for(r=Z(r,t,3);++ur?r=Xr(u+r,0):r>u&&(r=u),typeof t=="undefined"?t=u:0>t?t=Xr(u+t,0):t>u&&(t=u),u=t-r||0,t=Array(u);++e>>1,t(n[e])u&&(u=t);else r=Z(r,t,3),v(n,function(n,t,o){t=r(n,t,o),t>e&&(e=t,u=n)});return u}function M(n,r,t,e){var u=3>arguments.length;
-r=Z(r,e,4);var o=-1,i=n?n.length:0;if(typeof i=="number")for(u&&i&&(t=n[++o]);++oarguments.length;return r=Z(r,e,4),R(n,function(n,e,o){t=u?(u=false,n):r(t,n,e,o)}),t}function W(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return v(n,function(n){var t;t=++r,t=0+zr(nt()*(t-0+1)),e[r]=e[t],e[t]=n}),e}function z(n,r,t){var e;r=Z(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t=y;m?(i&&(i=clearTimeout(i)),s=a,f=n.apply(c,o)):i||(i=setTimeout(e,y))}return m&&l?l=clearTimeout(l):l||r===g||(l=setTimeout(u,r)),t&&(m=true,f=n.apply(c,o)),!m||l||i||(o=c=null),f}}function V(n,r,t){if(!n)return n;var e=arguments,u=0,o=e.length,i=typeof t;for("number"!=i&&"string"!=i||!e[3]||e[3][t]!==r||(o=2);++u"']/g,hr=/($^)/,yr=/['\n\r\t\u2028\u2029\\]/g,mr="[object Arguments]",_r="[object Array]",br="[object Boolean]",dr="[object Date]",wr="[object Number]",jr="[object Object]",xr="[object RegExp]",Tr="[object String]",Ar={"&":"&","<":"<",">":">",'"':""","'":"'"},Er={"&":"&","<":"<",">":">",""":'"',"'":"'"},Or={"function":true,object:true},Sr={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},kr=Or[typeof window]&&window||this,Nr=Or[typeof exports]&&exports&&!exports.nodeType&&exports,qr=Or[typeof global]&&global;
-!qr||qr.global!==qr&&qr.window!==qr||(kr=qr);var Fr=Or[typeof module]&&module&&!module.nodeType&&module,Br=Fr&&Fr.exports===Nr&&Nr,Rr=Array.prototype,$r=Object.prototype,Ir=kr._,Mr=$r.toString,Dr=RegExp("^"+(Mr+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Wr=Math.ceil,zr=Math.floor,Cr=Function.prototype.toString,Pr=$r.hasOwnProperty,Ur=Rr.push,Vr=$r.propertyIsEnumerable,Gr=Rr.splice,Hr=w(Hr=Object.create)&&Hr,Jr=w(Jr=Array.isArray)&&Jr,Kr=kr.isFinite,Lr=kr.isNaN,Qr=w(Qr=Object.keys)&&Qr,Xr=Math.max,Yr=Math.min,Zr=w(Zr=Date.now)&&Zr,nt=Math.random;
-a.prototype=f.prototype;var rt={};!function(){var n={0:1,length:1};rt.spliceObjects=(Gr.call(n,0,1),!n[0])}(1),f.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Hr||(l=function(){function n(){}return function(r){if(L(r)){n.prototype=r;var t=new n;n.prototype=null}return t||kr.Object()}}()),j(arguments)||(j=function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Pr.call(n,"callee")&&!Vr.call(n,"callee")||false});var tt=_(function(n,r,t){Pr.call(n,t)?n[t]++:n[t]=1
-}),et=_(function(n,r,t){Pr.call(n,t)?n[t].push(r):n[t]=[r]}),ut=_(function(n,r,t){n[t]=r}),ot=$,it=Jr||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Mr.call(n)==_r||false};K(/x/)&&(K=function(n){return typeof n=="function"&&"[object Function]"==Mr.call(n)});var ft=Qr?function(n){return L(n)?Qr(n):[]}:n,at=Zr||function(){return(new Date).getTime()};f.after=function(n,r){if(!K(r))throw new TypeError;return function(){return 1>--n?r.apply(this,arguments):void 0}},f.bind=P,f.bindAll=function(n){for(var r=1i(a,e)){for(r=t;--r;)if(0>i(n[r],e))continue n;a.push(e)}return a},f.invert=function(n){for(var r=-1,t=ft(n),e=t.length,u={};++rr?0:r);++nt?Xr(0,e+t):Yr(t,e-1))+1);e--;)if(n[e]===r)return e;return-1},f.mixin=tr,f.noConflict=function(){return kr._=Ir,this},f.random=function(n,r){return null==n&&null==r&&(r=1),n=+n||0,null==r?(r=n,n=0):r=+r||0,n+zr(nt()*(r-n+1))},f.reduce=M,f.reduceRight=D,f.result=function(n,r){if(null!=n){var t=n[r];
-return K(t)?n[r]():t}},f.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:ft(n).length},f.some=z,f.sortedIndex=O,f.template=function(n,r,t){var e=f,u=e.templateSettings;n=(n||"")+"",t=G({},t,u);var i=0,a="__p+='",u=t.variable;n.replace(RegExp((t.escape||hr).source+"|"+(t.interpolate||hr).source+"|"+(t.evaluate||hr).source+"|$","g"),function(r,t,e,u,f){return a+=n.slice(i,f).replace(yr,o),t&&(a+="'+_.escape("+t+")+'"),u&&(a+="';"+u+";\n__p+='"),e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),i=f+r.length,r
-}),a+="';",u||(u="obj",a="with("+u+"||{}){"+a+"}"),a="function("+u+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+a+"return __p}";try{var c=Function("_","return "+a)(e)}catch(l){throw l.source=a,l}return r?c(r):(c.source=a,c)},f.unescape=function(n){return null==n?"":(n+="",0>n.indexOf(";")?n:n.replace(gr,i))},f.uniqueId=function(n){var r=++or+"";return n?n+r:r},f.all=N,f.any=z,f.detect=F,f.findWhere=function(n,r){return C(n,r,true)},f.foldl=M,f.foldr=D,f.include=k,f.inject=M,f.first=x,f.last=function(n,r,t){var e=0,u=n?n.length:0;
-if(typeof r!="number"&&null!=r){var o=u;for(r=Z(r,t,3);o--&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n?n[u-1]:ur;return e=u-e,E(n,0e||typeof t=="undefined"){t=1;break n}if(te(r,i)&&o.push(i)}return o}function s(n,r){var t=-1,e=n?n.length:0;if(typeof e=="number")for(;++tu(f,l))&&(t&&f.push(l),i.push(a))}return i}function y(n){return function(r,t,e){var u={};t=X(t,e,3),e=-1;var o=r?r.length:0;if(typeof o=="number")for(;++et&&(t=0),s=[n,r,t,e,u,o],r==ur||r==(ur|ar)?f(s):c(s))}function b(){var r=(r=o.indexOf)===j?n:r;return r}function _(n){return typeof n=="function"&&Pr.test(Vr.call(n))
+}function d(n){return n&&typeof n=="object"&&typeof n.length=="number"&&zr.call(n)==_r||false}function w(n,r,t){var e=0,u=n?n.length:0;if(typeof r!="number"&&null!=r){var o=-1;for(r=X(r,t,3);++oe?tt(0,u+e):e||0;else if(e)return e=A(r,t),u&&r[e]===t?e:-1;return n(r,t,e)}function x(n,r,t){if(typeof r!="number"&&null!=r){var e=0,u=-1,o=n?n.length:0;for(r=X(r,t,3);++ur?r=tt(u+r,0):r>u&&(r=u),typeof t=="undefined"?t=u:0>t?t=tt(u+t,0):t>u&&(t=u),u=t-r||0,t=Array(u);++e>>1,t(n[e])u&&(u=t);else r=X(r,t,3),s(n,function(n,t,o){t=r(n,t,o),t>e&&(e=t,u=n)});return u}function $(n,r,t,e){var u=3>arguments.length;r=X(r,e,4);var o=-1,i=n?n.length:0;if(typeof i=="number")for(u&&i&&(t=n[++o]);++oarguments.length;return r=X(r,e,4),F(n,function(n,e,o){t=u?(u=false,n):r(t,n,e,o)}),t}function I(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return s(n,function(n){var t;t=++r,t=0+Ur(ot()*(t-0+1)),e[r]=e[t],e[t]=n}),e}function M(n,r,t){var e;r=X(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++targuments.length)return m(n,ur,null,r);var t=n&&(n[cr]?n[cr][2]:n.length),e=T(arguments,2),t=t-e.length;return m(n,ur|ar,t,r,e)}function P(n,r,t){var e,u,o,i,f,a,l,c=0,p=false,s=true;if(!H(n))throw new TypeError;if(r=tt(0,r)||0,true===t)var g=true,s=false;else J(t)&&(g=t.leading,p="maxWait"in t&&(tt(r,t.maxWait)||0),s="trailing"in t?t.trailing:s);var v=function(){var t=r-(yt()-i);0=y;m?(u&&(u=clearTimeout(u)),c=i,o=n.apply(f,e)):u||(u=setTimeout(h,y))}return m&&a?a=clearTimeout(a):a||r===p||(a=setTimeout(v,r)),t&&(m=true,o=n.apply(f,e)),!m||a||u||(e=f=null),o}}function C(n,r,t){if(!n)return n;var e=arguments,u=0,o=e.length,i=typeof t;for("number"!=i&&"string"!=i||!e[3]||e[3][t]!==r||(o=2);++u"']/g,hr=/^\s*function[ \n\r\t]+\w/,yr=/($^)/,mr=/\bthis\b/,br=/['\n\r\t\u2028\u2029\\]/g,_r="[object Arguments]",dr="[object Array]",wr="[object Boolean]",jr="[object Date]",xr="[object Number]",Tr="[object Object]",Ar="[object RegExp]",Er="[object String]",Or={configurable:false,enumerable:false,value:null,writable:false},Sr={"&":"&","<":"<",">":">",'"':""","'":"'"},Nr={"&":"&","<":"<",">":">",""":'"',"'":"'"},kr={"function":true,object:true},qr={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},Fr=kr[typeof window]&&window||this,Br=kr[typeof exports]&&exports&&!exports.nodeType&&exports,Rr=kr[typeof global]&&global;
+!Rr||Rr.global!==Rr&&Rr.window!==Rr||(Fr=Rr);var $r=kr[typeof module]&&module&&!module.nodeType&&module,Dr=$r&&$r.exports===Br&&Br,Ir=Array.prototype,Mr=Object.prototype,Wr=Fr._,zr=Mr.toString,Pr=RegExp("^"+(zr+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Cr=Math.ceil,Ur=Math.floor,Vr=Function.prototype.toString,Gr=Mr.hasOwnProperty,Hr=Ir.push,Jr=Mr.propertyIsEnumerable,Kr=Ir.splice,Lr=Ir.unshift,Qr=function(){try{var n={},r=_(r=Object.defineProperty)&&r,t=r(n,n,n)&&r
+}catch(e){}return t}(),Xr=_(Xr=Object.create)&&Xr,Yr=_(Yr=Array.isArray)&&Yr,Zr=Fr.isFinite,nt=Fr.isNaN,rt=_(rt=Object.keys)&&rt,tt=Math.max,et=Math.min,ut=_(ut=Date.now)&&ut,ot=Math.random;i.prototype=o.prototype;var it={};!function(){var n={0:1,length:1};it.spliceObjects=(Kr.call(n,0,1),!n[0])}(1),o.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Xr||(a=function(){function n(){}return function(r){if(J(r)){n.prototype=r;var t=new n;
+n.prototype=null}return t||Fr.Object()}}());var ft=Qr?function(n,r){Or.value=r,Qr(n,cr,Or)}:rr;d(arguments)||(d=function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Gr.call(n,"callee")&&!Jr.call(n,"callee")||false});var at=function(n,r){if(!J(n))return n;for(var t in n)if(r(n[t],t,n)===pr)break;return n},lt=function(n){var r=[];if(!J(n))return r;for(var t in n)Gr.call(n,t)&&r.push(t);return r},ct=y(function(n,r,t){Gr.call(n,t)?n[t]++:n[t]=1}),pt=y(function(n,r,t){Gr.call(n,t)?n[t].push(r):n[t]=[r]
+}),st=y(function(n,r,t){n[t]=r}),gt=B,vt=Yr||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&zr.call(n)==dr||false};H(/x/)&&(H=function(n){return typeof n=="function"&&"[object Function]"==zr.call(n)});var ht=rt?function(n){return J(n)?rt(n):[]}:lt,yt=ut||function(){return(new Date).getTime()};o.after=function(n,r){if(!H(r))throw new TypeError;return function(){return 1>--n?r.apply(this,arguments):void 0}},o.bind=z,o.bindAll=function(n){for(var r=1i(a,e)){for(r=t;--r;)if(0>i(n[r],e))continue n;a.push(e)}return a},o.invert=function(n){for(var r=-1,t=ht(n),e=t.length,u={};++rr?0:r);++nt?tt(0,e+t):et(t,e-1))+1);e--;)if(n[e]===r)return e;return-1},o.mixin=nr,o.noConflict=function(){return Fr._=Wr,this},o.random=function(n,r){return null==n&&null==r&&(r=1),n=+n||0,null==r?(r=n,n=0):r=+r||0,n+Ur(ot()*(r-n+1))},o.reduce=$,o.reduceRight=D,o.result=function(n,r){if(null!=n){var t=n[r];
+return H(t)?n[r]():t}},o.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:ht(n).length},o.some=M,o.sortedIndex=A,o.template=function(n,r,t){var u=o,i=u.templateSettings;n=(n||"")+"",t=U({},t,i);var f=0,a="__p+='",i=t.variable;n.replace(RegExp((t.escape||yr).source+"|"+(t.interpolate||yr).source+"|"+(t.evaluate||yr).source+"|$","g"),function(r,t,u,o,i){return a+=n.slice(f,i).replace(br,e),t&&(a+="'+_.escape("+t+")+'"),o&&(a+="';"+o+";\n__p+='"),u&&(a+="'+((__t=("+u+"))==null?'':__t)+'"),f=i+r.length,r
+}),a+="';",i||(i="obj",a="with("+i+"||{}){"+a+"}"),a="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+a+"return __p}";try{var l=Function("_","return "+a)(u)}catch(c){throw c.source=a,c}return r?l(r):(l.source=a,l)},o.unescape=function(n){return null==n?"":(n+="",0>n.indexOf(";")?n:n.replace(gr,u))},o.uniqueId=function(n){var r=++sr+"";return n?n+r:r},o.all=S,o.any=M,o.detect=k,o.findWhere=function(n,r){return W(n,r,true)},o.foldl=$,o.foldr=D,o.include=O,o.inject=$,o.first=w,o.last=function(n,r,t){var e=0,u=n?n.length:0;
+if(typeof r!="number"&&null!=r){var o=u;for(r=X(r,t,3);o--&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n?n[u-1]:er;return e=u-e,T(n,0