(function(){function l(t,i,r){var s,f,e,o;if(t===i)return t!==0||1/t==1/i;if(t==null||i==null)return t===i;if(t._chain&&(t=t._wrapped),i._chain&&(i=i._wrapped),t.isEqual&&n.isFunction(t.isEqual))return t.isEqual(i);if(i.isEqual&&n.isFunction(i.isEqual))return i.isEqual(t);if(s=u.call(t),s!=u.call(i))return!1;switch(s){case"[object String]":return t==String(i);case"[object Number]":return t!=+t?i!=+i:t==0?1/t==1/i:t==+i;case"[object Date]":case"[object Boolean]":return+t==+i;case"[object RegExp]":return t.source==i.source&&t.global==i.global&&t.multiline==i.multiline&&t.ignoreCase==i.ignoreCase}if(typeof t!="object"||typeof i!="object")return!1;for(f=r.length;f--;)if(r[f]==t)return!0;if(r.push(t),f=0,e=!0,s=="[object Array]"){if(f=t.length,e=f==i.length)for(;f--;)if(!(e=f in t==f in i&&l(t[f],i[f],r)))break}else{if("constructor"in t!="constructor"in i||t.constructor!=i.constructor)return!1;for(o in t)if(n.has(t,o)&&(f++,!(e=n.has(i,o)&&l(t[o],i[o],r))))break;if(e){for(o in i)if(n.has(i,o)&&!f--)break;e=!f}}return r.pop(),e}var a=this,st=a._,o={},r=Array.prototype,v=Object.prototype,ht=r.push,t=r.slice,ct=r.unshift,u=v.toString,lt=v.hasOwnProperty,d=r.forEach,g=r.map,nt=r.reduce,tt=r.reduceRight,it=r.filter,rt=r.every,ut=r.some,s=r.indexOf,ft=r.lastIndexOf,v=Array.isArray,at=Object.keys,y=Function.prototype.bind,n=function(n){return new f(n)},i,p,w,et,h,e,b,f,c,ot;typeof exports!="undefined"?(typeof module!="undefined"&&module.exports&&(exports=module.exports=n),exports._=n):a._=n,n.VERSION="1.3.3",i=n.each=n.forEach=function(t,i,r){if(t!=null)if(d&&t.forEach===d)t.forEach(i,r);else if(t.length===+t.length){for(var u=0,f=t.length;u<f;u++)if(u in t&&i.call(r,t[u],u,t)===o)break}else for(u in t)if(n.has(t,u)&&i.call(r,t[u],u,t)===o)break},n.map=n.collect=function(n,t,r){var u=[];return n==null?u:g&&n.map===g?n.map(t,r):(i(n,function(n,i,f){u[u.length]=t.call(r,n,i,f)}),n.length===+n.length&&(u.length=n.length),u)},n.reduce=n.foldl=n.inject=function(t,r,u,f){var e=arguments.length>2;if(t==null&&(t=[]),nt&&t.reduce===nt)return f&&(r=n.bind(r,f)),e?t.reduce(r,u):t.reduce(r);if(i(t,function(n,t,i){e?u=r.call(f,u,n,t,i):(u=n,e=!0)}),!e)throw new TypeError("Reduce of empty array with no initial value");return u},n.reduceRight=n.foldr=function(t,i,r,u){var f=arguments.length>2,e;return(t==null&&(t=[]),tt&&t.reduceRight===tt)?(u&&(i=n.bind(i,u)),f?t.reduceRight(i,r):t.reduceRight(i)):(e=n.toArray(t).reverse(),u&&!f&&(i=n.bind(i,u)),f?n.reduce(e,i,r,u):n.reduce(e,i))},n.find=n.detect=function(n,t,i){var r;return p(n,function(n,u,f){if(t.call(i,n,u,f))return r=n,!0}),r},n.filter=n.select=function(n,t,r){var u=[];return n==null?u:it&&n.filter===it?n.filter(t,r):(i(n,function(n,i,f){t.call(r,n,i,f)&&(u[u.length]=n)}),u)},n.reject=function(n,t,r){var u=[];return n==null?u:(i(n,function(n,i,f){t.call(r,n,i,f)||(u[u.length]=n)}),u)},n.every=n.all=function(n,t,r){var u=!0;return n==null?u:rt&&n.every===rt?n.every(t,r):(i(n,function(n,i,f){if(!(u=u&&t.call(r,n,i,f)))return o}),!!u)},p=n.some=n.any=function(t,r,u){r||(r=n.identity);var f=!1;return t==null?f:ut&&t.some===ut?t.some(r,u):(i(t,function(n,t,i){if(f||(f=r.call(u,n,t,i)))return o}),!!f)},n.include=n.contains=function(n,t){var i=!1;return n==null?i:s&&n.indexOf===s?n.indexOf(t)!=-1:i=p(n,function(n){return n===t})},n.invoke=function(i,r){var u=t.call(arguments,2);return n.map(i,function(t){return(n.isFunction(r)?r||t:t[r]).apply(t,u)})},n.pluck=function(t,i){return n.map(t,function(n){return n[i]})},n.max=function(t,r,u){if(!r&&n.isArray(t)&&t[0]===+t[0])return Math.max.apply(Math,t);if(!r&&n.isEmpty(t))return-Infinity;var f={computed:-Infinity};return i(t,function(n,t,i){t=r?r.call(u,n,t,i):n,t>=f.computed&&(f={value:n,computed:t})}),f.value},n.min=function(t,r,u){if(!r&&n.isArray(t)&&t[0]===+t[0])return Math.min.apply(Math,t);if(!r&&n.isEmpty(t))return Infinity;var f={computed:Infinity};return i(t,function(n,t,i){t=r?r.call(u,n,t,i):n,t<f.computed&&(f={value:n,computed:t})}),f.value},n.shuffle=function(n){var t=[],r;return i(n,function(n,i){r=Math.floor(Math.random()*(i+1)),t[i]=t[r],t[r]=n}),t},n.sortBy=function(t,i,r){var u=n.isFunction(i)?i:function(n){return n[i]};return n.pluck(n.map(t,function(n,t,i){return{value:n,criteria:u.call(r,n,t,i)}}).sort(function(n,t){var i=n.criteria,r=t.criteria;return i===void 0?1:r===void 0?-1:i<r?-1:i>r?1:0}),"value")},n.groupBy=function(t,r){var u={},f=n.isFunction(r)?r:function(n){return n[r]};return i(t,function(n,t){var i=f(n,t);(u[i]||(u[i]=[])).push(n)}),u},n.sortedIndex=function(t,i,r){var f;r||(r=n.identity);for(var i=r(i),u=0,e=t.length;u<e;)f=u+e>>1,r(t[f])<i?u=f+1:e=f;return u},n.toArray=function(i){return i?n.isArray(i)?t.call(i):n.isArguments(i)?t.call(i):i.toArray&&n.isFunction(i.toArray)?i.toArray():n.values(i):[]},n.size=function(t){return n.isArray(t)?t.length:n.keys(t).length},n.first=n.head=n.take=function(n,i,r){return i!=null&&!r?t.call(n,0,i):n[0]},n.initial=function(n,i,r){return t.call(n,0,n.length-(i==null||r?1:i))},n.last=function(n,i,r){return i!=null&&!r?t.call(n,Math.max(n.length-i,0)):n[n.length-1]},n.rest=n.tail=function(n,i,r){return t.call(n,i==null||r?1:i)},n.compact=function(t){return n.filter(t,function(n){return!!n})},n.flatten=function(t,r){return function u(t,f){return i(t,function(t){n.isArray(t)?r?ht.apply(f,t):u(t,f):f.push(t)}),f}(t,[])},n.without=function(i){return n.difference(i,t.call(arguments,1))},n.uniq=n.unique=function(t,i,r){var r=r?n.map(t,r):t,u=[];return t.length<3&&(i=!0),n.reduce(r,function(r,f,e){return(i?n.last(r)===f&&r.length:n.include(r,f))||(r.push(f),u.push(t[e])),r},[]),u},n.union=function(){return n.uniq(n.flatten(arguments,!0))},n.intersection=n.intersect=function(i){var r=t.call(arguments,1);return n.filter(n.uniq(i),function(t){return n.every(r,function(i){return n.indexOf(i,t)>=0})})},n.difference=function(i){var r=n.flatten(t.call(arguments,1),!0);return n.filter(i,function(t){return!n.include(r,t)})},n.zip=function(){for(var r=t.call(arguments),u=n.max(n.pluck(r,"length")),f=Array(u),i=0;i<u;i++)f[i]=n.pluck(r,""+i);return f},n.indexOf=function(t,i,r){if(t==null)return-1;var u;if(r)return r=n.sortedIndex(t,i),t[r]===i?r:-1;if(s&&t.indexOf===s)return t.indexOf(i);for(r=0,u=t.length;r<u;r++)if(r in t&&t[r]===i)return r;return-1},n.lastIndexOf=function(n,t){if(n==null)return-1;if(ft&&n.lastIndexOf===ft)return n.lastIndexOf(t);for(var i=n.length;i--;)if(i in n&&n[i]===t)return i;return-1},n.range=function(n,t,i){arguments.length<=1&&(t=n||0,n=0);for(var i=arguments[2]||1,r=Math.max(Math.ceil((t-n)/i),0),u=0,f=Array(r);u<r;)f[u++]=n,n+=i;return f},w=function(){},n.bind=function(i,r){var f,u;if(i.bind===y&&y)return y.apply(i,t.call(arguments,1));if(!n.isFunction(i))throw new TypeError;return u=t.call(arguments,2),f=function(){if(!(this instanceof f))return i.apply(r,u.concat(t.call(arguments)));w.prototype=i.prototype;var e=new w,n=i.apply(e,u.concat(t.call(arguments)));return Object(n)===n?n:e}},n.bindAll=function(r){var u=t.call(arguments,1);return u.length==0&&(u=n.functions(r)),i(u,function(t){r[t]=n.bind(r[t],r)}),r},n.memoize=function(t,i){var r={};return i||(i=n.identity),function(){var u=i.apply(this,arguments);return n.has(r,u)?r[u]:r[u]=t.apply(this,arguments)}},n.delay=function(n,i){var r=t.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},i)},n.defer=function(i){return n.delay.apply(n,[i,1].concat(t.call(arguments,1)))},n.throttle=function(t,i){var r,u,f,e,o,s,h=n.debounce(function(){o=e=!1},i);return function(){r=this,u=arguments;var n;return f||(f=setTimeout(function(){f=null,o&&t.apply(r,u),h()},i)),e?o=!0:(e=!0,s=t.apply(r,u)),h(),s}},n.debounce=function(n,t,i){var r;return function(){var u=this,f=arguments,e=i&&!r;clearTimeout(r),r=setTimeout(function(){r=null,i||n.apply(u,f)},t),e&&n.apply(u,f)}},n.once=function(n){var t=!1,i;return function(){return t?i:(t=!0,i=n.apply(this,arguments))}},n.wrap=function(n,i){return function(){var r=[n].concat(t.call(arguments,0));return i.apply(this,r)}},n.compose=function(){var n=arguments;return function(){for(var t=arguments,i=n.length-1;i>=0;i--)t=[n[i].apply(this,t)];return t[0]}},n.after=function(n,t){return n<=0?t():function(){if(--n<1)return t.apply(this,arguments)}},n.keys=at||function(t){if(t!==Object(t))throw new TypeError("Invalid object");var i=[],r;for(r in t)n.has(t,r)&&(i[i.length]=r);return i},n.values=function(t){return n.map(t,n.identity)},n.functions=n.methods=function(t){var r=[],i;for(i in t)n.isFunction(t[i])&&r.push(i);return r.sort()},n.extend=function(n){return i(t.call(arguments,1),function(t){for(var i in t)n[i]=t[i]}),n},n.pick=function(r){var u={};return i(n.flatten(t.call(arguments,1)),function(n){n in r&&(u[n]=r[n])}),u},n.defaults=function(n){return i(t.call(arguments,1),function(t){for(var i in t)n[i]==null&&(n[i]=t[i])}),n},n.clone=function(t){return n.isObject(t)?n.isArray(t)?t.slice():n.extend({},t):t},n.tap=function(n,t){return t(n),n},n.isEqual=function(n,t){return l(n,t,[])},n.isEmpty=function(t){if(t==null)return!0;if(n.isArray(t)||n.isString(t))return t.length===0;for(var i in t)if(n.has(t,i))return!1;return!0},n.isElement=function(n){return!!(n&&n.nodeType==1)},n.isArray=v||function(n){return u.call(n)=="[object Array]"},n.isObject=function(n){return n===Object(n)},n.isArguments=function(n){return u.call(n)=="[object Arguments]"},n.isArguments(arguments)||(n.isArguments=function(t){return!(!t||!n.has(t,"callee"))}),n.isFunction=function(n){return u.call(n)=="[object Function]"},n.isString=function(n){return u.call(n)=="[object String]"},n.isNumber=function(n){return u.call(n)=="[object Number]"},n.isFinite=function(t){return n.isNumber(t)&&isFinite(t)},n.isNaN=function(n){return n!==n},n.isBoolean=function(n){return n===!0||n===!1||u.call(n)=="[object Boolean]"},n.isDate=function(n){return u.call(n)=="[object Date]"},n.isRegExp=function(n){return u.call(n)=="[object RegExp]"},n.isNull=function(n){return n===null},n.isUndefined=function(n){return n===void 0},n.has=function(n,t){return lt.call(n,t)},n.noConflict=function(){return a._=st,this},n.identity=function(n){return n},n.times=function(n,t,i){for(var r=0;r<n;r++)t.call(i,r)},n.escape=function(n){return(""+n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")},n.result=function(t,i){if(t==null)return null;var r=t[i];return n.isFunction(r)?r.call(t):r},n.mixin=function(t){i(n.functions(t),function(i){ot(i,n[i]=t[i])})},et=0,n.uniqueId=function(n){var t=et++;return n?n+t:t},n.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},h=/.^/,e={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"};for(b in e)e[e[b]]=b;var vt=/\\|'|\r|\n|\t|\u2028|\u2029/g,yt=/\\(\\|'|r|n|t|u2028|u2029)/g,k=function(n){return n.replace(yt,function(n,t){return e[t]})};n.template=function(t,i,r){r=n.defaults(r||{},n.templateSettings),t="__p+='"+t.replace(vt,function(n){return"\\"+e[n]}).replace(r.escape||h,function(n,t){return"'+\n((__t=("+k(t)+"))==null?'':_.escape(__t))+\n'"}).replace(r.interpolate||h,function(n,t){return"'+\n((__t=("+k(t)+"))==null?'':__t)+\n'"}).replace(r.evaluate||h,function(n,t){return"';\n"+k(t)+"\n;__p+='"})+"';\n",r.variable||(t="with(obj||{}){\n"+t+"}\n");var t="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'')};\n"+t+"return __p;\n",u=new Function(r.variable||"obj","_",t);return i?u(i,n):(i=function(t){return u.call(this,t,n)},i.source="function("+(r.variable||"obj")+"){\n"+t+"}",i)},n.chain=function(t){return n(t).chain()},f=function(n){this._wrapped=n},n.prototype=f.prototype,c=function(t,i){return i?n(t).chain():t},ot=function(i,r){f.prototype[i]=function(){var i=t.call(arguments);return ct.call(i,this._wrapped),c(r.apply(n,i),this._chain)}},n.mixin(n),i("pop,push,reverse,shift,sort,splice,unshift".split(","),function(n){var t=r[n];f.prototype[n]=function(){var i=this._wrapped;return t.apply(i,arguments),(n=="shift"||n=="splice")&&i.length===0&&delete i[0],c(i,this._chain)}}),i(["concat","join","slice"],function(n){var t=r[n];f.prototype[n]=function(){return c(t.apply(this._wrapped,arguments),this._chain)}}),f.prototype.chain=function(){return this._chain=!0,this},f.prototype.value=function(){return this._wrapped}}).call(this),function(){var u=this,b=u.Backbone,k=Array.prototype.slice,d=Array.prototype.splice,t,n,i,s,r,e,h,y;t=typeof exports!="undefined"?exports:u.Backbone={},t.VERSION="0.9.2",n=u._,n||typeof require=="undefined"||(n=require("underscore")),i=u.jQuery||u.Zepto||u.ender,t.setDomLibrary=function(n){i=n},t.noConflict=function(){return u.Backbone=b,this},t.emulateHTTP=!1,t.emulateJSON=!1,s=/\s+/,r=t.Events={on:function(n,t,i){var f,e,r,o,u;if(!t)return this;for(n=n.split(s),f=this._callbacks||(this._callbacks={});e=n.shift();)r=(u=f[e])?u.tail:{},r.next=o={},r.context=i,r.callback=t,f[e]={tail:o,next:u?u.next:r};return this},off:function(t,i,r){var f,e,u,c,o,h;if(!(e=this._callbacks))return this;if(!t&&!i&&!r)return delete this._callbacks,this;for(t=t?t.split(s):n.keys(e);f=t.shift();)if(u=e[f],delete e[f],u&&(i||r))for(c=u.tail;(u=u.next)!==c;)if(o=u.callback,h=u.context,i&&o!==i||r&&h!==r)this.on(f,o,h);return this},trigger:function(n){var i,t,u,r,e,f;if(!(u=this._callbacks))return this;for(e=u.all,n=n.split(s),f=k.call(arguments,1);i=n.shift();){if(t=u[i])for(r=t.tail;(t=t.next)!==r;)t.callback.apply(t.context||this,f);if(t=e)for(r=t.tail,i=[i].concat(f);(t=t.next)!==r;)t.callback.apply(t.context||this,i)}return this}},r.bind=r.on,r.unbind=r.off,e=t.Model=function(t,i){var r;t||(t={}),i&&i.parse&&(t=this.parse(t)),(r=o(this,"defaults"))&&(t=n.extend({},r,t)),i&&i.collection&&(this.collection=i.collection),this.attributes={},this._escapedAttributes={},this.cid=n.uniqueId("c"),this.changed={},this._silent={},this._pending={},this.set(t,{silent:!0}),this.changed={},this._silent={},this._pending={},this._previousAttributes=n.clone(this.attributes),this.initialize.apply(this,arguments)},n.extend(e.prototype,r,{changed:null,_silent:null,_pending:null,idAttribute:"id",initialize:function(){},toJSON:function(){return n.clone(this.attributes)},get:function(n){return this.attributes[n]},escape:function(t){var i;return(i=this._escapedAttributes[t])?i:(i=this.get(t),this._escapedAttributes[t]=n.escape(i==null?"":""+i))},has:function(n){return this.get(n)!=null},set:function(t,i,r){var f,u;if(n.isObject(t)||t==null?(f=t,r=i):(f={},f[t]=i),r||(r={}),!f)return this;if(f instanceof e&&(f=f.attributes),r.unset)for(u in f)f[u]=void 0;if(!this._validate(f,r))return!1;this.idAttribute in f&&(this.id=f[this.idAttribute]);var i=r.changes={},o=this.attributes,h=this._escapedAttributes,s=this._previousAttributes||{};for(u in f)t=f[u],(!n.isEqual(o[u],t)||r.unset&&n.has(o,u))&&(delete h[u],(r.silent?this._silent:i)[u]=!0),r.unset?delete o[u]:o[u]=t,!n.isEqual(s[u],t)||n.has(o,u)!=n.has(s,u)?(this.changed[u]=t,r.silent||(this._pending[u]=!0)):(delete this.changed[u],delete this._pending[u]);return r.silent||this.change(r),this},unset:function(n,t){return(t||(t={})).unset=!0,this.set(n,null,t)},clear:function(t){return(t||(t={})).unset=!0,this.set(n.clone(this.attributes),t)},fetch:function(i){var i=i?n.clone(i):{},r=this,u=i.success;return i.success=function(n,t,f){if(!r.set(r.parse(n,f),i))return!1;u&&u(r,n)},i.error=t.wrapError(i.error,r,i),(this.sync||t.sync).call(this,"read",this,i)},save:function(i,r,u){var f,s,e,o;if(n.isObject(i)||i==null?(f=i,u=r):(f={},f[i]=r),u=u?n.clone(u):{},u.wait){if(!this._validate(f,u))return!1;s=n.clone(this.attributes)}return(i=n.extend({},u,{silent:!0}),f&&!this.set(f,u.wait?i:u))?!1:(e=this,o=u.success,u.success=function(t,i,r){if(i=e.parse(t,r),u.wait&&(delete u.wait,i=n.extend(f||{},i)),!e.set(i,u))return!1;o?o(e,t):e.trigger("sync",e,t,u)},u.error=t.wrapError(u.error,e,u),r=this.isNew()?"create":"update",r=(this.sync||t.sync).call(this,r,this,u),u.wait&&this.set(s,i),r)},destroy:function(i){var i=i?n.clone(i):{},r=this,f=i.success,u=function(){r.trigger("destroy",r,r.collection,i)},e;return this.isNew()?(u(),!1):(i.success=function(n){i.wait&&u(),f?f(r,n):r.trigger("sync",r,n,i)},i.error=t.wrapError(i.error,r,i),e=(this.sync||t.sync).call(this,"delete",this,i),i.wait||u(),e)},url:function(){var n=o(this,"urlRoot")||o(this.collection,"url")||w();return this.isNew()?n:n+(n.charAt(n.length-1)=="/"?"":"/")+encodeURIComponent(this.id)},parse:function(n){return n},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return this.id==null},change:function(t){var r,i,u;t||(t={}),r=this._changing,this._changing=!0;for(i in this._silent)this._pending[i]=!0;u=n.extend({},t.changes,this._silent),this._silent={};for(i in u)this.trigger("change:"+i,this,this.get(i),t);if(r)return this;for(;!n.isEmpty(this._pending);){this._pending={},this.trigger("change",this,t);for(i in this.changed)this._pending[i]||this._silent[i]||delete this.changed[i];this._previousAttributes=n.clone(this.attributes)}return this._changing=!1,this},hasChanged:function(t){return arguments.length?n.has(this.changed,t):!n.isEmpty(this.changed)},changedAttributes:function(t){if(!t)return this.hasChanged()?n.clone(this.changed):!1;var u,r=!1,f=this._previousAttributes,i;for(i in t)n.isEqual(f[i],u=t[i])||((r||(r={}))[i]=u);return r},previous:function(n){return!arguments.length||!this._previousAttributes?null:this._previousAttributes[n]},previousAttributes:function(){return n.clone(this._previousAttributes)},isValid:function(){return!this.validate||!this.validate(this.attributes)},_validate:function(t,i){if(i.silent||!this.validate)return!0;var t=n.extend({},this.attributes,t),r=this.validate(t,i);return r?(i&&i.error?i.error(this,r,i):this.trigger("error",this,r,i),!1):!0}}),h=t.Collection=function(n,t){t||(t={}),t.model&&(this.model=t.model),t.comparator&&(this.comparator=t.comparator),this._reset(),this.initialize.apply(this,arguments),n&&this.reset(n,{silent:!0,parse:t.parse})},n.extend(h.prototype,r,{model:e,initialize:function(){},toJSON:function(n){return this.map(function(t){return t.toJSON(n)})},add:function(t,i){var r,f,u,o,e,s={},c={},h=[];for(i||(i={}),t=n.isArray(t)?t.slice():[t],r=0,f=t.length;r<f;r++){if(!(u=t[r]=this._prepareModel(t[r],i)))throw Error("Can't add an invalid model to a collection");o=u.cid,e=u.id,s[o]||this._byCid[o]||e!=null&&(c[e]||this._byId[e])?h.push(r):s[o]=c[e]=u}for(r=h.length;r--;)t.splice(h[r],1);for(r=0,f=t.length;r<f;r++)(u=t[r]).on("all",this._onModelEvent,this),this._byCid[u.cid]=u,u.id!=null&&(this._byId[u.id]=u);if(this.length+=f,d.apply(this.models,[i.at!=null?i.at:this.models.length,0].concat(t)),this.comparator&&i.at==null&&this.sort({silent:!0}),i.silent)return this;for(r=0,f=this.models.length;r<f;r++)s[(u=this.models[r]).cid]&&(i.index=r,u.trigger("add",u,this,i));return this},remove:function(t,i){var u,e,f,r;for(i||(i={}),t=n.isArray(t)?t.slice():[t],u=0,e=t.length;u<e;u++)(r=this.getByCid(t[u])||this.get(t[u]))&&(delete this._byId[r.id],delete this._byCid[r.cid],f=this.indexOf(r),this.models.splice(f,1),this.length--,i.silent||(i.index=f,r.trigger("remove",r,this,i)),this._removeReference(r));return this},push:function(n,t){return n=this._prepareModel(n,t),this.add(n,t),n},pop:function(n){var t=this.at(this.length-1);return this.remove(t,n),t},unshift:function(t,i){return t=this._prepareModel(t,i),this.add(t,n.extend({at:0},i)),t},shift:function(n){var t=this.at(0);return this.remove(t,n),t},get:function(n){if(n!=null)return this._byId[n.id!=null?n.id:n]},getByCid:function(n){return n&&this._byCid[n.cid||n]},at:function(n){return this.models[n]},where:function(t){return n.isEmpty(t)?[]:this.filter(function(n){for(var i in t)if(t[i]!==n.get(i))return!1;return!0})},sort:function(t){if(t||(t={}),!this.comparator)throw Error("Cannot sort a set without a comparator");var i=n.bind(this.comparator,this);return this.comparator.length==1?this.models=this.sortBy(i):this.models.sort(i),t.silent||this.trigger("reset",this,t),this},pluck:function(t){return n.map(this.models,function(n){return n.get(t)})},reset:function(t,i){t||(t=[]),i||(i={});for(var r=0,u=this.models.length;r<u;r++)this._removeReference(this.models[r]);return this._reset(),this.add(t,n.extend({silent:!0},i)),i.silent||this.trigger("reset",this,i),this},fetch:function(i){i=i?n.clone(i):{},i.parse===void 0&&(i.parse=!0);var r=this,u=i.success;return i.success=function(n,t,f){r[i.add?"add":"reset"](r.parse(n,f),i),u&&u(r,n)},i.error=t.wrapError(i.error,r,i),(this.sync||t.sync).call(this,"read",this,i)},create:function(t,i){var u=this,i=i?n.clone(i):{},t=this._prepareModel(t,i),r;return t?(i.wait||u.add(t,i),r=i.success,i.success=function(n,f){i.wait&&u.add(n,i),r?r(n,f):n.trigger("sync",t,f,i)},t.save(null,i),t):!1},parse:function(n){return n},chain:function(){return n(this.models).chain()},_reset:function(){this.length=0,this.models=[],this._byId={},this._byCid={}},_prepareModel:function(n,t){if(t||(t={}),n instanceof e)n.collection||(n.collection=this);else{var i;t.collection=this,n=new this.model(n,t),n._validate(n.attributes,t)||(n=!1)}return n},_removeReference:function(n){this==n.collection&&delete n.collection,n.off("all",this._onModelEvent,this)},_onModelEvent:function(n,t,i,r){(n=="add"||n=="remove")&&i!=this||(n=="destroy"&&this.remove(t,r),t&&n==="change:"+t.idAttribute&&(delete this._byId[t.previous(t.idAttribute)],this._byId[t.id]=t),this.trigger.apply(this,arguments))}}),n.each("forEach,each,map,reduce,reduceRight,find,detect,filter,select,reject,every,all,some,any,include,contains,invoke,max,min,sortBy,sortedIndex,toArray,size,first,initial,rest,last,without,indexOf,shuffle,lastIndexOf,isEmpty,groupBy".split(","),function(t){h.prototype[t]=function(){return n[t].apply(n,[this.models].concat(n.toArray(arguments)))}});var l=t.Router=function(n){n||(n={}),n.routes&&(this.routes=n.routes),this._bindRoutes(),this.initialize.apply(this,arguments)},g=/:\w+/g,nt=/\*\w+/g,tt=/[-[\]{}()+?.,\\^$|#\s]/g;n.extend(l.prototype,r,{initialize:function(){},route:function(i,r,u){return t.history||(t.history=new f),n.isRegExp(i)||(i=this._routeToRegExp(i)),u||(u=this[r]),t.history.route(i,n.bind(function(n){n=this._extractParameters(i,n),u&&u.apply(this,n),this.trigger.apply(this,["route:"+r].concat(n)),t.history.trigger("route",this,r,n)},this)),this},navigate:function(n,i){t.history.navigate(n,i)},_bindRoutes:function(){var t,n,i;if(this.routes){t=[];for(n in this.routes)t.unshift([n,this.routes[n]]);for(n=0,i=t.length;n<i;n++)this.route(t[n][0],t[n][1],this[t[n][1]])}},_routeToRegExp:function(n){return n=n.replace(tt,"\\$&").replace(g,"([^/]+)").replace(nt,"(.*?)"),RegExp("^"+n+"$")},_extractParameters:function(n,t){return n.exec(t).slice(1)}});var f=t.History=function(){this.handlers=[],n.bindAll(this,"checkUrl")},c=/^[#\/]/,it=/msie [\w.]+/;f.started=!1,n.extend(f.prototype,r,{interval:50,getHash:function(n){return(n=(n?n.location:window.location).href.match(/#(.*)$/))?n[1]:""},getFragment:function(n,t){if(n==null)if(this._hasPushState||t){var n=window.location.pathname,i=window.location.search;i&&(n+=i)}else n=this.getHash();return n.indexOf(this.options.root)||(n=n.substr(this.options.root.length)),n.replace(c,"")},start:function(t){if(f.started)throw Error("Backbone.history has already been started");f.started=!0,this.options=n.extend({},{root:"/"},this.options,t),this._wantsHashChange=this.options.hashChange!==!1,this._wantsPushState=!!this.options.pushState,this._hasPushState=!(!this.options.pushState||!window.history||!window.history.pushState);var t=this.getFragment(),r=document.documentMode;return((r=it.exec(navigator.userAgent.toLowerCase())&&(!r||r<=7))&&(this.iframe=i('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(t)),this._hasPushState?i(window).bind("popstate",this.checkUrl):this._wantsHashChange&&"onhashchange"in window&&!r?i(window).bind("hashchange",this.checkUrl):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,this.interval)),this.fragment=t,t=window.location,r=t.pathname==this.options.root,this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!r)?(this.fragment=this.getFragment(null,!0),window.location.replace(this.options.root+"#"+this.fragment),!0):(this._wantsPushState&&this._hasPushState&&r&&t.hash&&(this.fragment=this.getHash().replace(c,""),window.history.replaceState({},document.title,t.protocol+"//"+t.host+this.options.root+this.fragment)),this.options.silent?void 0:this.loadUrl())},stop:function(){i(window).unbind("popstate",this.checkUrl).unbind("hashchange",this.checkUrl),clearInterval(this._checkUrlInterval),f.started=!1},route:function(n,t){this.handlers.unshift({route:n,callback:t})},checkUrl:function(){var n=this.getFragment();if(n==this.fragment&&this.iframe&&(n=this.getFragment(this.getHash(this.iframe))),n==this.fragment)return!1;this.iframe&&this.navigate(n),this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(t){var i=this.fragment=this.getFragment(t);return n.any(this.handlers,function(n){if(n.route.test(i))return n.callback(i),!0})},navigate:function(n,t){if(!f.started)return!1;t&&t!==!0||(t={trigger:t});var i=(n||"").replace(c,"");this.fragment!=i&&(this._hasPushState?(i.indexOf(this.options.root)!=0&&(i=this.options.root+i),this.fragment=i,window.history[t.replace?"replaceState":"pushState"]({},document.title,i)):this._wantsHashChange?(this.fragment=i,this._updateHash(window.location,i,t.replace),this.iframe&&i!=this.getFragment(this.getHash(this.iframe))&&(t.replace||this.iframe.document.open().close(),this._updateHash(this.iframe.location,i,t.replace))):window.location.assign(this.options.root+n),t.trigger&&this.loadUrl(n))},_updateHash:function(n,t,i){i?n.replace(n.toString().replace(/(javascript:|#).*$/,"")+"#"+t):n.hash=t}});var a=t.View=function(t){this.cid=n.uniqueId("view"),this._configure(t||{}),this._ensureElement(),this.initialize.apply(this,arguments),this.delegateEvents()},rt=/^(\S+)\s*(.*)$/,v="model,collection,el,id,attributes,className,tagName".split(",");n.extend(a.prototype,r,{tagName:"div",$:function(n){return this.$el.find(n)},initialize:function(){},render:function(){return this},remove:function(){return this.$el.remove(),this},make:function(n,t,r){return n=document.createElement(n),t&&i(n).attr(t),r!=null&&i(n).html(r),n},setElement:function(n,t){return this.$el&&this.undelegateEvents(),this.$el=n instanceof i?n:i(n),this.el=this.$el[0],t!==!1&&this.delegateEvents(),this},delegateEvents:function(t){var r,i;if(t||(t=o(this,"events"))){this.undelegateEvents();for(r in t){if(i=t[r],n.isFunction(i)||(i=this[t[r]]),!i)throw Error('Method "'+t[r]+'" does not exist');var u=r.match(rt),f=u[1],u=u[2],i=n.bind(i,this);f+=".delegateEvents"+this.cid,u===""?this.$el.bind(f,i):this.$el.delegate(u,f,i)}}},undelegateEvents:function(){this.$el.unbind(".delegateEvents"+this.cid)},_configure:function(t){var i,u,r;for(this.options&&(t=n.extend({},this.options,t)),i=0,u=v.length;i<u;i++)r=v[i],t[r]&&(this[r]=t[r]);this.options=t},_ensureElement:function(){if(this.el)this.setElement(this.el,!1);else{var t=n.extend({},o(this,"attributes"));this.id&&(t.id=this.id),this.className&&(t["class"]=this.className),this.setElement(this.make(this.tagName,t),!1)}}}),e.extend=h.extend=l.extend=a.extend=function(n,t){var i=ut(this,n,t);return i.extend=this.extend,i},y={create:"POST",update:"PUT","delete":"DELETE",read:"GET"},t.sync=function(r,u,f){var s=y[r],e;return f||(f={}),e={type:s,dataType:"json"},f.url||(e.url=o(u,"url")||w()),!f.data&&u&&(r=="create"||r=="update")&&(e.contentType="application/json",e.data=JSON.stringify(u)),t.emulateJSON&&(e.contentType="application/x-www-form-urlencoded",e.data=e.data?{model:e.data}:{}),t.emulateHTTP&&(s==="PUT"||s==="DELETE")&&(t.emulateJSON&&(e.data._method=s),e.type="POST",e.beforeSend=function(n){n.setRequestHeader("X-HTTP-Method-Override",s)}),e.type==="GET"||t.emulateJSON||(e.processData=!1),i.ajax(n.extend(e,f))},t.wrapError=function(n,t,i){return function(r,u){u=r===t?u:r,n?n(t,u,i):t.trigger("error",t,u,i)}};var p=function(){},ut=function(t,i,r){var u;return u=i&&i.hasOwnProperty("constructor")?i.constructor:function(){t.apply(this,arguments)},n.extend(u,t),p.prototype=t.prototype,u.prototype=new p,i&&n.extend(u.prototype,i),r&&n.extend(u,r),u.prototype.constructor=u,u.__super__=t.prototype,u},o=function(t,i){return!t||!t[i]?null:n.isFunction(t[i])?t[i]():t[i]},w=function(){throw Error('A "url" property or function must be specified');}}.call(this)