From a1545c60d684c110e4399e0321a160c391d0735a Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Thu, 8 Nov 2012 01:05:34 -0800 Subject: [PATCH] Optimize `_.every`, `_.find`, and `_.some`. Former-commit-id: 37ace9b92bb2b9875093b73e460f01df9d9c211a --- build.js | 6 ++--- lodash.js | 43 ++++++++++++++++++++++++++------ lodash.min.js | 53 ++++++++++++++++++++-------------------- lodash.underscore.min.js | 43 ++++++++++++++++---------------- 4 files changed, 87 insertions(+), 58 deletions(-) diff --git a/build.js b/build.js index c8da28883..a8db56480 100755 --- a/build.js +++ b/build.js @@ -78,10 +78,10 @@ 'delay': [], 'difference': ['indexOf'], 'escape': [], - 'every': ['forEach'], + 'every': ['forEach', 'isArray'], 'extend': ['isArguments'], 'filter': ['forEach'], - 'find': ['some'], + 'find': ['forEach'], 'first': [], 'flatten': ['isArray'], 'forEach': ['identity', 'isString'], @@ -140,7 +140,7 @@ 'result': ['isFunction'], 'shuffle': ['forEach'], 'size': ['keys'], - 'some': ['forEach'], + 'some': ['forEach', 'isArray'], 'sortBy': ['forEach'], 'sortedIndex': ['identity'], 'tap': ['mixin'], diff --git a/lodash.js b/lodash.js index 29d3f0f6a..8ee9a9c10 100644 --- a/lodash.js +++ b/lodash.js @@ -1907,9 +1907,21 @@ function every(collection, callback, thisArg) { var result = true; callback = createCallback(callback, thisArg); - forEach(collection, function(value, index, collection) { - return (result = !!callback(value, index, collection)); - }); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + if (!(result = !!callback(collection[index], index, collection))) { + break; + } + } + } else { + forEach(collection, function(value, index, collection) { + return (result = !!callback(value, index, collection)); + }); + } return result; } @@ -1965,8 +1977,11 @@ function find(collection, callback, thisArg) { var result; callback = createCallback(callback, thisArg); - some(collection, function(value, index, collection) { - return callback(value, index, collection) && (result = value, true); + forEach(collection, function(value, index, collection) { + if (callback(value, index, collection)) { + result = value; + return false; + } }); return result; } @@ -2397,9 +2412,21 @@ function some(collection, callback, thisArg) { var result; callback = createCallback(callback, thisArg); - forEach(collection, function(value, index, collection) { - return !(result = callback(value, index, collection)); - }); + + if (isArray(collection)) { + var index = -1, + length = collection.length; + + while (++index < length) { + if (result = callback(collection[index], index, collection)) { + break; + } + } + } else { + forEach(collection, function(value, index, collection) { + return !(result = callback(value, index, collection)); + }); + } return !!result; } diff --git a/lodash.min.js b/lodash.min.js index 6c5080101..ede8d5ac9 100644 --- a/lodash.min.js +++ b/lodash.min.js @@ -11,29 +11,30 @@ xt.call(e);if(!Gt[u]||Wt&&m(e))return e;var a=u==Dt,n=a||(u==jt?cn(e):n)}if(!n|| {};return sn(e,function(e,n){t[e]=n}),t}function S(e,t,s,o){if(e===t)return 0!==e||1/e==1/t;if(e==r||t==r)return e===t;var u=xt.call(e);if(u!=xt.call(t))return i;switch(u){case Pt:case Ht:return+e==+t;case Bt:return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case Ft:case It:return e==t+""}var a=u==Dt||u==_t;if(Wt&&!a&&(a=m(e))&&!m(t))return i;if(!a){if(e.__wrapped__||t.__wrapped__)return S(e.__wrapped__||e,t.__wrapped__||t);if(u!=jt||$t&&("function"!=typeof e.toString&&"string"==typeof (e+"")||"function"!=typeof t.toString&&"string"==typeof (t+"")))return i;var u=e.constructor,f=t.constructor;if(u!=f&&(!x(u)||!(u instanceof u&&x(f)&&f instanceof f)))return i}s||(s=[]),o||(o=[]);for(u=s.length;u--;)if(s[u]==e)return o[u]==t;var u=-1,f=n,l=0;s.push(e),o.push(t);if(a){l=e.length;if(f=l==t.length)for(;l--&&(f=S(e[l],t[l],s,o)););return f}for(var c in e)if(bt.call(e,c)&&(l++,!bt.call(t,c)||!S(e[c],t[c],s,o)))return i;for(c in t)if(bt.call(t,c)&&!(l--))return i;if(qt)for(;7>++u;)if(c=dt[u],bt.call(e,c)&&(!bt.call (t,c)||!S(e[c],t[c],s,o)))return i;return n}function x(e){return"function"==typeof e}function T(e){return e?Yt[typeof e]:i}function N(e){return xt.call(e)==It}function C(e,t,n){var i=arguments,s=0,o=2,u=i[3],a=i[4];n!==Y&&(u=[],a=[],o=i.length);for(;++sn?At(0,i+n):n)||0;return"number"==typeof i?-1<(N(e)?e.indexOf(t,n):q(e,t,n)):j(e,function(e){return++r>=n&&e===t})}function A(e,t,r){var i=n,t=l(t,r);return pn(e,function(e,n,r){return i=!!t(e,n,r)}),i}function O(e,t,n){var r=[],t=l(t,n);return pn(e,function(e,n,i){t(e,n,i)&&r.push(e)}),r}function M(e,t,r){var i,t=l(t,r);return j(e,function(e,r,s){return t(e,r,s)&&(i=e,n)}),i}function _(e,t,n){var r=-1,i=e?e.length:0,s=Array -("number"==typeof i?i:0),t=l(t,n);if(ln(e))for(;++rr&&(r=n,o=e)});else for(;++io&&(o=e[i]);return o}function P(e,t){var n=[];return pn(e,function(e){n.push(e[t])}),n}function H(e,t,n,r){var s=3>arguments.length,t=l(t,r);return pn(e,function(e,r,o){n=s?(s=i,e):t(n,e,r,o)}),n}function B(e,t,n,r -){var s=e,o=e?e.length:0,u=3>arguments.length;if("number"!=typeof o)var a=hn(e),o=a.length;else Vt&&N(e)&&(s=e.split(""));return pn(e,function(e,f,l){f=a?a[--o]:--o,n=u?(u=i,s[f]):t.call(r,n,s[f],f,l)}),n}function j(e,t,n){var r,t=l(t,n);return pn(e,function(e,n,i){return!(r=t(e,n,i))}),!!r}function F(e,t,n){if(e)return t==r||n?e[0]:St.call(e,0,t)}function I(e,t){for(var n=-1,r=e?e.length:0,i=[];++nn?At(0,i+n):n||0)-1;else if(n)return r=U(e,t),e[r]===t?r:-1;for(;++r>>1,n(e[r])q(a,h))(n||f)&&a.push(h),u.push(r)}return u}function W(e,t){return Kt||Tt&&2|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/,nt=/&(?:amp|lt|gt|quot|#x27);/g,rt=/\b__p\+='';/g,it=/\b(__p\+=)''\+/g,st=/(__e\(.*?\)|\b__t\))\+'';/g,ot=/\w*$/,ut=/(?:__e|__t=)\(\s*(?![\d\s"']|this\.)/g,at=RegExp("^"+(Q.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),ft=/\$\{((?:(?=\\?)\\?[\s\S])*?)}/g,lt=/<%=([\s\S]+?)%>/g,ct=/($^)/,ht=/[&<>"']/g,pt=/['\n\r\t\u2028\u2029\\]/g -,dt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),vt=Math.ceil,mt=K.concat,gt=Math.floor,yt=at.test(yt=Object.getPrototypeOf)&&yt,bt=Q.hasOwnProperty,wt=K.push,Et=Q.propertyIsEnumerable,St=K.slice,xt=Q.toString,Tt=at.test(Tt=St.bind)&&Tt,Nt=at.test(Nt=Array.isArray)&&Nt,Ct=e.isFinite,kt=e.isNaN,Lt=at.test(Lt=Object.keys)&&Lt,At=Math.max,Ot=Math.min,Mt=Math.random,_t="[object Arguments]",Dt="[object Array]",Pt="[object Boolean]",Ht="[object Date]" -,Bt="[object Number]",jt="[object Object]",Ft="[object RegExp]",It="[object String]",qt,Rt,Ut=(Ut={0:1,length:1},K.splice.call(Ut,0,1),Ut[0]),zt=n;(function(){function e(){this.x=1}var t=[];e.prototype={valueOf:1,y:1};for(var n in new e)t.push(n);for(n in arguments)zt=!n;qt=!/valueOf/.test(t),Rt="x"!=t[0]})(1);var Wt=!m(arguments),Xt="x"!=St.call("x")[0],Vt="xx"!="x"[0]+Object("x")[0];try{var $t=("[object Object]",xt.call(e.document||0)==jt)}catch(Jt){}var Kt=Tt&&/\n|Opera/.test(Tt+xt.call(e.opera -)),Qt=Lt&&/^.+$|true/.test(Lt+!!e.attachEvent),Gt={};Gt[_t]=Gt["[object Function]"]=i,Gt[Dt]=Gt[Pt]=Gt[Ht]=Gt[Bt]=Gt[jt]=Gt[Ft]=Gt[It]=n;var Yt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i},Zt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};s.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:lt,variable:""};var en={a:"d,c,u",k:"c=e(c,u)",b:"if(c(v,h,d)===false)return s",g:"if(c(v,h,d)===false)return s"},tn={l:i -,a:"n",k:"for(var a=1,b=arguments.length;a":">",'"':""","'":"'"},un=E(on),an=c(tn,{g:"if(s[h]==null)"+tn.g}),fn=c(tn),ln=Nt||function(e){return xt.call(e)==Dt};x(/x/)&&(x=function(e){return"[object Function]"==xt.call(e)});var cn=yt?function(e){if(!e||"object"!=typeof e)return i;var t=e.valueOf,n="function"==typeof -t&&(n=yt(t))&&yt(n);return n?e==n||yt(e)==n&&!m(e):g(e)}:g,hn=Lt?function(e){return"function"==typeof e&&Et.call(e,"prototype")?y(e):T(e)?Lt(e):[]}:y,pn=c(en);s.VERSION="0.9.1",s.after=function(e,t){return 1>e?t():function(){if(1>--e)return t.apply(this,arguments)}},s.bind=W,s.bindAll=function(e){for(var t=arguments,n=1q(i,e)){for(var s=n;--s;)if(!(r[s]||(r[s]=o(t[s])))(e))return;i.push(e)}}),i},s.invert=E,s.invoke=function(e,t){var n=St.call(arguments -,2),r="function"==typeof t,i=[];return pn(e,function(e){i.push((r?t:e[t]).apply(e,n))}),i},s.isArguments=m,s.isArray=ln,s.isBoolean=function(e){return e===n||e===i||xt.call(e)==Pt},s.isDate=function(e){return xt.call(e)==Ht},s.isElement=function(e){return e?1===e.nodeType:i},s.isEmpty=function(e){var t=n;if(!e)return t;var r=xt.call(e),s=e.length;return r==Dt||r==It||r==_t||Wt&&m(e)||r==jt&&"number"==typeof s&&x(e.splice)?!s:(sn(e,function(){return t=i}),t)},s.isEqual=S,s.isFinite=function(e){return Ct -(e)&&!kt(parseFloat(e))},s.isFunction=x,s.isNaN=function(e){return xt.call(e)==Bt&&e!=+e},s.isNull=function(e){return e===r},s.isNumber=function(e){return xt.call(e)==Bt},s.isObject=T,s.isPlainObject=cn,s.isRegExp=function(e){return xt.call(e)==Ft},s.isString=N,s.isUndefined=function(e){return e===t},s.keys=hn,s.last=function(e,t,n){if(e){var i=e.length;return t==r||n?e[i-1]:St.call(e,-t||i)}},s.lastIndexOf=function(e,t,n){var r=e?e.length:0;for("number"==typeof n&&(r=(0>n?At(0,r+n):Ot(n,r-1))+1) -;r--;)if(e[r]===t)return r;return-1},s.lateBind=function(e,t){return f(t,e,St.call(arguments,2))},s.map=_,s.max=D,s.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments[0];return bt.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},s.merge=C,s.min=function(e,t,n){var r=Infinity,i=-1,s=e?e.length:0,o=r;if(t||!ln(e))t=!t&&N(e)?u:l(t,n),pn(e,function(e,n,i){n=t(e,n,i),nq(s,n,1))i[n]=e}),i},s.once=function(e){var t,s=i;return function(){return s?t:(s=n,t=e.apply(this,arguments),e=r,t)}},s.pairs=function(e){var t=[];return sn(e,function(e,n){t.push([n,e])}),t},s.partial=function(e){return f(e,St.call -(arguments,1))},s.pick=function(e,t,n){var r={};if("function"!=typeof t)for(var i=0,s=mt.apply(K,arguments),o=s.length;++i=f?(clearTimeout(u),a=r,s=e.apply(o,i)):u||(u=setTimeout(n,f)),s}},s.times=function(e,t,n){for(var e=+e||0,r=-1,i=Array(e);++rn?At(0,i+n):n)||0;return"number"==typeof i?-1<(N(e)?e.indexOf(t,n):q(e,t,n)):j(e,function(e){return++r>=n&&e===t})}function A(e,t,r){var i=n,t=l(t,r);if(ln(e))for(var r=-1,s=e.length;++rr&&(r=n,o=e)});else for(;++io&&(o=e[i]);return o}function P(e,t){var n=[];return pn(e,function(e){n.push(e[t])}),n}function H(e,t,n,r){var s=3>arguments.length,t=l(t,r);return pn +(e,function(e,r,o){n=s?(s=i,e):t(n,e,r,o)}),n}function B(e,t,n,r){var s=e,o=e?e.length:0,u=3>arguments.length;if("number"!=typeof o)var a=hn(e),o=a.length;else Vt&&N(e)&&(s=e.split(""));return pn(e,function(e,f,l){f=a?a[--o]:--o,n=u?(u=i,s[f]):t.call(r,n,s[f],f,l)}),n}function j(e,t,n){var r,t=l(t,n);if(ln(e))for(var n=-1,i=e.length;++nn?At(0,i+n):n||0)-1;else if(n)return r=U(e,t),e[r]===t?r:-1;for(;++r>>1,n(e[r])q(a,h))(n||f)&&a.push(h),u.push(r)}return u}function W(e,t){return Kt||Tt&&2|{(\/]|\[\D|\b(?:delete|in|instanceof|new|typeof|void)\b/,nt=/&(?:amp|lt|gt|quot|#x27);/g,rt=/\b__p\+='';/g,it=/\b(__p\+=)''\+/g,st=/(__e\(.*?\)|\b__t\))\+'';/g,ot=/\w*$/,ut=/(?:__e|__t=)\(\s*(?![\d\s"']|this\.)/g,at=RegExp("^"+(Q.valueOf+"").replace(/[.*+?^=!:${}()|[\]\/\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g +,".+?")+"$"),ft=/\$\{((?:(?=\\?)\\?[\s\S])*?)}/g,lt=/<%=([\s\S]+?)%>/g,ct=/($^)/,ht=/[&<>"']/g,pt=/['\n\r\t\u2028\u2029\\]/g,dt="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),vt=Math.ceil,mt=K.concat,gt=Math.floor,yt=at.test(yt=Object.getPrototypeOf)&&yt,bt=Q.hasOwnProperty,wt=K.push,Et=Q.propertyIsEnumerable,St=K.slice,xt=Q.toString,Tt=at.test(Tt=St.bind)&&Tt,Nt=at.test(Nt=Array.isArray)&&Nt,Ct=e.isFinite,kt=e.isNaN,Lt=at.test(Lt=Object +.keys)&&Lt,At=Math.max,Ot=Math.min,Mt=Math.random,_t="[object Arguments]",Dt="[object Array]",Pt="[object Boolean]",Ht="[object Date]",Bt="[object Number]",jt="[object Object]",Ft="[object RegExp]",It="[object String]",qt,Rt,Ut=(Ut={0:1,length:1},K.splice.call(Ut,0,1),Ut[0]),zt=n;(function(){function e(){this.x=1}var t=[];e.prototype={valueOf:1,y:1};for(var n in new e)t.push(n);for(n in arguments)zt=!n;qt=!/valueOf/.test(t),Rt="x"!=t[0]})(1);var Wt=!m(arguments),Xt="x"!=St.call("x")[0],Vt="xx"!="x" +[0]+Object("x")[0];try{var $t=("[object Object]",xt.call(e.document||0)==jt)}catch(Jt){}var Kt=Tt&&/\n|Opera/.test(Tt+xt.call(e.opera)),Qt=Lt&&/^.+$|true/.test(Lt+!!e.attachEvent),Gt={};Gt[_t]=Gt["[object Function]"]=i,Gt[Dt]=Gt[Pt]=Gt[Ht]=Gt[Bt]=Gt[jt]=Gt[Ft]=Gt[It]=n;var Yt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i},Zt={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};s.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g, +interpolate:lt,variable:""};var en={a:"d,c,u",k:"c=e(c,u)",b:"if(c(v,h,d)===false)return s",g:"if(c(v,h,d)===false)return s"},tn={l:i,a:"n",k:"for(var a=1,b=arguments.length;a":">",'"':""","'":"'"},un=E(on),an=c(tn,{g:"if(s[h]==null)"+tn.g}),fn=c(tn),ln=Nt||function(e){return xt.call(e)==Dt};x(/x/)&&(x=function(e){ +return"[object Function]"==xt.call(e)});var cn=yt?function(e){if(!e||"object"!=typeof e)return i;var t=e.valueOf,n="function"==typeof t&&(n=yt(t))&&yt(n);return n?e==n||yt(e)==n&&!m(e):g(e)}:g,hn=Lt?function(e){return"function"==typeof e&&Et.call(e,"prototype")?y(e):T(e)?Lt(e):[]}:y,pn=c(en);s.VERSION="0.9.1",s.after=function(e,t){return 1>e?t():function(){if(1>--e)return t.apply(this,arguments)}},s.bind=W,s.bindAll=function(e){for(var t=arguments,n=1q(i,e) +){for(var s=n;--s;)if(!(r[s]||(r[s]=o(t[s])))(e))return;i.push(e)}}),i},s.invert=E,s.invoke=function(e,t){var n=St.call(arguments,2),r="function"==typeof t,i=[];return pn(e,function(e){i.push((r?t:e[t]).apply(e,n))}),i},s.isArguments=m,s.isArray=ln,s.isBoolean=function(e){return e===n||e===i||xt.call(e)==Pt},s.isDate=function(e){return xt.call(e)==Ht},s.isElement=function(e){return e?1===e.nodeType:i},s.isEmpty=function(e){var t=n;if(!e)return t;var r=xt.call(e),s=e.length;return r==Dt||r==It||r== +_t||Wt&&m(e)||r==jt&&"number"==typeof s&&x(e.splice)?!s:(sn(e,function(){return t=i}),t)},s.isEqual=S,s.isFinite=function(e){return Ct(e)&&!kt(parseFloat(e))},s.isFunction=x,s.isNaN=function(e){return xt.call(e)==Bt&&e!=+e},s.isNull=function(e){return e===r},s.isNumber=function(e){return xt.call(e)==Bt},s.isObject=T,s.isPlainObject=cn,s.isRegExp=function(e){return xt.call(e)==Ft},s.isString=N,s.isUndefined=function(e){return e===t},s.keys=hn,s.last=function(e,t,n){if(e){var i=e.length;return t==r|| +n?e[i-1]:St.call(e,-t||i)}},s.lastIndexOf=function(e,t,n){var r=e?e.length:0;for("number"==typeof n&&(r=(0>n?At(0,r+n):Ot(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},s.lateBind=function(e,t){return f(t,e,St.call(arguments,2))},s.map=_,s.max=D,s.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments[0];return bt.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},s.merge=C,s.min=function(e,t,n){var r=Infinity,i=-1,s=e?e.length:0,o=r;if(t||!ln(e))t=!t&&N(e)?u:l(t,n) +,pn(e,function(e,n,i){n=t(e,n,i),nq(s,n,1))i[n]=e}),i},s.once=function(e){var t,s=i;return function(){return s?t:(s=n,t=e.apply(this +,arguments),e=r,t)}},s.pairs=function(e){var t=[];return sn(e,function(e,n){t.push([n,e])}),t},s.partial=function(e){return f(e,St.call(arguments,1))},s.pick=function(e,t,n){var r={};if("function"!=typeof t)for(var i=0,s=mt.apply(K,arguments),o=s.length;++i=f?(clearTimeout(u),a=r,s=e.apply(o,i)):u||(u=setTimeout(n,f)),s}},s.times=function(e,t,n){for(var e=+e||0,r=-1,i=Array(e);++rr&&(r=n,u=e)});else for(;++iu&&(u=e[i]);return u}function _(e,t){var n=[];return s(e,function(e){n.push(e[t])}),n}function D(e,t,n,r){var o=3>arguments.length,t=p(t,r);return s(e,function(e,r,s){n=o?(o=i,e):t(n,e,r,s)}),n}function P(e,t,n,r){var o=e?e.length:0,u=3>arguments.length;if("number"!=typeof o)var a=Ot(e),o=a.length;return s(e,function(s,f,l){f=a?a[--o]:--o,n=u?(u=i,e[f]):t.call(r,n,e[f],f,l)}),n}function H(e,t,n){var r,t=p -(t,n);return s(e,function(e,n,i){return(r=t(e,n,i))&&K}),!!r}function B(e,t,n){if(e)return t==r||n?e[0]:ut.call(e,0,t)}function j(e,t){for(var n=-1,r=e?e.length:0,i=[];++nn?pt(0,i+n):n||0)-1;else if(n)return r=q(e,t),e[r]===t?r:-1;for(;++r>>1,n(e[r])F(u,a))n&&u.push(a),o.push(r)}return o}function U(e,t){return Tt||ft&&2"']/g,tt=/['\n\r\t\u2028\u2029\\]/g,nt=Math.ceil,rt=$.concat,it=Math.floor,st=V.hasOwnProperty,ot=$.push,ut=$.slice,at=V.toString,ft=Y. -test(ft=ut.bind)&&ft,lt=Y.test(lt=Array.isArray)&<,ct=e.isFinite,ht=Y.test(ht=Object.keys)&&ht,pt=Math.max,dt=Math.min,vt=Math.random,mt="[object Array]",gt="[object Boolean]",yt="[object Date]",bt="[object Number]",wt="[object Object]",Et="[object RegExp]",St="[object String]",xt=(xt={0:1,length:1},$.splice.call(xt,0,1),xt[0]),Tt=ft&&/\n|Opera/.test(ft+at.call(e.opera)),Nt={"boolean":i,"function":n,object:n,number:i,string:i,"undefined":i},Ct={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028" -:"u2028","\u2029":"u2029"};l.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},l.isArguments=function(e){return"[object Arguments]"==at.call(e)},l.isArguments(arguments)||(l.isArguments=function(e){return e?st.call(e,"callee"):i});var kt={"&":"&","<":"<",">":">",'"':""","'":"'"},Lt=w(kt),At=lt||function(e){return at.call(e)==mt};S(/x/)&&(S=function(e){return"[object Function]"==at.call(e)});var Ot=ht?function(e){ -return x(e)?ht(e):[]}:y;l.VERSION="0.9.1",l.after=function(e,t){return 1>e?t():function(){if(1>--e)return t.apply(this,arguments)}},l.bind=U,l.bindAll=function(e){for(var t=arguments,n=1F(r,s,n)&&i.push(s)}return i},l.escape=function(e){return e==r?"":(e+"").replace(et,v)},l.every=k,l.extend=o,l.filter=L,l.find=A,l.first=B,l.flatten=j,l.forEach=s,l.functions=b,l.groupBy=function(e,t,n){var r={},t=p(t,n);return s(e,function(e,n,i){n=t(e,n,i),(st.call(r,n)?r[n -]:r[n]=[]).push(e)}),r},l.has=function(e,t){return e?st.call(e,t):i},l.identity=z,l.indexOf=F,l.initial=function(e,t,n){return e?ut.call(e,0,-(t==r||n?1:t)):[]},l.intersection=function(e){var t=arguments,n=t.length,r=[];return s(e,function(e){if(0>F(r,e)){for(var i=n;--i;)if(0>F(t[i],e))return;r.push(e)}}),r},l.invert=w,l.invoke=function(e,t){var n=ut.call(arguments,2),r="function"==typeof t,i=[];return s(e,function(e){i.push((r?t:e[t]).apply(e,n))}),i},l.isArray=At,l.isBoolean=function(e){return e=== -n||e===i||at.call(e)==gt},l.isDate=function(e){return at.call(e)==yt},l.isElement=function(e){return e?1===e.nodeType:i},l.isEmpty=function(e){if(!e)return n;if(At(e)||T(e))return!e.length;for(var t in e)if(st.call(e,t))return i;return n},l.isEqual=E,l.isFinite=function(e){return ct(e)&&at.call(e)==bt},l.isFunction=S,l.isNaN=function(e){return at.call(e)==bt&&e!=+e},l.isNull=function(e){return e===r},l.isNumber=function(e){return at.call(e)==bt},l.isObject=x,l.isRegExp=function(e){return at.call( -e)==Et},l.isString=T,l.isUndefined=function(e){return e===t},l.keys=Ot,l.last=function(e,t,n){if(e){var i=e.length;return t==r||n?e[i-1]:ut.call(e,-t||i)}},l.lastIndexOf=function(e,t,n){var r=e?e.length:0;for("number"==typeof n&&(r=(0>n?pt(0,r+n):dt(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},l.map=O,l.max=M,l.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments[0];return st.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},l.min=function(e,t,n){var r=Infinity -,i=-1,o=e?e.length:0,u=r;if(t||!At(e))t=p(t,n),s(e,function(e,n,i){n=t(e,n,i),nF(t,r,1)&&(n[r]=e)}),n},l.once=function(e){var t,s=i;return function(){return s?t:(s=n,t=e.apply(this,arguments),e=r,t)} -},l.pairs=function(e){var t=[];return a(e,function(e,n){t.push([n,e])}),t},l.pick=function(e){for(var t=0,n=rt.apply($,arguments),r=n.length,i={};++t=f?(clearTimeout(u),a=r,s=e.apply(o,i)):u||(u=setTimeout(n,f)),s}},l.times=function(e,t,n){for(var e=+e||0,r=-1,i=Array(e);++rF(arguments,i,1)&&r.push(i)}return r},l.wrap=function(e,t){return function( -){var n=[e];return ot.apply(n,arguments),t.apply(this,n)}},l.zip=function(e){for(var t=-1,n=e?M(_(arguments,"length")):0,r=Array(n);++tr&&(r=n,u=e)});else for(;++iu&&(u=e[i]);return u}function _(e,t){var n=[];return s(e,function(e){n.push(e[t])}),n}function D(e,t,n,r){var o=3>arguments.length,t=p(t,r);return s(e,function(e,r,s){n=o?(o=i,e):t(n,e,r,s)}),n}function P(e,t,n,r){var o=e?e.length:0,u=3>arguments.length;if("number"!=typeof o)var a=Ot(e),o=a.length;return s(e,function(s,f,l){f=a?a[--o]:--o,n=u?(u=i, +e[f]):t.call(r,n,e[f],f,l)}),n}function H(e,t,n){var r,t=p(t,n);if(At(e))for(var n=-1,i=e.length;++nn?pt(0,i+n):n||0)-1;else if(n)return r=q(e,t),e[r]===t?r:-1;for(;++r>>1,n(e[r])F(u,a))n&&u.push(a),o.push(r)}return o}function U(e,t){return Tt||ft&&2"']/g,tt=/['\n\r\t\u2028\u2029\\]/g +,nt=Math.ceil,rt=$.concat,it=Math.floor,st=V.hasOwnProperty,ot=$.push,ut=$.slice,at=V.toString,ft=Y.test(ft=ut.bind)&&ft,lt=Y.test(lt=Array.isArray)&<,ct=e.isFinite,ht=Y.test(ht=Object.keys)&&ht,pt=Math.max,dt=Math.min,vt=Math.random,mt="[object Array]",gt="[object Boolean]",yt="[object Date]",bt="[object Number]",wt="[object Object]",Et="[object RegExp]",St="[object String]",xt=(xt={0:1,length:1},$.splice.call(xt,0,1),xt[0]),Tt=ft&&/\n|Opera/.test(ft+at.call(e.opera)),Nt={"boolean":i,"function" +:n,object:n,number:i,string:i,"undefined":i},Ct={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"};l.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},l.isArguments=function(e){return"[object Arguments]"==at.call(e)},l.isArguments(arguments)||(l.isArguments=function(e){return e?st.call(e,"callee"):i});var kt={"&":"&","<":"<",">":">",'"':""","'":"'"},Lt=w(kt),At=lt||function(e){return at +.call(e)==mt};S(/x/)&&(S=function(e){return"[object Function]"==at.call(e)});var Ot=ht?function(e){return x(e)?ht(e):[]}:y;l.VERSION="0.9.1",l.after=function(e,t){return 1>e?t():function(){if(1>--e)return t.apply(this,arguments)}},l.bind=U,l.bindAll=function(e){for(var t=arguments,n=1F(r,s,n)&&i.push(s)}return i},l.escape=function(e){return e==r?"":(e+"").replace(et,v)},l.every=k,l.extend=o,l.filter=L,l.find=A,l.first=B,l.flatten=j,l.forEach=s,l.functions=b,l +.groupBy=function(e,t,n){var r={},t=p(t,n);return s(e,function(e,n,i){n=t(e,n,i),(st.call(r,n)?r[n]:r[n]=[]).push(e)}),r},l.has=function(e,t){return e?st.call(e,t):i},l.identity=z,l.indexOf=F,l.initial=function(e,t,n){return e?ut.call(e,0,-(t==r||n?1:t)):[]},l.intersection=function(e){var t=arguments,n=t.length,r=[];return s(e,function(e){if(0>F(r,e)){for(var i=n;--i;)if(0>F(t[i],e))return;r.push(e)}}),r},l.invert=w,l.invoke=function(e,t){var n=ut.call(arguments,2),r="function"==typeof t,i=[];return s +(e,function(e){i.push((r?t:e[t]).apply(e,n))}),i},l.isArray=At,l.isBoolean=function(e){return e===n||e===i||at.call(e)==gt},l.isDate=function(e){return at.call(e)==yt},l.isElement=function(e){return e?1===e.nodeType:i},l.isEmpty=function(e){if(!e)return n;if(At(e)||T(e))return!e.length;for(var t in e)if(st.call(e,t))return i;return n},l.isEqual=E,l.isFinite=function(e){return ct(e)&&at.call(e)==bt},l.isFunction=S,l.isNaN=function(e){return at.call(e)==bt&&e!=+e},l.isNull=function(e){return e===r} +,l.isNumber=function(e){return at.call(e)==bt},l.isObject=x,l.isRegExp=function(e){return at.call(e)==Et},l.isString=T,l.isUndefined=function(e){return e===t},l.keys=Ot,l.last=function(e,t,n){if(e){var i=e.length;return t==r||n?e[i-1]:ut.call(e,-t||i)}},l.lastIndexOf=function(e,t,n){var r=e?e.length:0;for("number"==typeof n&&(r=(0>n?pt(0,r+n):dt(n,r-1))+1);r--;)if(e[r]===t)return r;return-1},l.map=O,l.max=M,l.memoize=function(e,t){var n={};return function(){var r=t?t.apply(this,arguments):arguments +[0];return st.call(n,r)?n[r]:n[r]=e.apply(this,arguments)}},l.min=function(e,t,n){var r=Infinity,i=-1,o=e?e.length:0,u=r;if(t||!At(e))t=p(t,n),s(e,function(e,n,i){n=t(e,n,i),nF(t,r,1)&&(n[r]=e)}),n}, +l.once=function(e){var t,s=i;return function(){return s?t:(s=n,t=e.apply(this,arguments),e=r,t)}},l.pairs=function(e){var t=[];return a(e,function(e,n){t.push([n,e])}),t},l.pick=function(e){for(var t=0,n=rt.apply($,arguments),r=n.length,i={};++t=f?(clearTimeout(u),a=r,s=e.apply(o,i)):u||(u=setTimeout(n,f)),s}},l.times=function(e,t,n){for(var e=+e||0,r=-1,i=Array( +e);++rF(arguments,i,1)&&r.push(i)}return r},l.wrap=function(e,t){return function(){var n=[e];return ot.apply(n,arguments),t.apply(this,n)}},l.zip=function(e){for(var t=-1,n=e?M(_(arguments,"length")):0,r=Array(n);++t