Skip to content

Instantly share code, notes, and snippets.

@leebyron
Last active August 29, 2015 14:07
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leebyron/8686d8a53695ffa6f12b to your computer and use it in GitHub Desktop.
Save leebyron/8686d8a53695ffa6f12b to your computer and use it in GitHub Desktop.
Immutable vs transducers.js (operation only)
var Benchmark = require('benchmark');
var t = require('transducers.js');
var Immutable = require('immutable');
var suite = Benchmark.Suite('transducers');
function benchArray(n) {
var arr = new Immutable.Range(0, n).toVector();
var transform = t.compose(
t.map(function(x) { return x + 10; }),
t.map(function(x) { return x * 2; }),
t.filter(function(x) { return x % 5 === 0; }),
t.filter(function(x) { return x % 2 === 0; }));
var lazy = arr.map(function(x) { return x + 10; })
.map(function(x) { return x * 2; })
.filter(function(x) { return x % 5 === 0; })
.filter(function(x) { return x % 2 === 0; });
suite
.add('Immutable map/filter (' + n + ')', function() {
lazy.toVector();
})
.add('transducer map/filter (' + n + ')', function() {
Immutable.Vector.from(
t.seq(arr,
transform)
)
});
}
benchArray(1000);
benchArray(100000);
suite.on('cycle', function(event) {
console.log(String(event.target));
});
suite.run();
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var process=module.exports={};process.nextTick=function(){var canSetImmediate=typeof window!=="undefined"&&window.setImmediate;var canPost=typeof window!=="undefined"&&window.postMessage&&window.addEventListener;if(canSetImmediate){return function(f){return window.setImmediate(f)}}if(canPost){var queue=[];window.addEventListener("message",function(ev){var source=ev.source;if((source===window||source===null)&&ev.data==="process-tick"){ev.stopPropagation();if(queue.length>0){var fn=queue.shift();fn()}}},true);return function nextTick(fn){queue.push(fn);window.postMessage("process-tick","*")}}return function nextTick(fn){setTimeout(fn,0)}}();process.title="browser";process.browser=true;process.env={};process.argv=[];function noop(){}process.on=noop;process.addListener=noop;process.once=noop;process.off=noop;process.removeListener=noop;process.removeAllListeners=noop;process.emit=noop;process.binding=function(name){throw new Error("process.binding is not supported")};process.cwd=function(){return"/"};process.chdir=function(dir){throw new Error("process.chdir is not supported")}},{}],benchmark:[function(require,module,exports){(function(process,global){(function(window,undefined){"use strict";var counter=0;var doc=isHostType(window,"document")&&document;var freeDefine=typeof define=="function"&&typeof define.amd=="object"&&define.amd&&define;var freeExports=typeof exports=="object"&&exports&&(typeof global=="object"&&global&&global==global.global&&(window=global),exports);var freeRequire=typeof require=="function"&&require;var getAllKeys=Object.getOwnPropertyNames;var getDescriptor=Object.getOwnPropertyDescriptor;var hasOwnProperty={}.hasOwnProperty;var isExtensible=Object.isExtensible||function(){return true};var microtimeObject=req("microtime");var perfObject=isHostType(window,"performance")&&performance;var perfName=perfObject&&(perfObject.now&&"now"||perfObject.webkitNow&&"webkitNow");var processObject=isHostType(window,"process")&&process;var propertyIsEnumerable={}.propertyIsEnumerable;var setDescriptor=Object.defineProperty;var toString={}.toString;var trash=doc&&doc.createElement("div");var uid="uid"+ +new Date;var calledBy={};var divisors={1:4096,2:512,3:64,4:8,5:0};var tTable={1:12.706,2:4.303,3:3.182,4:2.776,5:2.571,6:2.447,7:2.365,8:2.306,9:2.262,10:2.228,11:2.201,12:2.179,13:2.16,14:2.145,15:2.131,16:2.12,17:2.11,18:2.101,19:2.093,20:2.086,21:2.08,22:2.074,23:2.069,24:2.064,25:2.06,26:2.056,27:2.052,28:2.048,29:2.045,30:2.042,infinity:1.96};var uTable={5:[0,1,2],6:[1,2,3,5],7:[1,3,5,6,8],8:[2,4,6,8,10,13],9:[2,4,7,10,12,15,17],10:[3,5,8,11,14,17,20,23],11:[3,6,9,13,16,19,23,26,30],12:[4,7,11,14,18,22,26,29,33,37],13:[4,8,12,16,20,24,28,33,37,41,45],14:[5,9,13,17,22,26,31,36,40,45,50,55],15:[5,10,14,19,24,29,34,39,44,49,54,59,64],16:[6,11,15,21,26,31,37,42,47,53,59,64,70,75],17:[6,11,17,22,28,34,39,45,51,57,63,67,75,81,87],18:[7,12,18,24,30,36,42,48,55,61,67,74,80,86,93,99],19:[7,13,19,25,32,38,45,52,58,65,72,78,85,92,99,106,113],20:[8,14,20,27,34,41,48,55,62,69,76,83,90,98,105,112,119,127],21:[8,15,22,29,36,43,50,58,65,73,80,88,96,103,111,119,126,134,142],22:[9,16,23,30,38,45,53,61,69,77,85,93,101,109,117,125,133,141,150,158],23:[9,17,24,32,40,48,56,64,73,81,89,98,106,115,123,132,140,149,157,166,175],24:[10,17,25,33,42,50,59,67,76,85,94,102,111,120,129,138,147,156,165,174,183,192],25:[10,18,27,35,44,53,62,71,80,89,98,107,117,126,135,145,154,163,173,182,192,201,211],26:[11,19,28,37,46,55,64,74,83,93,102,112,122,132,141,151,161,171,181,191,200,210,220,230],27:[11,20,29,38,48,57,67,77,87,97,107,118,125,138,147,158,168,178,188,199,209,219,230,240,250],28:[12,21,30,40,50,60,70,80,90,101,111,122,132,143,154,164,175,186,196,207,218,228,239,250,261,272],29:[13,22,32,42,52,62,73,83,94,105,116,127,138,149,160,171,182,193,204,215,226,238,249,260,271,282,294],30:[13,23,33,43,54,65,76,87,98,109,120,131,143,154,166,177,189,200,212,223,235,247,258,270,282,293,305,317]};var support={};(function(){support.air=isClassOf(window.runtime,"ScriptBridgingProxyObject");support.argumentsClass=isClassOf(arguments,"Arguments");support.browser=doc&&isHostType(window,"navigator");support.charByIndex="x"[0]+Object("x")[0]=="xx";support.charByOwnIndex=support.charByIndex&&hasKey("x","0");support.java=isClassOf(window.java,"JavaPackage");support.timeout=isHostType(window,"setTimeout")&&isHostType(window,"clearTimeout");try{support.decompilation=Function("return ("+function(x){return{x:""+(1+x)+"",y:0}}+")")()(0).x==="1"}catch(e){support.decompilation=false}try{var o={};support.descriptors=(setDescriptor(o,o,o),"value"in getDescriptor(o,o))}catch(e){support.descriptors=false}try{support.getAllKeys=/\bvalueOf\b/.test(getAllKeys(Object.prototype))}catch(e){support.getAllKeys=false}support.iteratesOwnFirst=function(){var props=[];function ctor(){this.x=1}ctor.prototype={y:1};for(var prop in new ctor){props.push(prop)}return props[0]=="x"}();try{support.nodeClass=({toString:0}+"",toString.call(doc||0)!="[object Object]")}catch(e){support.nodeClass=true}})();var timer={ns:Date,start:null,stop:null};var noArgumentsClass=!support.argumentsClass,noCharByIndex=!support.charByIndex,noCharByOwnIndex=!support.charByOwnIndex;var abs=Math.abs,floor=Math.floor,max=Math.max,min=Math.min,pow=Math.pow,sqrt=Math.sqrt;function Benchmark(name,fn,options){var me=this;if(me==null||me.constructor!=Benchmark){return new Benchmark(name,fn,options)}if(isClassOf(name,"Object")){options=name}else if(isClassOf(name,"Function")){options=fn;fn=name}else if(isClassOf(fn,"Object")){options=fn;fn=null;me.name=name}else{me.name=name}setOptions(me,options);me.id||(me.id=++counter);me.fn==null&&(me.fn=fn);me.stats=deepClone(me.stats);me.times=deepClone(me.times)}function Deferred(clone){var me=this;if(me==null||me.constructor!=Deferred){return new Deferred(clone)}me.benchmark=clone;clock(me)}function Event(type){var me=this;return me==null||me.constructor!=Event?new Event(type):type instanceof Event?type:extend(me,{timeStamp:+new Date},typeof type=="string"?{type:type}:type)}function Suite(name,options){var me=this;if(me==null||me.constructor!=Suite){return new Suite(name,options)}if(isClassOf(name,"Object")){options=name}else{me.name=name}setOptions(me,options)}function concat(){var value,j=-1,length=arguments.length,result=slice.call(this),index=result.length;while(++j<length){value=arguments[j];if(isClassOf(value,"Array")){for(var k=0,l=value.length;k<l;k++,index++){if(k in value){result[index]=value[k]}}}else{result[index++]=value}}return result}function insert(start,deleteCount,elements){var deleteEnd=start+deleteCount,elementCount=elements?elements.length:0,index=start-1,length=start+elementCount,object=this,result=Array(deleteCount),tail=slice.call(object,deleteEnd);while(++index<deleteEnd){if(index in object){result[index-start]=object[index];delete object[index]}}index=start-1;while(++index<length){object[index]=elements[index-start]}start=index--;length=max(0,(object.length>>>0)-deleteCount+elementCount);while(++index<length){if(index-start in tail){object[index]=tail[index-start]}else if(index in object){delete object[index]}}deleteCount=deleteCount>elementCount?deleteCount-elementCount:0;while(deleteCount--){index=length+deleteCount;if(index in object){delete object[index]}}object.length=length;return result}function reverse(){var upperIndex,value,index=-1,object=Object(this),length=object.length>>>0,middle=floor(length/2);if(length>1){while(++index<middle){upperIndex=length-index-1;value=upperIndex in object?object[upperIndex]:uid;if(index in object){object[upperIndex]=object[index]}else{delete object[upperIndex]}if(value!=uid){object[index]=value}else{delete object[index]}}}return object}function shift(){return insert.call(this,0,1)[0]}function slice(start,end){var index=-1,object=Object(this),length=object.length>>>0,result=[];start=toInteger(start);start=start<0?max(length+start,0):min(start,length);start--;end=end==null?length:toInteger(end);end=end<0?max(length+end,0):min(end,length);while((++index,++start)<end){if(start in object){result[index]=object[start]}}return result}function splice(start,deleteCount){var object=Object(this),length=object.length>>>0;start=toInteger(start);start=start<0?max(length+start,0):min(start,length);deleteCount=arguments.length==1?length-start:min(max(toInteger(deleteCount),0),length-start);return insert.call(object,start,deleteCount,slice.call(arguments,2))}function toInteger(value){value=+value;return value===0||!isFinite(value)?value||0:value-value%1}function unshift(){var object=Object(this);insert.call(object,0,0,arguments);return object.length}function bind(fn,thisArg){return function(){fn.apply(thisArg,arguments)}}function createFunction(){createFunction=function(args,body){var result,anchor=freeDefine?define.amd:Benchmark,prop=uid+"createFunction";runScript((freeDefine?"define.amd.":"Benchmark.")+prop+"=function("+args+"){"+body+"}");result=anchor[prop];delete anchor[prop];return result};createFunction=support.browser&&(createFunction("",'return"'+uid+'"')||noop)()==uid?createFunction:Function;return createFunction.apply(null,arguments)}function delay(bench,fn){bench._timerId=setTimeout(fn,bench.delay*1e3)}function destroyElement(element){trash.appendChild(element);trash.innerHTML=""}function forProps(){var forShadowed,skipSeen,forArgs=true,shadowed=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"];(function(enumFlag,key){function Klass(){this.valueOf=0}Klass.prototype.valueOf=0;for(key in new Klass){enumFlag+=key=="valueOf"?1:0}for(key in arguments){key=="0"&&(forArgs=false)}skipSeen=enumFlag==2;forShadowed=!enumFlag})(0);forProps=function(object,callback,options){options||(options={});var result=object;object=Object(object);var ctor,key,keys,skipCtor,done=!result,which=options.which,allFlag=which=="all",index=-1,iteratee=object,length=object.length,ownFlag=allFlag||which=="own",seen={},skipProto=isClassOf(object,"Function"),thisArg=options.bind;if(thisArg!==undefined){callback=bind(callback,thisArg)}if(allFlag&&support.getAllKeys){for(index=0,keys=getAllKeys(object),length=keys.length;index<length;index++){key=keys[index];if(callback(object[key],key,object)===false){break}}}else{for(key in object){if(done=!(skipProto&&key=="prototype")&&!(skipSeen&&(hasKey(seen,key)||!(seen[key]=true)))&&(!ownFlag||ownFlag&&hasKey(object,key))&&callback(object[key],key,object)===false){break}}if(!done&&(forArgs&&isArguments(object)||(noCharByIndex||noCharByOwnIndex)&&isClassOf(object,"String")&&(iteratee=noCharByIndex?object.split(""):object))){while(++index<length){if(done=callback(iteratee[index],String(index),object)===false){break}}}if(!done&&forShadowed){ctor=object.constructor;skipCtor=ctor&&ctor.prototype&&ctor.prototype.constructor===ctor;for(index=0;index<7;index++){key=shadowed[index];if(!(skipCtor&&key=="constructor")&&hasKey(object,key)&&callback(object[key],key,object)===false){break}}}}return result};return forProps.apply(null,arguments)}function getFirstArgument(fn){return!hasKey(fn,"toString")&&(/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn)||0)[1]||""}function getMean(sample){return reduce(sample,function(sum,x){return sum+x})/sample.length||0}function getSource(fn,altSource){var result=altSource;if(isStringable(fn)){result=String(fn)}else if(support.decompilation){result=(/^[^{]+\{([\s\S]*)}\s*$/.exec(fn)||0)[1]}result=(result||"").replace(/^\s+|\s+$/g,"");return/^(?:\/\*+[\w|\W]*?\*\/|\/\/.*?[\n\r\u2028\u2029]|\s)*(["'])use strict\1;?$/.test(result)?"":result}function isArguments(){isArguments=function(value){return toString.call(value)=="[object Arguments]"};if(noArgumentsClass){isArguments=function(value){return hasKey(value,"callee")&&!(propertyIsEnumerable&&propertyIsEnumerable.call(value,"callee"))}}return isArguments(arguments[0])}function isClassOf(value,name){return value!=null&&toString.call(value)=="[object "+name+"]"}function isHostType(object,property){var type=object!=null?typeof object[property]:"number";return!/^(?:boolean|number|string|undefined)$/.test(type)&&(type=="object"?!!object[property]:true)}function isPlainObject(value){var result=false;if(!(value&&typeof value=="object")||noArgumentsClass&&isArguments(value)){return result}var ctor=value.constructor;if((support.nodeClass||!(typeof value.toString!="function"&&typeof(value+"")=="string"))&&(!isClassOf(ctor,"Function")||ctor instanceof ctor)){if(support.iteratesOwnFirst){forProps(value,function(subValue,subKey){result=subKey});return result===false||hasKey(value,result)}forProps(value,function(subValue,subKey){result=!hasKey(value,subKey);return false});return result===false}return result}function isStringable(value){return hasKey(value,"toString")||isClassOf(value,"String")}function methodize(fn){return function(){var args=[this];args.push.apply(args,arguments);return fn.apply(null,args)}}function noop(){}function req(id){try{var result=freeExports&&freeRequire(id)}catch(e){}return result||null}function runScript(code){var anchor=freeDefine?define.amd:Benchmark,script=doc.createElement("script"),sibling=doc.getElementsByTagName("script")[0],parent=sibling.parentNode,prop=uid+"runScript",prefix="("+(freeDefine?"define.amd.":"Benchmark.")+prop+"||function(){})();";try{script.appendChild(doc.createTextNode(prefix+code));anchor[prop]=function(){destroyElement(script)}}catch(e){parent=parent.cloneNode(false);sibling=null;script.text=code}parent.insertBefore(script,sibling);delete anchor[prop]}function setOptions(bench,options){options=extend({},bench.constructor.options,options);bench.options=forOwn(options,function(value,key){if(value!=null){if(/^on[A-Z]/.test(key)){forEach(key.split(" "),function(key){bench.on(key.slice(2).toLowerCase(),value)})}else if(!hasKey(bench,key)){bench[key]=deepClone(value)}}})}function resolve(){var me=this,clone=me.benchmark,bench=clone._original;if(bench.aborted){me.teardown();clone.running=false;cycle(me)}else if(++me.cycles<clone.count){if(support.timeout){setTimeout(function(){clone.compiled.call(me,timer)},0)}else{clone.compiled.call(me,timer)}}else{timer.stop(me);me.teardown();delay(clone,function(){cycle(me)})}}function deepClone(value){var accessor,circular,clone,ctor,descriptor,extensible,key,length,markerKey,parent,result,source,subIndex,data={value:value},index=0,marked=[],queue={length:0},unmarked=[];function Marker(object){this.raw=object}function forPropsCallback(subValue,subKey){if(subValue&&subValue.constructor==Marker){return}if(subValue===Object(subValue)){queue[queue.length++]={key:subKey,parent:clone,source:value}}else{try{clone[subKey]=subValue}catch(e){}}}function getMarkerKey(object){var result=uid;while(object[result]&&object[result].constructor!=Marker){result+=1}return result}do{key=data.key;parent=data.parent;source=data.source;clone=value=source?source[key]:data.value;accessor=circular=descriptor=false;if(value===Object(value)){if(isClassOf(value.deepClone,"Function")){clone=value.deepClone()}else{ctor=value.constructor;switch(toString.call(value)){case"[object Array]":clone=new ctor(value.length);break;case"[object Boolean]":clone=new ctor(value==true);break;case"[object Date]":clone=new ctor(+value);break;case"[object Object]":isPlainObject(value)&&(clone={});break;case"[object Number]":case"[object String]":clone=new ctor(value);break;case"[object RegExp]":clone=ctor(value.source,(value.global?"g":"")+(value.ignoreCase?"i":"")+(value.multiline?"m":""))}}if(clone&&clone!=value&&!(descriptor=source&&support.descriptors&&getDescriptor(source,key),accessor=descriptor&&(descriptor.get||descriptor.set))){if(extensible=isExtensible(value)){markerKey=getMarkerKey(value);if(value[markerKey]){circular=clone=value[markerKey].raw}}else{for(subIndex=0,length=unmarked.length;subIndex<length;subIndex++){data=unmarked[subIndex];if(data.object===value){circular=clone=data.clone;break}}}if(!circular){if(extensible){value[markerKey]=new Marker(clone);marked.push({key:markerKey,object:value})}else{unmarked.push({clone:clone,object:value})}forProps(value,forPropsCallback,{which:"all"})}}}if(parent){if(accessor||descriptor&&!(descriptor.configurable&&descriptor.enumerable&&descriptor.writable)){if("value"in descriptor){descriptor.value=clone}setDescriptor(parent,key,descriptor)}else{parent[key]=clone}}else{result=clone}}while(data=queue[index++]);for(index=0,length=marked.length;index<length;index++){data=marked[index];delete data.object[data.key]}return result}function each(object,callback,thisArg){var result=object;object=Object(object);var fn=callback,index=-1,length=object.length,isSnapshot=!!(object.snapshotItem&&(length=object.snapshotLength)),isSplittable=(noCharByIndex||noCharByOwnIndex)&&isClassOf(object,"String"),isConvertable=isSnapshot||isSplittable||"item"in object,origObject=object;if(length===length>>>0){if(isConvertable){callback=function(value,index){return fn.call(this,value,index,origObject)};if(isSplittable){object=object.split("")}else{object=[];while(++index<length){object[index]=isSnapshot?result.snapshotItem(index):result[index]}}}forEach(object,callback,thisArg)}else{forOwn(object,callback,thisArg)}return result}function extend(destination,source){var result=destination;delete arguments[0];forEach(arguments,function(source){forProps(source,function(value,key){result[key]=value})});return result}function filter(array,callback,thisArg){var result;if(callback=="successful"){callback=function(bench){return bench.cycles&&isFinite(bench.hz)}}else if(callback=="fastest"||callback=="slowest"){result=filter(array,"successful").sort(function(a,b){a=a.stats;b=b.stats;return(a.mean+a.moe>b.mean+b.moe?1:-1)*(callback=="fastest"?1:-1)});result=filter(result,function(bench){return result[0].compare(bench)==0})}return result||reduce(array,function(result,value,index){return callback.call(thisArg,value,index,array)?(result.push(value),result):result},[])}function forEach(array,callback,thisArg){var index=-1,length=(array=Object(array)).length>>>0;if(thisArg!==undefined){callback=bind(callback,thisArg)}while(++index<length){if(index in array&&callback(array[index],index,array)===false){break}}return array}function forOwn(object,callback,thisArg){return forProps(object,callback,{bind:thisArg,which:"own"})}function formatNumber(number){number=String(number).split(".");return number[0].replace(/(?=(?:\d{3})+$)(?!\b)/g,",")+(number[1]?"."+number[1]:"")}function hasKey(){hasKey=function(object,key){var parent=object!=null&&(object.constructor||Object).prototype;return!!parent&&key in Object(object)&&!(key in parent&&object[key]===parent[key])};if(isClassOf(hasOwnProperty,"Function")){hasKey=function(object,key){return object!=null&&hasOwnProperty.call(object,key)}}else if({}.__proto__==Object.prototype){hasKey=function(object,key){var result=false;if(object!=null){object=Object(object);object.__proto__=[object.__proto__,object.__proto__=null,result=key in object][0]}return result}}return hasKey.apply(this,arguments)}function indexOf(array,value,fromIndex){var index=toInteger(fromIndex),length=(array=Object(array)).length>>>0;index=(index<0?max(0,length+index):index)-1;while(++index<length){if(index in array&&value===array[index]){return index}}return-1}function interpolate(string,object){forOwn(object,function(value,key){string=string.replace(RegExp("#\\{"+key.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")+"\\}","g"),value)});return string}function invoke(benches,name){var args,bench,queued,index=-1,eventProps={currentTarget:benches},options={onStart:noop,onCycle:noop,onComplete:noop},result=map(benches,function(bench){return bench});function execute(){var listeners,async=isAsync(bench);if(async){bench.on("complete",getNext);listeners=bench.events.complete;listeners.splice(0,0,listeners.pop())}result[index]=isClassOf(bench&&bench[name],"Function")?bench[name].apply(bench,args):undefined;return!async&&getNext()}function getNext(event){var cycleEvent,last=bench,async=isAsync(last);if(async){last.off("complete",getNext);last.emit("complete")}eventProps.type="cycle";eventProps.target=last;cycleEvent=Event(eventProps);options.onCycle.call(benches,cycleEvent);if(!cycleEvent.aborted&&raiseIndex()!==false){bench=queued?benches[0]:result[index];if(isAsync(bench)){delay(bench,execute)}else if(async){while(execute()){}}else{return true}}else{eventProps.type="complete";options.onComplete.call(benches,Event(eventProps))}if(event){event.aborted=true}else{return false}}function isAsync(object){var async=args[0]&&args[0].async;return Object(object).constructor==Benchmark&&name=="run"&&((async==null?object.options.async:async)&&support.timeout||object.defer)}function raiseIndex(){var length=result.length;if(queued){do{++index>0&&shift.call(benches)}while((length=benches.length)&&!("0"in benches))}else{while(++index<length&&!(index in result)){}}return(queued?length:index<length)?index:index=false}if(isClassOf(name,"String")){args=slice.call(arguments,2)}else{options=extend(options,name);name=options.name;args=isClassOf(args="args"in options?options.args:[],"Array")?args:[args];queued=options.queued}if(raiseIndex()!==false){bench=result[index];eventProps.type="start";eventProps.target=bench;options.onStart.call(benches,Event(eventProps));if(benches.aborted&&benches.constructor==Suite&&name=="run"){eventProps.type="cycle";options.onCycle.call(benches,Event(eventProps));eventProps.type="complete";options.onComplete.call(benches,Event(eventProps))}else{if(isAsync(bench)){delay(bench,execute)}else{while(execute()){}}}}return result}function join(object,separator1,separator2){var result=[],length=(object=Object(object)).length,arrayLike=length===length>>>0;separator2||(separator2=": ");each(object,function(value,key){result.push(arrayLike?value:key+separator2+value)});return result.join(separator1||",")}function map(array,callback,thisArg){return reduce(array,function(result,value,index){result[index]=callback.call(thisArg,value,index,array);return result},Array(Object(array).length>>>0))}function pluck(array,property){return map(array,function(object){return object==null?undefined:object[property]})}function reduce(array,callback,accumulator){var noaccum=arguments.length<3;forEach(array,function(value,index){accumulator=noaccum?(noaccum=false,value):callback(accumulator,value,index,array)});return accumulator}function abortSuite(){var event,me=this,resetting=calledBy.resetSuite;if(me.running){event=Event("abort");me.emit(event);if(!event.cancelled||resetting){calledBy.abortSuite=true;me.reset();delete calledBy.abortSuite;if(!resetting){me.aborted=true;invoke(me,"abort")}}}return me}function add(name,fn,options){var me=this,bench=Benchmark(name,fn,options),event=Event({type:"add",target:bench});if(me.emit(event),!event.cancelled){me.push(bench)}return me}function cloneSuite(options){var me=this,result=new me.constructor(extend({},me.options,options));forOwn(me,function(value,key){if(!hasKey(result,key)){result[key]=value&&isClassOf(value.clone,"Function")?value.clone():deepClone(value)}});return result}function filterSuite(callback){var me=this,result=new me.constructor;result.push.apply(result,filter(me,callback));return result}function resetSuite(){var event,me=this,aborting=calledBy.abortSuite;if(me.running&&!aborting){calledBy.resetSuite=true;me.abort();delete calledBy.resetSuite}else if((me.aborted||me.running)&&(me.emit(event=Event("reset")),!event.cancelled)){me.running=false;if(!aborting){invoke(me,"reset")}}return me}function runSuite(options){var me=this;me.reset();me.running=true;options||(options={});invoke(me,{name:"run",args:options,queued:options.queued,onStart:function(event){me.emit(event)},onCycle:function(event){var bench=event.target;if(bench.error){me.emit({type:"error",target:bench})}me.emit(event);event.aborted=me.aborted},onComplete:function(event){me.running=false;me.emit(event)}});return me}function emit(type){var listeners,me=this,event=Event(type),events=me.events,args=(arguments[0]=event,arguments);event.currentTarget||(event.currentTarget=me);event.target||(event.target=me);delete event.result;if(events&&(listeners=hasKey(events,event.type)&&events[event.type])){forEach(listeners.slice(),function(listener){if((event.result=listener.apply(me,args))===false){event.cancelled=true}return!event.aborted})}return event.result}function listeners(type){var me=this,events=me.events||(me.events={});return hasKey(events,type)?events[type]:events[type]=[]}function off(type,listener){var me=this,events=me.events;events&&each(type?type.split(" "):events,function(listeners,type){var index;if(typeof listeners=="string"){type=listeners;listeners=hasKey(events,type)&&events[type]}if(listeners){if(listener){index=indexOf(listeners,listener);if(index>-1){listeners.splice(index,1)}}else{listeners.length=0}}});return me}function on(type,listener){var me=this,events=me.events||(me.events={});forEach(type.split(" "),function(type){(hasKey(events,type)?events[type]:events[type]=[]).push(listener)});return me}function abort(){var event,me=this,resetting=calledBy.reset;if(me.running){event=Event("abort");me.emit(event);if(!event.cancelled||resetting){calledBy.abort=true;me.reset();delete calledBy.abort;if(support.timeout){clearTimeout(me._timerId);delete me._timerId}if(!resetting){me.aborted=true;me.running=false}}}return me}function clone(options){var me=this,result=new me.constructor(extend({},me,options));result.options=extend({},me.options,options);forOwn(me,function(value,key){if(!hasKey(result,key)){result[key]=deepClone(value)}});return result}function compare(other){var critical,zStat,me=this,sample1=me.stats.sample,sample2=other.stats.sample,size1=sample1.length,size2=sample2.length,maxSize=max(size1,size2),minSize=min(size1,size2),u1=getU(sample1,sample2),u2=getU(sample2,sample1),u=min(u1,u2);function getScore(xA,sampleB){return reduce(sampleB,function(total,xB){return total+(xB>xA?0:xB<xA?1:.5)},0)}function getU(sampleA,sampleB){return reduce(sampleA,function(total,xA){return total+getScore(xA,sampleB)},0)}function getZ(u){return(u-size1*size2/2)/sqrt(size1*size2*(size1+size2+1)/12)}if(me==other){return 0}if(size1+size2>30){zStat=getZ(u);return abs(zStat)>1.96?zStat>0?-1:1:0}critical=maxSize<5||minSize<3?0:uTable[maxSize][minSize-3];return u<=critical?u==u1?1:-1:0}function reset(){var data,event,me=this,index=0,changes={length:0},queue={length:0};if(me.running&&!calledBy.abort){calledBy.reset=true;me.abort();delete calledBy.reset}else{data={destination:me,source:extend({},me.constructor.prototype,me.options)};do{forOwn(data.source,function(value,key){var changed,destination=data.destination,currValue=destination[key];if(value&&typeof value=="object"){if(isClassOf(value,"Array")){if(!isClassOf(currValue,"Array")){changed=currValue=[]}if(currValue.length!=value.length){changed=currValue=currValue.slice(0,value.length);currValue.length=value.length}}else if(!currValue||typeof currValue!="object"){changed=currValue={}}if(changed){changes[changes.length++]={destination:destination,key:key,value:currValue}}queue[queue.length++]={destination:currValue,source:value}}else if(value!==currValue&&!(value==null||isClassOf(value,"Function"))){changes[changes.length++]={destination:destination,key:key,value:value}}})}while(data=queue[index++]);if(changes.length&&(me.emit(event=Event("reset")),!event.cancelled)){forEach(changes,function(data){data.destination[data.key]=data.value})}}return me}function toStringBench(){var me=this,error=me.error,hz=me.hz,id=me.id,stats=me.stats,size=stats.sample.length,pm=support.java?"+/-":"±",result=me.name||(isNaN(id)?id:"<Test #"+id+">");if(error){result+=": "+join(error)}else{result+=" x "+formatNumber(hz.toFixed(hz<100?2:0))+" ops/sec "+pm+stats.rme.toFixed(2)+"% ("+size+" run"+(size==1?"":"s")+" sampled)"}return result}function clock(){var applet,options=Benchmark.options,template={begin:"s$=new n$",end:"r$=(new n$-s$)/1e3",uid:uid},timers=[{ns:timer.ns,res:max(.0015,getRes("ms")),unit:"ms"}];clock=function(clone){var deferred;if(clone instanceof Deferred){deferred=clone;clone=deferred.benchmark}var bench=clone._original,fn=bench.fn,fnArg=deferred?getFirstArgument(fn)||"deferred":"",stringable=isStringable(fn);var source={setup:getSource(bench.setup,preprocess("m$.setup()")),fn:getSource(fn,preprocess("m$.fn("+fnArg+")")),fnArg:fnArg,teardown:getSource(bench.teardown,preprocess("m$.teardown()"))};var count=bench.count=clone.count,decompilable=support.decompilation||stringable,id=bench.id,isEmpty=!(source.fn||stringable),name=bench.name||(typeof id=="number"?"<Test #"+id+">":id),ns=timer.ns,result=0;clone.minTime=bench.minTime||(bench.minTime=bench.options.minTime=options.minTime);if(applet){try{ns.nanoTime()}catch(e){ns=timer.ns=new applet.Packages.nano}}var compiled=bench.compiled=createFunction(preprocess("t$"),interpolate(preprocess(deferred?"var d$=this,#{fnArg}=d$,m$=d$.benchmark._original,f$=m$.fn,su$=m$.setup,td$=m$.teardown;"+"if(!d$.cycles){"+'d$.fn=function(){var #{fnArg}=d$;if(typeof f$=="function"){try{#{fn}\n}catch(e$){f$(d$)}}else{#{fn}\n}};'+'d$.teardown=function(){d$.cycles=0;if(typeof td$=="function"){try{#{teardown}\n}catch(e$){td$()}}else{#{teardown}\n}};'+'if(typeof su$=="function"){try{#{setup}\n}catch(e$){su$()}}else{#{setup}\n};'+"t$.start(d$);"+"}d$.fn();return{}":"var r$,s$,m$=this,f$=m$.fn,i$=m$.count,n$=t$.ns;#{setup}\n#{begin};"+'while(i$--){#{fn}\n}#{end};#{teardown}\nreturn{elapsed:r$,uid:"#{uid}"}'),source));try{if(isEmpty){throw new Error('The test "'+name+'" is empty. This may be the result of dead code removal.')}else if(!deferred){bench.count=1;compiled=(compiled.call(bench,timer)||{}).uid==uid&&compiled;bench.count=count}}catch(e){compiled=null;clone.error=e||new Error(String(e));bench.count=count}if(decompilable&&!compiled&&!deferred&&!isEmpty){compiled=createFunction(preprocess("t$"),interpolate(preprocess((clone.error&&!stringable?"var r$,s$,m$=this,f$=m$.fn,i$=m$.count":"function f$(){#{fn}\n}var r$,s$,m$=this,i$=m$.count")+",n$=t$.ns;#{setup}\n#{begin};m$.f$=f$;while(i$--){m$.f$()}#{end};"+"delete m$.f$;#{teardown}\nreturn{elapsed:r$}"),source));try{bench.count=1;compiled.call(bench,timer);bench.compiled=compiled;bench.count=count;delete clone.error}catch(e){bench.count=count;if(clone.error){compiled=null}else{bench.compiled=compiled;clone.error=e||new Error(String(e))}}}clone.compiled=compiled;if(!clone.error){result=compiled.call(deferred||bench,timer).elapsed}return result};function getRes(unit){var measured,begin,count=30,divisor=1e3,ns=timer.ns,sample=[];while(count--){if(unit=="us"){divisor=1e6;if(ns.stop){ns.start();while(!(measured=ns.microseconds())){}}else if(ns[perfName]){divisor=1e3;measured=Function("n","var r,s=n."+perfName+"();while(!(r=n."+perfName+"()-s)){};return r")(ns)}else{begin=ns();while(!(measured=ns()-begin)){}}}else if(unit=="ns"){divisor=1e9;if(ns.nanoTime){begin=ns.nanoTime();while(!(measured=ns.nanoTime()-begin)){}}else{begin=(begin=ns())[0]+begin[1]/divisor;while(!(measured=(measured=ns())[0]+measured[1]/divisor-begin)){}divisor=1}}else{begin=new ns;while(!(measured=new ns-begin)){}}if(measured>0){sample.push(measured)}else{sample.push(Infinity);break}}return getMean(sample)/divisor}function preprocess(code){return interpolate(code,template).replace(/\$/g,/\d+/.exec(uid))}each(doc&&doc.applets||[],function(element){return!(timer.ns=applet="nanoTime"in element&&element)});try{if(typeof timer.ns.nanoTime()=="number"){timers.push({ns:timer.ns,res:getRes("ns"),unit:"ns"})}}catch(e){}try{if(timer.ns=new(window.chrome||window.chromium).Interval){timers.push({ns:timer.ns,res:getRes("us"),unit:"us"})
}}catch(e){}if(timer.ns=perfName&&perfObject){timers.push({ns:timer.ns,res:getRes("us"),unit:"us"})}if(processObject&&typeof(timer.ns=processObject.hrtime)=="function"){timers.push({ns:timer.ns,res:getRes("ns"),unit:"ns"})}if(microtimeObject&&typeof(timer.ns=microtimeObject.now)=="function"){timers.push({ns:timer.ns,res:getRes("us"),unit:"us"})}timer=reduce(timers,function(timer,other){return other.res<timer.res?other:timer});if(timer.unit!="ns"&&applet){applet=destroyElement(applet)}if(timer.res==Infinity){throw new Error("Benchmark.js was unable to find a working timer.")}if(timer.unit=="ns"){if(timer.ns.nanoTime){extend(template,{begin:"s$=n$.nanoTime()",end:"r$=(n$.nanoTime()-s$)/1e9"})}else{extend(template,{begin:"s$=n$()",end:"r$=n$(s$);r$=r$[0]+(r$[1]/1e9)"})}}else if(timer.unit=="us"){if(timer.ns.stop){extend(template,{begin:"s$=n$.start()",end:"r$=n$.microseconds()/1e6"})}else if(perfName){extend(template,{begin:"s$=n$."+perfName+"()",end:"r$=(n$."+perfName+"()-s$)/1e3"})}else{extend(template,{begin:"s$=n$()",end:"r$=(n$()-s$)/1e6"})}}timer.start=createFunction(preprocess("o$"),preprocess("var n$=this.ns,#{begin};o$.elapsed=0;o$.timeStamp=s$"));timer.stop=createFunction(preprocess("o$"),preprocess("var n$=this.ns,s$=o$.timeStamp,#{end};o$.elapsed=r$"));options.minTime||(options.minTime=max(timer.res/2/.01,.05));return clock.apply(null,arguments)}function compute(bench,options){options||(options={});var async=options.async,elapsed=0,initCount=bench.initCount,minSamples=bench.minSamples,queue=[],sample=bench.stats.sample;function enqueue(){queue.push(bench.clone({_original:bench,events:{abort:[update],cycle:[update],error:[update],start:[update]}}))}function update(event){var clone=this,type=event.type;if(bench.running){if(type=="start"){clone.count=bench.initCount}else{if(type=="error"){bench.error=clone.error}if(type=="abort"){bench.abort();bench.emit("cycle")}else{event.currentTarget=event.target=bench;bench.emit(event)}}}else if(bench.aborted){clone.events.abort.length=0;clone.abort()}}function evaluate(event){var critical,df,mean,moe,rme,sd,sem,variance,clone=event.target,done=bench.aborted,now=+new Date,size=sample.push(clone.times.period),maxedOut=size>=minSamples&&(elapsed+=now-clone.times.timeStamp)/1e3>bench.maxTime,times=bench.times,varOf=function(sum,x){return sum+pow(x-mean,2)};if(done||clone.hz==Infinity){maxedOut=!(size=sample.length=queue.length=0)}if(!done){mean=getMean(sample);variance=reduce(sample,varOf,0)/(size-1)||0;sd=sqrt(variance);sem=sd/sqrt(size);df=size-1;critical=tTable[Math.round(df)||1]||tTable.infinity;moe=sem*critical;rme=moe/mean*100||0;extend(bench.stats,{deviation:sd,mean:mean,moe:moe,rme:rme,sem:sem,variance:variance});if(maxedOut){bench.initCount=initCount;bench.running=false;done=true;times.elapsed=(now-times.timeStamp)/1e3}if(bench.hz!=Infinity){bench.hz=1/mean;times.cycle=mean*bench.count;times.period=mean}}if(queue.length<2&&!maxedOut){enqueue()}event.aborted=done}enqueue();invoke(queue,{name:"run",args:{async:async},queued:true,onCycle:evaluate,onComplete:function(){bench.emit("complete")}})}function cycle(clone,options){options||(options={});var deferred;if(clone instanceof Deferred){deferred=clone;clone=clone.benchmark}var clocked,cycles,divisor,event,minTime,period,async=options.async,bench=clone._original,count=clone.count,times=clone.times;if(clone.running){cycles=++clone.cycles;clocked=deferred?deferred.elapsed:clock(clone);minTime=clone.minTime;if(cycles>bench.cycles){bench.cycles=cycles}if(clone.error){event=Event("error");event.message=clone.error;clone.emit(event);if(!event.cancelled){clone.abort()}}}if(clone.running){bench.times.cycle=times.cycle=clocked;period=bench.times.period=times.period=clocked/count;bench.hz=clone.hz=1/period;bench.initCount=clone.initCount=count;clone.running=clocked<minTime;if(clone.running){if(!clocked&&(divisor=divisors[clone.cycles])!=null){count=floor(4e6/divisor)}if(count<=clone.count){count+=Math.ceil((minTime-clocked)/period)}clone.running=count!=Infinity}}event=Event("cycle");clone.emit(event);if(event.aborted){clone.abort()}if(clone.running){clone.count=count;if(deferred){clone.compiled.call(deferred,timer)}else if(async){delay(clone,function(){cycle(clone,options)})}else{cycle(clone)}}else{if(support.browser){runScript(uid+"=1;delete "+uid)}clone.emit("complete")}}function run(options){var me=this,event=Event("start");me.running=false;me.reset();me.running=true;me.count=me.initCount;me.times.timeStamp=+new Date;me.emit(event);if(!event.cancelled){options={async:((options=options&&options.async)==null?me.async:options)&&support.timeout};if(me._original){if(me.defer){Deferred(me)}else{cycle(me,options)}}else{compute(me,options)}}return me}extend(Benchmark,{options:{async:false,defer:false,delay:.005,id:undefined,initCount:1,maxTime:5,minSamples:5,minTime:0,name:undefined,onAbort:undefined,onComplete:undefined,onCycle:undefined,onError:undefined,onReset:undefined,onStart:undefined},platform:req("platform")||window.platform||{description:window.navigator&&navigator.userAgent||null,layout:null,product:null,name:null,manufacturer:null,os:null,prerelease:null,version:null,toString:function(){return this.description||""}},version:"1.0.0",support:support,deepClone:deepClone,each:each,extend:extend,filter:filter,forEach:forEach,forOwn:forOwn,formatNumber:formatNumber,hasKey:(hasKey(Benchmark,""),hasKey),indexOf:indexOf,interpolate:interpolate,invoke:invoke,join:join,map:map,pluck:pluck,reduce:reduce});extend(Benchmark.prototype,{count:0,cycles:0,hz:0,compiled:undefined,error:undefined,fn:undefined,aborted:false,running:false,setup:noop,teardown:noop,stats:{moe:0,rme:0,sem:0,deviation:0,mean:0,sample:[],variance:0},times:{cycle:0,elapsed:0,period:0,timeStamp:0},abort:abort,clone:clone,compare:compare,emit:emit,listeners:listeners,off:off,on:on,reset:reset,run:run,toString:toStringBench});extend(Deferred.prototype,{benchmark:null,cycles:0,elapsed:0,timeStamp:0,resolve:resolve});extend(Event.prototype,{aborted:false,cancelled:false,currentTarget:undefined,result:undefined,target:undefined,timeStamp:0,type:""});Suite.options={name:undefined};extend(Suite.prototype,{length:0,aborted:false,running:false,forEach:methodize(forEach),indexOf:methodize(indexOf),invoke:methodize(invoke),join:[].join,map:methodize(map),pluck:methodize(pluck),pop:[].pop,push:[].push,sort:[].sort,reduce:methodize(reduce),abort:abortSuite,add:add,clone:cloneSuite,emit:emit,filter:filterSuite,listeners:listeners,off:off,on:on,reset:resetSuite,run:runSuite,concat:concat,reverse:reverse,shift:shift,slice:slice,splice:splice,unshift:unshift});extend(Benchmark,{Deferred:Deferred,Event:Event,Suite:Suite});if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define(function(){return Benchmark})}else if(freeExports){if(typeof module=="object"&&module&&module.exports==freeExports){(module.exports=Benchmark).Benchmark=Benchmark}else{freeExports.Benchmark=Benchmark}}else{window["Benchmark"]=Benchmark}if(support.air){clock({_original:{fn:noop,count:1,options:{}}})}})(this)}).call(this,require("_process"),typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{_process:1}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({immutable:[function(require,module,exports){function universalModule(){var $Object=Object;function createClass(ctor,methods,staticMethods,superClass){var proto;if(superClass){var superProto=superClass.prototype;proto=$Object.create(superProto)}else{proto=ctor.prototype}$Object.keys(methods).forEach(function(key){proto[key]=methods[key]});$Object.keys(staticMethods).forEach(function(key){ctor[key]=staticMethods[key]});proto.constructor=ctor;ctor.prototype=proto;return ctor}function superCall(self,proto,name,args){return $Object.getPrototypeOf(proto)[name].apply(self,args)}function defaultSuperCall(self,proto,args){superCall(self,proto,"constructor",args)}var $traceurRuntime={};$traceurRuntime.createClass=createClass;$traceurRuntime.superCall=superCall;$traceurRuntime.defaultSuperCall=defaultSuperCall;"use strict";var DELETE="delete";var SHIFT=5;var SIZE=1<<SHIFT;var MASK=SIZE-1;var NOT_SET={};var CHANGE_LENGTH={value:false};var DID_ALTER={value:false};function MakeRef(ref){ref.value=false;return ref}function SetRef(ref){ref&&(ref.value=true)}function OwnerID(){}function arrCopy(arr,offset){offset=offset||0;var len=Math.max(0,arr.length-offset);var newArr=new Array(len);for(var ii=0;ii<len;ii++){newArr[ii]=arr[ii+offset]}return newArr}function invariant(condition,error){if(!condition)throw new Error(error)}function hash(o){if(!o){return 0}if(o===true){return 1}var type=typeof o;if(type==="number"){if((o|0)===o){return o&HASH_MAX_VAL}o=""+o;type="string"}if(type==="string"){return o.length>STRING_HASH_CACHE_MIN_STRLEN?cachedHashString(o):hashString(o)}if(o.hashCode){return hash(typeof o.hashCode==="function"?o.hashCode():o.hashCode)}return hashJSObj(o)}function cachedHashString(string){var hash=stringHashCache[string];if(hash==null){hash=hashString(string);if(STRING_HASH_CACHE_SIZE===STRING_HASH_CACHE_MAX_SIZE){STRING_HASH_CACHE_SIZE=0;stringHashCache={}}STRING_HASH_CACHE_SIZE++;stringHashCache[string]=hash}return hash}function hashString(string){var hash=0;for(var ii=0;ii<string.length;ii++){hash=31*hash+string.charCodeAt(ii)&HASH_MAX_VAL}return hash}function hashJSObj(obj){var hash=obj[UID_HASH_KEY];if(hash)return hash;if(!canDefineProperty){hash=obj.propertyIsEnumerable&&obj.propertyIsEnumerable[UID_HASH_KEY];if(hash)return hash;hash=getIENodeHash(obj);if(hash)return hash}if(!canDefineProperty||Object.isExtensible(obj)){hash=++objHashUID&HASH_MAX_VAL;if(canDefineProperty){Object.defineProperty(obj,UID_HASH_KEY,{enumerable:false,configurable:false,writable:false,value:hash})}else if(propertyIsEnumerable&&obj.propertyIsEnumerable===propertyIsEnumerable){obj.propertyIsEnumerable=function(){return propertyIsEnumerable.apply(this,arguments)};obj.propertyIsEnumerable[UID_HASH_KEY]=hash}else if(obj.nodeType){obj[UID_HASH_KEY]=hash}else{throw new Error("Unable to set a non-enumerable property on object.")}return hash}else{throw new Error("Non-extensible objects are not allowed as keys.")}}var propertyIsEnumerable=Object.prototype.propertyIsEnumerable;var canDefineProperty=function(){try{Object.defineProperty({},"x",{});return true}catch(e){return false}}();function getIENodeHash(node){if(node&&node.nodeType>0){switch(node.nodeType){case 1:return node.uniqueID;case 9:return node.documentElement&&node.documentElement.uniqueID}}}var HASH_MAX_VAL=2147483647;var objHashUID=0;var UID_HASH_KEY="__immutablehash__";if(typeof Symbol!=="undefined"){UID_HASH_KEY=Symbol(UID_HASH_KEY)}var STRING_HASH_CACHE_MIN_STRLEN=16;var STRING_HASH_CACHE_MAX_SIZE=255;var STRING_HASH_CACHE_SIZE=0;var stringHashCache={};var ITERATE_KEYS=0;var ITERATE_VALUES=1;var ITERATE_ENTRIES=2;var FAUX_ITERATOR_SYMBOL="@@iterator";var ITERATOR_SYMBOL=typeof Symbol!=="undefined"?Symbol.iterator:FAUX_ITERATOR_SYMBOL;var Iterator=function Iterator(next){this.next=next};$traceurRuntime.createClass(Iterator,{toString:function(){return"[Iterator]"}},{});var IteratorPrototype=Iterator.prototype;IteratorPrototype.inspect=IteratorPrototype.toSource=function(){return this.toString()};IteratorPrototype[ITERATOR_SYMBOL]=function(){return this};function iteratorValue(type,k,v,iteratorResult){var value=type===0?k:type===1?v:[k,v];iteratorResult?iteratorResult.value=value:iteratorResult={value:value,done:false};return iteratorResult}function iteratorDone(){return{value:undefined,done:true}}function isIterable(maybeIterable){return!!_iteratorFn(maybeIterable)}function isIterator(maybeIterator){return maybeIterator&&typeof maybeIterator.next==="function"}function getIterator(iterable){var iteratorFn=_iteratorFn(iterable);if(typeof iteratorFn==="function"){return iteratorFn.call(iterable)}}function _iteratorFn(iterable){return iterable&&(iterable[ITERATOR_SYMBOL]||iterable[FAUX_ITERATOR_SYMBOL])}var Sequence=function Sequence(value){return $Sequence.from(arguments.length===1?value:Array.prototype.slice.call(arguments))};var $Sequence=Sequence;$traceurRuntime.createClass(Sequence,{toArray:function(){assertNotInfinite(this.length);var array=new Array(this.length||0);this.valueSeq().__iterate(function(v,i){array[i]=v});return array},toJS:function(){return this.map(function(value){return value instanceof $Sequence?value.toJS():value}).__toJS()},toMap:function(){assertNotInfinite(this.length);return Map.from(this)},toObject:function(){assertNotInfinite(this.length);var object={};this.__iterate(function(v,k){object[k]=v});return object},toOrderedMap:function(){assertNotInfinite(this.length);return OrderedMap.from(this)},toSet:function(){assertNotInfinite(this.length);return Set.from(this)},toVector:function(){assertNotInfinite(this.length);return Vector.from(this)},toString:function(){return this.__toString("Seq {","}")},__toString:function(head,tail){if(this.length===0){return head+tail}return head+" "+this.map(this.__toStringMapper).join(", ")+" "+tail},__toStringMapper:function(v,k){return k+": "+quoteString(v)},concat:function(){for(var values=[],$__2=0;$__2<arguments.length;$__2++)values[$__2]=arguments[$__2];return concatFactory(this,values,true)},contains:function(searchValue){return this.find(function(value){return is(value,searchValue)},null,NOT_SET)!==NOT_SET},entries:function(){return this.__iterator(ITERATE_ENTRIES)},every:function(predicate,context){var returnValue=true;this.__iterate(function(v,k,c){if(!predicate.call(context,v,k,c)){returnValue=false;return false}});return returnValue},filter:function(predicate,context){return filterFactory(this,predicate,context,true)},find:function(predicate,context,notSetValue){var foundValue=notSetValue;this.__iterate(function(v,k,c){if(predicate.call(context,v,k,c)){foundValue=v;return false}});return foundValue},forEach:function(sideEffect,context){return this.__iterate(context?sideEffect.bind(context):sideEffect)},join:function(separator){separator=separator!==undefined?""+separator:",";var joined="";var isFirst=true;this.__iterate(function(v){isFirst?isFirst=false:joined+=separator;joined+=v!=null?v:""});return joined},keys:function(){return this.__iterator(ITERATE_KEYS)},map:function(mapper,context){return mapFactory(this,mapper,context)},reduce:function(reducer,initialReduction,context){var reduction;var useFirst;if(arguments.length<2){useFirst=true}else{reduction=initialReduction}this.__iterate(function(v,k,c){if(useFirst){useFirst=false;reduction=v}else{reduction=reducer.call(context,reduction,v,k,c)}});return reduction},reduceRight:function(reducer,initialReduction,context){var reversed=this.toKeyedSeq().reverse();return reversed.reduce.apply(reversed,arguments)},reverse:function(){return reverseFactory(this)},slice:function(begin,end){if(wholeSlice(begin,end,this.length)){return this}var resolvedBegin=resolveBegin(begin,this.length);var resolvedEnd=resolveEnd(end,this.length);if(resolvedBegin!==resolvedBegin||resolvedEnd!==resolvedEnd){return this.cacheResult().slice(begin,end)}var skipped=resolvedBegin===0?this:this.skip(resolvedBegin);return resolvedEnd==null||resolvedEnd===this.length?skipped:skipped.take(resolvedEnd-resolvedBegin)},some:function(predicate,context){return!this.every(not(predicate),context)},sort:function(comparator){return this.sortBy(valueMapper,comparator)},values:function(){return this.__iterator(ITERATE_VALUES)},butLast:function(){return this.slice(0,-1)},count:function(predicate,context){if(!predicate){if(this.length==null){this.length=this.__iterate(returnTrue)}return this.length}return this.filter(predicate,context).count()},countBy:function(grouper,context){var $__0=this;var groupMap={};var groups=[];this.__iterate(function(v,k){var g=grouper.call(context,v,k,$__0);var h=hash(g);if(!groupMap.hasOwnProperty(h)){groupMap[h]=groups.length;groups.push([g,1])}else{groups[groupMap[h]][1]++}});return $Sequence(groups).fromEntrySeq()},equals:function(other){if(this===other){return true}if(!(other instanceof $Sequence)){return false}if(this.length!=null&&other.length!=null){if(this.length!==other.length){return false}if(this.length===0&&other.length===0){return true}}if(this.__hash!=null&&other.__hash!=null&&this.__hash!==other.__hash){return false}return this.__deepEquals(other)},__deepEquals:function(other){var entries=this.entries();return other.every(function(v,k){var entry=entries.next().value;return entry&&is(entry[0],k)&&is(entry[1],v)})&&entries.next().done},entrySeq:function(){var sequence=this;if(sequence._cache){return $Sequence(sequence._cache)}var entriesSequence=sequence.toKeyedSeq().map(entryMapper).valueSeq();entriesSequence.fromEntries=function(){return sequence};return entriesSequence},findKey:function(predicate,context){var foundKey;this.__iterate(function(v,k,c){if(predicate.call(context,v,k,c)){foundKey=k;return false}});return foundKey},findLast:function(predicate,context,notSetValue){return this.toKeyedSeq().reverse().find(predicate,context,notSetValue)},findLastKey:function(predicate,context){return this.toKeyedSeq().reverse().findKey(predicate,context)},first:function(){return this.find(returnTrue)},flatMap:function(mapper,context){return this.map(mapper,context).flatten()},flatten:function(){return flattenFactory(this,true)},flip:function(){return flipFactory(this)},get:function(searchKey,notSetValue){return this.find(function(_,key){return is(key,searchKey)},null,notSetValue)},getIn:function(searchKeyPath,notSetValue){var nested=this;if(searchKeyPath){for(var ii=0;ii<searchKeyPath.length;ii++){nested=nested&&nested.get?nested.get(searchKeyPath[ii],NOT_SET):NOT_SET;if(nested===NOT_SET){return notSetValue}}}return nested},groupBy:function(grouper,context){return groupByFactory(this,grouper,context,true)},has:function(searchKey){return this.get(searchKey,NOT_SET)!==NOT_SET},keySeq:function(){return this.flip().valueSeq()},last:function(){return this.findLast(returnTrue)},mapEntries:function(mapper,context){var $__0=this;return this.entrySeq().map(function(entry,index){return mapper.call(context,entry,index,$__0)}).fromEntrySeq()},mapKeys:function(mapper,context){var $__0=this;return this.flip().map(function(k,v){return mapper.call(context,k,v,$__0)}).flip()},rest:function(){return this.slice(1)},skip:function(amount){return skipFactory(this,amount,true)},skipLast:function(amount){return this.reverse().skip(amount).reverse()},skipWhile:function(predicate,context){return skipWhileFactory(this,predicate,context,true)},skipUntil:function(predicate,context){return this.skipWhile(not(predicate),context)},sortBy:function(mapper,comparator){comparator=comparator||defaultComparator;var seq=this;return $Sequence(this.entrySeq().entrySeq().toArray().sort(function(a,b){return comparator(mapper(a[1][1],a[1][0],seq),mapper(b[1][1],b[1][0],seq))||a[0]-b[0]})).fromEntrySeq().valueSeq().fromEntrySeq()},take:function(amount){return takeFactory(this,amount)},takeLast:function(amount){return this.reverse().take(amount).reverse()},takeWhile:function(predicate,context){return takeWhileFactory(this,predicate,context)},takeUntil:function(predicate,context){return this.takeWhile(not(predicate),context)},toKeyedSeq:function(){return this},valueSeq:function(){return new ValuesSequence(this)},cacheResult:function(){if(!this._cache&&this.__iterateUncached){assertNotInfinite(this.length);this._cache=this.entrySeq().toArray();if(this.length==null){this.length=this._cache.length}}return this},hashCode:function(){return this.__hash||(this.__hash=this.length===Infinity?0:this.reduce(function(h,v,k){return h+(hash(v)^(v===k?0:hash(k)))&HASH_MAX_VAL},0))},__makeSequence:function(){return Object.create(SequencePrototype)},__iterate:function(fn,reverse){return iterate(this,fn,reverse,true)},__iterator:function(type,reverse){return iterator(this,type,reverse,true)}},{from:function(value){if(value instanceof $Sequence){return value}if(!Array.isArray(value)){if(isIterator(value)){return new IteratorSequence(value)}if(isIterable(value)){return new IterableSequence(value)}if(value&&value.constructor===Object){return new ObjectSequence(value)}value=[value]}return new ArraySequence(value)}});var SequencePrototype=Sequence.prototype;SequencePrototype[ITERATOR_SYMBOL]=SequencePrototype.entries;SequencePrototype.toJSON=SequencePrototype.toJS;SequencePrototype.__toJS=SequencePrototype.toObject;SequencePrototype.inspect=SequencePrototype.toSource=function(){return this.toString()};SequencePrototype.chain=SequencePrototype.flatMap;var IndexedSequence=function IndexedSequence(){$traceurRuntime.defaultSuperCall(this,$IndexedSequence.prototype,arguments)};var $IndexedSequence=IndexedSequence;$traceurRuntime.createClass(IndexedSequence,{toString:function(){return this.__toString("Seq [","]")},concat:function(){for(var values=[],$__3=0;$__3<arguments.length;$__3++)values[$__3]=arguments[$__3];return concatFactory(this,values,false)},filter:function(predicate,context){return filterFactory(this,predicate,context,false)},findIndex:function(predicate,context){var key=this.findKey(predicate,context);return key==null?-1:key},indexOf:function(searchValue){return this.findIndex(function(value){return is(value,searchValue)})},lastIndexOf:function(searchValue){return this.toKeyedSeq().reverse().indexOf(searchValue)},splice:function(index,removeNum){var numArgs=arguments.length;removeNum=Math.max(removeNum|0,0);if(numArgs===0||numArgs===2&&!removeNum){return this}index=resolveBegin(index,this.length);var spliced=this.slice(0,index);return numArgs===1?spliced:spliced.concat(arrCopy(arguments,2),this.slice(index+removeNum))},findLastIndex:function(predicate,context){return this.toKeyedSeq().reverse().findIndex(predicate,context)},first:function(){return this.get(0)},flatten:function(){return flattenFactory(this,false)},flip:function(){return flipFactory(this.toKeyedSeq())},fromEntrySeq:function(){return new FromEntriesSequence(this)},get:function(index,notSetValue){index=wrapIndex(this,index);return index<0||(this.length===Infinity||this.length!=null&&index>this.length)?notSetValue:this.find(function(_,key){return key===index},null,notSetValue)},groupBy:function(grouper,context){return groupByFactory(this,grouper,context,false)},has:function(index){index=wrapIndex(this,index);return index>=0&&(this.length!=null?this.length===Infinity||index<this.length:this.indexOf(index)!==-1)},interpose:function(separator){return interposeFactory(this,separator)},last:function(){return this.get(this.length?this.length-1:0)},skip:function(amount){var $__0=this;var skipSeq=skipFactory(this,amount,false);if(skipSeq!==this){skipSeq.get=function(index,notSetValue){return $__0.get(index-amount,notSetValue)}}return skipSeq},skipWhile:function(predicate,context){return skipWhileFactory(this,predicate,context,false)},sortBy:function(mapper,comparator){comparator=comparator||defaultComparator;var seq=this;return Sequence(this.entrySeq().toArray().sort(function(a,b){return comparator(mapper(a[1],a[0],seq),mapper(b[1],b[0],seq))||a[0]-b[0]})).fromEntrySeq().valueSeq()},take:function(amount){var $__0=this;var takeSeq=takeFactory(this,amount);if(takeSeq!==this){takeSeq.get=function(index,notSetValue){return index<amount?$__0.get(index,notSetValue):notSetValue}}return takeSeq},toKeyedSeq:function(){return new KeyedIndexedSequence(this)},valueSeq:function(){return this},__makeSequence:function(){return Object.create(IndexedSequencePrototype)},__iterate:function(fn,reverse){return iterate(this,fn,reverse,false)},__iterator:function(type,reverse){return iterator(this,type,reverse,false)}},{},Sequence);var IndexedSequencePrototype=IndexedSequence.prototype;IndexedSequencePrototype[ITERATOR_SYMBOL]=IndexedSequencePrototype.values;IndexedSequencePrototype.__toJS=IndexedSequencePrototype.toArray;IndexedSequencePrototype.__toStringMapper=quoteString;var IteratorSequence=function IteratorSequence(iterator){this._iterator=iterator;this._iteratorCache=[]};$traceurRuntime.createClass(IteratorSequence,{__iterateUncached:function(fn,reverse){if(reverse){return this.cacheResult().__iterate(fn,reverse)}var iterator=this._iterator;var cache=this._iteratorCache;var iterations=0;while(iterations<cache.length){if(fn(cache[iterations],iterations++,this)===false){return iterations}}var step;while(!(step=iterator.next()).done){var val=step.value;cache[iterations]=val;if(fn(val,iterations++,this)===false){break}}return iterations},__iteratorUncached:function(type,reverse){if(reverse){return this.cacheResult().__iterator(type,reverse)}var iterator=this._iterator;var cache=this._iteratorCache;var iterations=0;return new Iterator(function(){if(iterations>=cache.length){var step=iterator.next();if(step.done){return step}cache[iterations]=step.value}return iteratorValue(type,iterations,cache[iterations++])})}},{},IndexedSequence);var IterableSequence=function IterableSequence(iterable){this._iterable=iterable;this.length=iterable.length||iterable.size};$traceurRuntime.createClass(IterableSequence,{__iterateUncached:function(fn,reverse){if(reverse){return this.cacheResult().__iterate(fn,reverse)}var iterable=this._iterable;var iterator=getIterator(iterable);var iterations=0;if(isIterator(iterator)){var step;while(!(step=iterator.next()).done){if(fn(step.value,iterations++,this)===false){break}}}return iterations},__iteratorUncached:function(type,reverse){if(reverse){return this.cacheResult().__iterator(type,reverse)}var iterable=this._iterable;var iterator=getIterator(iterable);if(!isIterator(iterator)){return new Iterator(function(){return iteratorDone()})}var iterations=0;return new Iterator(function(){var step=iterator.next();return step.done?step:iteratorValue(type,iterations++,step.value)})}},{},IndexedSequence);var ObjectSequence=function ObjectSequence(object){var keys=Object.keys(object);this._object=object;this._keys=keys;this.length=keys.length};$traceurRuntime.createClass(ObjectSequence,{toObject:function(){return this._object},get:function(key,notSetValue){if(notSetValue!==undefined&&!this.has(key)){return notSetValue}return this._object[key]},has:function(key){return this._object.hasOwnProperty(key)},__iterate:function(fn,reverse){var object=this._object;var keys=this._keys;var maxIndex=keys.length-1;for(var ii=0;ii<=maxIndex;ii++){var key=keys[reverse?maxIndex-ii:ii];if(fn(object[key],key,this)===false){return ii+1}}return ii},__iterator:function(type,reverse){var object=this._object;var keys=this._keys;var maxIndex=keys.length-1;var ii=0;return new Iterator(function(){var key=keys[reverse?maxIndex-ii:ii];return ii++>maxIndex?iteratorDone():iteratorValue(type,key,object[key])})}},{},Sequence);var ArraySequence=function ArraySequence(array){this._array=array;this.length=array.length};$traceurRuntime.createClass(ArraySequence,{toArray:function(){return this._array},get:function(index,notSetValue){return this.has(index)?this._array[wrapIndex(this,index)]:notSetValue},__iterate:function(fn,reverse){var array=this._array;var maxIndex=array.length-1;for(var ii=0;ii<=maxIndex;ii++){if(fn(array[reverse?maxIndex-ii:ii],ii,this)===false){return ii+1}}return ii},__iterator:function(type,reverse){var array=this._array;var maxIndex=array.length-1;var ii=0;return new Iterator(function(){return ii>maxIndex?iteratorDone():iteratorValue(type,ii,array[reverse?maxIndex-ii++:ii++])})}},{},IndexedSequence);function ensureLength(indexedSeq){if(indexedSeq.length==null){indexedSeq.cacheResult()}invariant(indexedSeq.length<Infinity,"Cannot reverse infinite range.");return indexedSeq.length}function wholeSlice(begin,end,length){return(begin===0||length!=null&&begin<=-length)&&(end==null||length!=null&&end>=length)}function resolveBegin(begin,length){return resolveIndex(begin,length,0)}function resolveEnd(end,length){return resolveIndex(end,length,length)}function resolveIndex(index,length,defaultIndex){return index==null?defaultIndex:index<0?Math.max(0,length+index):length?Math.min(length,index):index}function valueMapper(v){return v}function entryMapper(v,k){return[k,v]}function returnTrue(){return true}function not(predicate){return function(){return!predicate.apply(this,arguments)}}function quoteString(value){return typeof value==="string"?JSON.stringify(value):value}function defaultComparator(a,b){return a>b?1:a<b?-1:0}function wrapIndex(seq,index){if(index<0){if(seq.length==null){seq.cacheResult()}return seq.length+index}return index}function assertNotInfinite(length){invariant(length!==Infinity,"Cannot perform this action with an infinite sequence.")}function iterate(sequence,fn,reverse,useKeys){var cache=sequence._cache;if(cache){var maxIndex=cache.length-1;for(var ii=0;ii<=maxIndex;ii++){var entry=cache[reverse?maxIndex-ii:ii];if(fn(entry[1],useKeys?entry[0]:ii,sequence)===false){return ii+1}}return ii}return sequence.__iterateUncached(fn,reverse)}function iterator(sequence,type,reverse,useKeys){var cache=sequence._cache;if(cache){var maxIndex=cache.length-1;var ii=0;return new Iterator(function(){var entry=cache[reverse?maxIndex-ii:ii];return ii++>maxIndex?iteratorDone():iteratorValue(type,useKeys?entry[0]:ii-1,entry[1])})}return sequence.__iteratorUncached(type,reverse)}var ValuesSequence=function ValuesSequence(seq){this._seq=seq;this.length=seq.length};$traceurRuntime.createClass(ValuesSequence,{get:function(key,notSetValue){return this._seq.get(key,notSetValue)},has:function(key){return this._seq.has(key)},cacheResult:function(){this._seq.cacheResult();this.length=this._seq.length;return this},__iterate:function(fn,reverse){var $__0=this;var iterations=0;return this._seq.__iterate(function(v){return fn(v,iterations++,$__0)},reverse)},__iterator:function(type,reverse){var iterator=this._seq.__iterator(ITERATE_VALUES,reverse);var iterations=0;return new Iterator(function(){var step=iterator.next();return step.done?step:iteratorValue(type,iterations++,step.value,step)})}},{},IndexedSequence);var KeyedIndexedSequence=function KeyedIndexedSequence(indexedSeq){this._seq=indexedSeq;this.length=indexedSeq.length};$traceurRuntime.createClass(KeyedIndexedSequence,{get:function(key,notSetValue){return this._seq.get(key,notSetValue)},has:function(key){return this._seq.has(key)},valueSeq:function(){return this._seq},reverse:function(){var $__0=this;var reversedSequence=reverseFactory(this);reversedSequence.valueSeq=function(){return $__0._seq.reverse()};return reversedSequence},map:function(mapper,context){var $__0=this;var mappedSequence=mapFactory(this,mapper,context);mappedSequence.valueSeq=function(){return $__0._seq.map(mapper,context)};return mappedSequence},cacheResult:function(){this._seq.cacheResult();this.length=this._seq.length;return this},__iterate:function(fn,reverse){var $__0=this;var ii=reverse?ensureLength(this):0;return this._seq.__iterate(function(v){return fn(v,reverse?--ii:ii++,$__0)},reverse)},__iterator:function(type,reverse){var iterator=this._seq.__iterator(ITERATE_VALUES,reverse);var ii=reverse?ensureLength(this):0;return new Iterator(function(){var step=iterator.next();return step.done?step:iteratorValue(type,reverse?--ii:ii++,step.value,step)})}},{},Sequence);var FromEntriesSequence=function FromEntriesSequence(entriesSeq){this._seq=entriesSeq;this.length=entriesSeq.length};$traceurRuntime.createClass(FromEntriesSequence,{entrySeq:function(){return this._seq},cacheResult:function(){this._seq.cacheResult();this.length=this._seq.length;return this},__iterate:function(fn,reverse){var $__0=this;return this._seq.__iterate(function(entry){return entry&&fn(entry[1],entry[0],$__0)},reverse)},__iterator:function(type,reverse){var iterator=this._seq.__iterator(ITERATE_VALUES,reverse);
return new Iterator(function(){while(true){var step=iterator.next();if(step.done){return step}var entry=step.value;if(entry){return type===ITERATE_ENTRIES?step:iteratorValue(type,entry[0],entry[1],step)}}})}},{},Sequence);function flipFactory(sequence){var flipSequence=sequence.__makeSequence();flipSequence.length=sequence.length;flipSequence.flip=function(){return sequence};flipSequence.reverse=function(){var reversedSequence=sequence.reverse.apply(this);reversedSequence.flip=function(){return sequence.reverse()};return reversedSequence};flipSequence.has=function(key){return sequence.contains(key)};flipSequence.contains=function(key){return sequence.has(key)};flipSequence.__iterateUncached=function(fn,reverse){var $__0=this;return sequence.__iterate(function(v,k){return fn(k,v,$__0)!==false},reverse)};flipSequence.__iteratorUncached=function(type,reverse){if(type===ITERATE_ENTRIES){var iterator=sequence.__iterator(type,reverse);return new Iterator(function(){var step=iterator.next();if(!step.done){var k=step.value[0];step.value[0]=step.value[1];step.value[1]=k}return step})}return sequence.__iterator(type===ITERATE_VALUES?ITERATE_KEYS:ITERATE_VALUES,reverse)};return flipSequence}function mapFactory(sequence,mapper,context){var mappedSequence=sequence.__makeSequence();mappedSequence.length=sequence.length;mappedSequence.has=function(key){return sequence.has(key)};mappedSequence.get=function(key,notSetValue){var v=sequence.get(key,NOT_SET);return v===NOT_SET?notSetValue:mapper.call(context,v,key,sequence)};mappedSequence.__iterateUncached=function(fn,reverse){var $__0=this;return sequence.__iterate(function(v,k,c){return fn(mapper.call(context,v,k,c),k,$__0)!==false},reverse)};mappedSequence.__iteratorUncached=function(type,reverse){var iterator=sequence.__iterator(ITERATE_ENTRIES,reverse);return new Iterator(function(){var step=iterator.next();if(step.done){return step}var entry=step.value;var key=entry[0];return iteratorValue(type,key,mapper.call(context,entry[1],key,sequence),step)})};return mappedSequence}function reverseFactory(sequence){var reversedSequence=sequence.__makeSequence();reversedSequence.length=sequence.length;reversedSequence.reverse=function(){return sequence};reversedSequence.flip=function(){var flipSequence=sequence.flip.apply(this);flipSequence.reverse=function(){return sequence.flip()};return flipSequence};reversedSequence.get=function(key,notSetValue){return sequence.get(key,notSetValue)};reversedSequence.has=function(key){return sequence.has(key)};reversedSequence.contains=function(value){return sequence.contains(value)};reversedSequence.cacheResult=function(){sequence.cacheResult();this.length=sequence.length;return this};reversedSequence.__iterate=function(fn,reverse){var $__0=this;return sequence.__iterate(function(v,k){return fn(v,k,$__0)},!reverse)};reversedSequence.__iterator=function(type,reverse){return sequence.__iterator(type,!reverse)};return reversedSequence}function filterFactory(sequence,predicate,context,useKeys){var filterSequence=sequence.__makeSequence();filterSequence.has=function(key){var v=sequence.get(key,NOT_SET);return v!==NOT_SET&&!!predicate.call(context,v,key,sequence)};filterSequence.get=function(key,notSetValue){var v=sequence.get(key,NOT_SET);return v!==NOT_SET&&predicate.call(context,v,key,sequence)?v:notSetValue};filterSequence.__iterateUncached=function(fn,reverse){var $__0=this;var iterations=0;sequence.__iterate(function(v,k,c){if(predicate.call(context,v,k,c)){iterations++;return fn(v,useKeys?k:iterations-1,$__0)}},reverse);return iterations};filterSequence.__iteratorUncached=function(type,reverse){var iterator=sequence.__iterator(ITERATE_ENTRIES,reverse);var iterations=0;return new Iterator(function(){while(true){var step=iterator.next();if(step.done){return step}var entry=step.value;var key=entry[0];var value=entry[1];if(predicate.call(context,value,key,sequence)){return iteratorValue(type,useKeys?key:iterations++,value,step)}}})};return filterSequence}function groupByFactory(seq,grouper,context,useKeys){var groupMap={};var groups=[];seq.__iterate(function(v,k){var g=grouper.call(context,v,k,seq);var h=hash(g);var e=useKeys?[k,v]:v;if(!groupMap.hasOwnProperty(h)){groupMap[h]=groups.length;groups.push([g,[e]])}else{groups[groupMap[h]][1].push(e)}});return Sequence(groups).fromEntrySeq().map(useKeys?function(group){return Sequence(group).fromEntrySeq()}:function(group){return Sequence(group)})}function takeFactory(sequence,amount){if(amount>sequence.length){return sequence}if(amount<0){amount=0}var takeSequence=sequence.__makeSequence();takeSequence.length=sequence.length&&Math.min(sequence.length,amount);takeSequence.__iterateUncached=function(fn,reverse){var $__0=this;if(amount===0){return 0}if(reverse){return this.cacheResult().__iterate(fn,reverse)}var iterations=0;sequence.__iterate(function(v,k){return++iterations&&fn(v,k,$__0)!==false&&iterations<amount});return iterations};takeSequence.__iteratorUncached=function(type,reverse){if(reverse){return this.cacheResult().__iterator(type,reverse)}var iterator=amount&&sequence.__iterator(type,reverse);var iterations=0;return new Iterator(function(){if(iterations++>amount){return iteratorDone()}return iterator.next()})};return takeSequence}function takeWhileFactory(sequence,predicate,context){var takeSequence=sequence.__makeSequence();takeSequence.__iterateUncached=function(fn,reverse){var $__0=this;if(reverse){return this.cacheResult().__iterate(fn,reverse)}var iterations=0;sequence.__iterate(function(v,k,c){return predicate.call(context,v,k,c)&&++iterations&&fn(v,k,$__0)});return iterations};takeSequence.__iteratorUncached=function(type,reverse){var $__0=this;if(reverse){return this.cacheResult().__iterator(type,reverse)}var iterator=sequence.__iterator(ITERATE_ENTRIES,reverse);var iterating=true;return new Iterator(function(){if(!iterating){return iteratorDone()}var step=iterator.next();if(step.done){return step}var entry=step.value;var k=entry[0];var v=entry[1];if(!predicate.call(context,v,k,$__0)){iterating=false;return iteratorDone()}return type===ITERATE_ENTRIES?step:iteratorValue(type,k,v,step)})};return takeSequence}function skipFactory(sequence,amount,useKeys){if(amount<=0){return sequence}var skipSequence=sequence.__makeSequence();skipSequence.length=sequence.length&&Math.max(0,sequence.length-amount);skipSequence.__iterateUncached=function(fn,reverse){var $__0=this;if(reverse){return this.cacheResult().__iterate(fn,reverse)}var skipped=0;var isSkipping=true;var iterations=0;sequence.__iterate(function(v,k){if(!(isSkipping&&(isSkipping=skipped++<amount))){iterations++;return fn(v,useKeys?k:iterations-1,$__0)}});return iterations};skipSequence.__iteratorUncached=function(type,reverse){if(reverse){return this.cacheResult().__iterator(type,reverse)}var iterator=amount&&sequence.__iterator(type,reverse);var skipped=0;var iterations=0;return new Iterator(function(){while(skipped<amount){skipped++;iterator.next()}var step=iterator.next();if(useKeys||type===ITERATE_VALUES){return step}else if(type===ITERATE_KEYS){return iteratorValue(type,iterations++,null,step)}else{return iteratorValue(type,iterations++,step.value[1],step)}})};return skipSequence}function skipWhileFactory(sequence,predicate,context,useKeys){var skipSequence=sequence.__makeSequence();skipSequence.__iterateUncached=function(fn,reverse){var $__0=this;if(reverse){return this.cacheResult().__iterate(fn,reverse)}var isSkipping=true;var iterations=0;sequence.__iterate(function(v,k,c){if(!(isSkipping&&(isSkipping=predicate.call(context,v,k,c)))){iterations++;return fn(v,useKeys?k:iterations-1,$__0)}});return iterations};skipSequence.__iteratorUncached=function(type,reverse){var $__0=this;if(reverse){return this.cacheResult().__iterator(type,reverse)}var iterator=sequence.__iterator(ITERATE_ENTRIES,reverse);var skipping=true;var iterations=0;return new Iterator(function(){var step,k,v;do{step=iterator.next();if(step.done){if(useKeys||type===ITERATE_VALUES){return step}else if(type===ITERATE_KEYS){return iteratorValue(type,iterations++,null,step)}else{return iteratorValue(type,iterations++,step.value[1],step)}}var entry=step.value;k=entry[0];v=entry[1];skipping&&(skipping=predicate.call(context,v,k,$__0))}while(skipping);return type===ITERATE_ENTRIES?step:iteratorValue(type,k,v,step)})};return skipSequence}function concatFactory(sequence,values,useKeys){var sequences=[sequence].concat(values);var concatSequence=Sequence(sequences);if(useKeys){concatSequence=concatSequence.toKeyedSeq()}concatSequence=concatSequence.flatten();concatSequence.length=sequences.reduce(function(sum,seq){if(sum!==undefined){var len=Sequence(seq).length;if(len!=null){return sum+len}}},0);return concatSequence}function flattenFactory(sequence,useKeys){var flatSequence=sequence.__makeSequence();flatSequence.__iterateUncached=function(fn,reverse){var $__0=this;var iterations=0;sequence.__iterate(function(seq){var stopped=false;Sequence(seq).__iterate(function(v,k){if(fn(v,useKeys?k:iterations++,$__0)===false){stopped=true;return false}},reverse);return!stopped},reverse);return iterations};flatSequence.__iteratorUncached=function(type,reverse){var sequenceIterator=sequence.__iterator(ITERATE_VALUES,reverse);var iterator;var iterations=0;return new Iterator(function(){while(true){if(iterator){var step=iterator.next();if(!step.done){if(useKeys||type===ITERATE_VALUES){return step}else if(type===ITERATE_KEYS){return iteratorValue(type,iterations++,null,step)}else{return iteratorValue(type,iterations++,step.value[1],step)}}}var sequenceStep=sequenceIterator.next();if(sequenceStep.done){return sequenceStep}iterator=Sequence(sequenceStep.value).__iterator(type,reverse)}})};return flatSequence}function interposeFactory(sequence,separator){var interposedSequence=sequence.__makeSequence();interposedSequence.length=sequence.length&&sequence.length*2-1;interposedSequence.__iterateUncached=function(fn,reverse){var $__0=this;var iterations=0;sequence.__iterate(function(v,k){return(!iterations||fn(separator,iterations++,$__0)!==false)&&fn(v,iterations++,$__0)!==false},reverse);return iterations};interposedSequence.__iteratorUncached=function(type,reverse){var iterator=sequence.__iterator(ITERATE_VALUES,reverse);var iterations=0;var step;return new Iterator(function(){if(!step||iterations%2){step=iterator.next();if(step.done){return step}}return iterations%2?iteratorValue(type,iterations++,separator):iteratorValue(type,iterations++,step.value,step)})};return interposedSequence}var Cursor=function Cursor(rootData,keyPath,onChange,value){value=value?value:rootData.getIn(keyPath);this.length=value instanceof Sequence?value.length:null;this._rootData=rootData;this._keyPath=keyPath;this._onChange=onChange};$traceurRuntime.createClass(Cursor,{deref:function(notSetValue){return this._rootData.getIn(this._keyPath,notSetValue)},get:function(key,notSetValue){if(Array.isArray(key)&&key.length===0){return this}var value=this._rootData.getIn(this._keyPath.concat(key),NOT_SET);return value===NOT_SET?notSetValue:wrappedValue(this,key,value)},set:function(key,value){return updateCursor(this,function(m){return m.set(key,value)},key)},remove:function(key){return updateCursor(this,function(m){return m.remove(key)},key)},clear:function(){return updateCursor(this,function(m){return m.clear()})},update:function(keyOrFn,notSetValue,updater){return arguments.length===1?updateCursor(this,keyOrFn):updateCursor(this,function(map){return map.update(keyOrFn,notSetValue,updater)},keyOrFn)},withMutations:function(fn){return updateCursor(this,function(m){return(m||Map.empty()).withMutations(fn)})},cursor:function(subKey){return Array.isArray(subKey)&&subKey.length===0?this:subCursor(this,subKey)},__iterate:function(fn,reverse){var $__0=this;var deref=this.deref();return deref&&deref.__iterate?deref.__iterate(function(v,k){return fn(wrappedValue($__0,k,v),k,$__0)},reverse):0},__iterator:function(type,reverse){var $__0=this;var deref=this.deref();var iterator=deref&&deref.__iterator&&deref.__iterator(ITERATE_ENTRIES,reverse);return new Iterator(function(){if(!iterator){return iteratorDone()}var step=iterator.next();if(step.done){return step}var entry=step.value;var k=entry[0];var v=entry[1];return iteratorValue(type,k,wrappedValue($__0,k,v),step)})}},{},Sequence);Cursor.prototype[DELETE]=Cursor.prototype.remove;Cursor.prototype.getIn=Cursor.prototype.get;function wrappedValue(cursor,key,value){return value instanceof Sequence?subCursor(cursor,key,value):value}function subCursor(cursor,key,value){return new Cursor(cursor._rootData,cursor._keyPath.concat(key),cursor._onChange,value)}function updateCursor(cursor,changeFn,changeKey){var newRootData=cursor._rootData.updateIn(cursor._keyPath,changeKey?Map.empty():undefined,changeFn);var keyPath=cursor._keyPath||[];cursor._onChange&&cursor._onChange.call(undefined,newRootData,cursor._rootData,changeKey?keyPath.concat(changeKey):keyPath);return new Cursor(newRootData,cursor._keyPath,cursor._onChange)}function is(first,second){if(first instanceof Cursor){first=first.deref()}if(second instanceof Cursor){second=second.deref()}if(first===second){return first!==0||second!==0||1/first===1/second}if(first!==first){return second!==second}if(first instanceof Sequence){return first.equals(second)}return false}var Map=function Map(sequence){var map=$Map.empty();return sequence?sequence.constructor===$Map?sequence:map.merge(sequence):map};var $Map=Map;$traceurRuntime.createClass(Map,{toString:function(){return this.__toString("Map {","}")},get:function(k,notSetValue){return this._root?this._root.get(0,hash(k),k,notSetValue):notSetValue},set:function(k,v){return updateMap(this,k,v)},remove:function(k){return updateMap(this,k,NOT_SET)},update:function(k,notSetValue,updater){return arguments.length===1?this.updateIn([],null,k):this.updateIn([k],notSetValue,updater)},updateIn:function(keyPath,notSetValue,updater){var $__13;if(!updater){$__13=[notSetValue,updater],updater=$__13[0],notSetValue=$__13[1],$__13}return updateInDeepMap(this,keyPath,notSetValue,updater,0)},clear:function(){if(this.length===0){return this}if(this.__ownerID){this.length=0;this._root=null;this.__hash=undefined;this.__altered=true;return this}return $Map.empty()},merge:function(){return mergeIntoMapWith(this,null,arguments)},mergeWith:function(merger){for(var seqs=[],$__4=1;$__4<arguments.length;$__4++)seqs[$__4-1]=arguments[$__4];return mergeIntoMapWith(this,merger,seqs)},mergeDeep:function(){return mergeIntoMapWith(this,deepMerger(null),arguments)},mergeDeepWith:function(merger){for(var seqs=[],$__5=1;$__5<arguments.length;$__5++)seqs[$__5-1]=arguments[$__5];return mergeIntoMapWith(this,deepMerger(merger),seqs)},cursor:function(keyPath,onChange){if(!onChange&&typeof keyPath==="function"){onChange=keyPath;keyPath=[]}else if(arguments.length===0){keyPath=[]}else if(!Array.isArray(keyPath)){keyPath=[keyPath]}return new Cursor(this,keyPath,onChange)},withMutations:function(fn){var mutable=this.asMutable();fn(mutable);return mutable.wasAltered()?mutable.__ensureOwner(this.__ownerID):this},asMutable:function(){return this.__ownerID?this:this.__ensureOwner(new OwnerID)},asImmutable:function(){return this.__ensureOwner()},wasAltered:function(){return this.__altered},__iterator:function(type,reverse){return new MapIterator(this,type,reverse)},__iterate:function(fn,reverse){var $__0=this;var iterations=0;this._root&&this._root.iterate(function(entry){iterations++;return fn(entry[1],entry[0],$__0)},reverse);return iterations},__ensureOwner:function(ownerID){if(ownerID===this.__ownerID){return this}if(!ownerID){this.__ownerID=ownerID;this.__altered=false;return this}return makeMap(this.length,this._root,ownerID,this.__hash)}},{empty:function(){return EMPTY_MAP||(EMPTY_MAP=makeMap(0))}},Sequence);var MapPrototype=Map.prototype;MapPrototype[DELETE]=MapPrototype.remove;Map.from=Map;var BitmapIndexedNode=function BitmapIndexedNode(ownerID,bitmap,nodes){this.ownerID=ownerID;this.bitmap=bitmap;this.nodes=nodes};var $BitmapIndexedNode=BitmapIndexedNode;$traceurRuntime.createClass(BitmapIndexedNode,{get:function(shift,hash,key,notSetValue){var bit=1<<((shift===0?hash:hash>>>shift)&MASK);var bitmap=this.bitmap;return(bitmap&bit)===0?notSetValue:this.nodes[popCount(bitmap&bit-1)].get(shift+SHIFT,hash,key,notSetValue)},update:function(ownerID,shift,hash,key,value,didChangeLength,didAlter){var hashFrag=(shift===0?hash:hash>>>shift)&MASK;var bit=1<<hashFrag;var bitmap=this.bitmap;var exists=(bitmap&bit)!==0;if(!exists&&value===NOT_SET){return this}var idx=popCount(bitmap&bit-1);var nodes=this.nodes;var node=exists?nodes[idx]:null;var newNode=updateNode(node,ownerID,shift+SHIFT,hash,key,value,didChangeLength,didAlter);if(newNode===node){return this}if(!exists&&newNode&&nodes.length>=MAX_BITMAP_SIZE){return expandNodes(ownerID,nodes,bitmap,hashFrag,newNode)}if(exists&&!newNode&&nodes.length===2&&isLeafNode(nodes[idx^1])){return nodes[idx^1]}if(exists&&newNode&&nodes.length===1&&isLeafNode(newNode)){return newNode}var isEditable=ownerID&&ownerID===this.ownerID;var newBitmap=exists?newNode?bitmap:bitmap^bit:bitmap|bit;var newNodes=exists?newNode?setIn(nodes,idx,newNode,isEditable):spliceOut(nodes,idx,isEditable):spliceIn(nodes,idx,newNode,isEditable);if(isEditable){this.bitmap=newBitmap;this.nodes=newNodes;return this}return new $BitmapIndexedNode(ownerID,newBitmap,newNodes)},iterate:function(fn,reverse){var nodes=this.nodes;for(var ii=0,maxIndex=nodes.length-1;ii<=maxIndex;ii++){if(nodes[reverse?maxIndex-ii:ii].iterate(fn,reverse)===false){return false}}}},{});var ArrayNode=function ArrayNode(ownerID,count,nodes){this.ownerID=ownerID;this.count=count;this.nodes=nodes};var $ArrayNode=ArrayNode;$traceurRuntime.createClass(ArrayNode,{get:function(shift,hash,key,notSetValue){var idx=(shift===0?hash:hash>>>shift)&MASK;var node=this.nodes[idx];return node?node.get(shift+SHIFT,hash,key,notSetValue):notSetValue},update:function(ownerID,shift,hash,key,value,didChangeLength,didAlter){var idx=(shift===0?hash:hash>>>shift)&MASK;var removed=value===NOT_SET;var nodes=this.nodes;var node=nodes[idx];if(removed&&!node){return this}var newNode=updateNode(node,ownerID,shift+SHIFT,hash,key,value,didChangeLength,didAlter);if(newNode===node){return this}var newCount=this.count;if(!node){newCount++}else if(!newNode){newCount--;if(newCount<MIN_ARRAY_SIZE){return packNodes(ownerID,nodes,newCount,idx)}}var isEditable=ownerID&&ownerID===this.ownerID;var newNodes=setIn(nodes,idx,newNode,isEditable);if(isEditable){this.count=newCount;this.nodes=newNodes;return this}return new $ArrayNode(ownerID,newCount,newNodes)},iterate:function(fn,reverse){var nodes=this.nodes;for(var ii=0,maxIndex=nodes.length-1;ii<=maxIndex;ii++){var node=nodes[reverse?maxIndex-ii:ii];if(node&&node.iterate(fn,reverse)===false){return false}}}},{});var HashCollisionNode=function HashCollisionNode(ownerID,hash,entries){this.ownerID=ownerID;this.hash=hash;this.entries=entries};var $HashCollisionNode=HashCollisionNode;$traceurRuntime.createClass(HashCollisionNode,{get:function(shift,hash,key,notSetValue){var entries=this.entries;for(var ii=0,len=entries.length;ii<len;ii++){if(is(key,entries[ii][0])){return entries[ii][1]}}return notSetValue},update:function(ownerID,shift,hash,key,value,didChangeLength,didAlter){var removed=value===NOT_SET;if(hash!==this.hash){if(removed){return this}SetRef(didAlter);SetRef(didChangeLength);return mergeIntoNode(this,ownerID,shift,hash,[key,value])}var entries=this.entries;var idx=0;for(var len=entries.length;idx<len;idx++){if(is(key,entries[idx][0])){break}}var exists=idx<len;if(removed&&!exists){return this}SetRef(didAlter);(removed||!exists)&&SetRef(didChangeLength);if(removed&&len===2){return new ValueNode(ownerID,this.hash,entries[idx^1])}var isEditable=ownerID&&ownerID===this.ownerID;var newEntries=isEditable?entries:arrCopy(entries);if(exists){if(removed){idx===len-1?newEntries.pop():newEntries[idx]=newEntries.pop()}else{newEntries[idx]=[key,value]}}else{newEntries.push([key,value])}if(isEditable){this.entries=newEntries;return this}return new $HashCollisionNode(ownerID,this.hash,newEntries)},iterate:function(fn,reverse){var entries=this.entries;for(var ii=0,maxIndex=entries.length-1;ii<=maxIndex;ii++){if(fn(entries[reverse?maxIndex-ii:ii])===false){return false}}}},{});var ValueNode=function ValueNode(ownerID,hash,entry){this.ownerID=ownerID;this.hash=hash;this.entry=entry};var $ValueNode=ValueNode;$traceurRuntime.createClass(ValueNode,{get:function(shift,hash,key,notSetValue){return is(key,this.entry[0])?this.entry[1]:notSetValue},update:function(ownerID,shift,hash,key,value,didChangeLength,didAlter){var removed=value===NOT_SET;var keyMatch=is(key,this.entry[0]);if(keyMatch?value===this.entry[1]:removed){return this}SetRef(didAlter);if(removed){SetRef(didChangeLength);return null}if(keyMatch){if(ownerID&&ownerID===this.ownerID){this.entry[1]=value;return this}return new $ValueNode(ownerID,hash,[key,value])}SetRef(didChangeLength);return mergeIntoNode(this,ownerID,shift,hash,[key,value])},iterate:function(fn){return fn(this.entry)}},{});var MapIterator=function MapIterator(map,type,reverse){this._type=type;this._reverse=reverse;this._stack=map._root&&mapIteratorFrame(map._root)};$traceurRuntime.createClass(MapIterator,{next:function(){var type=this._type;var stack=this._stack;while(stack){var node=stack.node;var index=stack.index++;var maxIndex;if(node.entry){if(index===0){return mapIteratorValue(type,node.entry)}}else if(node.entries){maxIndex=node.entries.length-1;if(index<=maxIndex){return mapIteratorValue(type,node.entries[this._reverse?maxIndex-index:index])}}else{maxIndex=node.nodes.length-1;if(index<=maxIndex){var subNode=node.nodes[this._reverse?maxIndex-index:index];if(subNode){if(subNode.entry){return mapIteratorValue(type,subNode.entry)}stack=this._stack=mapIteratorFrame(subNode,stack)}continue}}stack=this._stack=this._stack.__prev}return iteratorDone()}},{},Iterator);function mapIteratorValue(type,entry){return iteratorValue(type,entry[0],entry[1])}function mapIteratorFrame(node,prev){return{node:node,index:0,__prev:prev}}function makeMap(length,root,ownerID,hash){var map=Object.create(MapPrototype);map.length=length;map._root=root;map.__ownerID=ownerID;map.__hash=hash;map.__altered=false;return map}function updateMap(map,k,v){var didChangeLength=MakeRef(CHANGE_LENGTH);var didAlter=MakeRef(DID_ALTER);var newRoot=updateNode(map._root,map.__ownerID,0,hash(k),k,v,didChangeLength,didAlter);if(!didAlter.value){return map}var newLength=map.length+(didChangeLength.value?v===NOT_SET?-1:1:0);if(map.__ownerID){map.length=newLength;map._root=newRoot;map.__hash=undefined;map.__altered=true;return map}return newRoot?makeMap(newLength,newRoot):Map.empty()}function updateNode(node,ownerID,shift,hash,key,value,didChangeLength,didAlter){if(!node){if(value===NOT_SET){return node}SetRef(didAlter);SetRef(didChangeLength);return new ValueNode(ownerID,hash,[key,value])}return node.update(ownerID,shift,hash,key,value,didChangeLength,didAlter)}function isLeafNode(node){return node.constructor===ValueNode||node.constructor===HashCollisionNode}function mergeIntoNode(node,ownerID,shift,hash,entry){if(node.hash===hash){return new HashCollisionNode(ownerID,hash,[node.entry,entry])}var idx1=(shift===0?node.hash:node.hash>>>shift)&MASK;var idx2=(shift===0?hash:hash>>>shift)&MASK;var newNode;var nodes=idx1===idx2?[mergeIntoNode(node,ownerID,shift+SHIFT,hash,entry)]:(newNode=new ValueNode(ownerID,hash,entry),idx1<idx2?[node,newNode]:[newNode,node]);return new BitmapIndexedNode(ownerID,1<<idx1|1<<idx2,nodes)}function packNodes(ownerID,nodes,count,excluding){var bitmap=0;var packedII=0;var packedNodes=new Array(count);for(var ii=0,bit=1,len=nodes.length;ii<len;ii++,bit<<=1){var node=nodes[ii];if(node!=null&&ii!==excluding){bitmap|=bit;packedNodes[packedII++]=node}}return new BitmapIndexedNode(ownerID,bitmap,packedNodes)}function expandNodes(ownerID,nodes,bitmap,including,node){var count=0;var expandedNodes=new Array(SIZE);for(var ii=0;bitmap!==0;ii++,bitmap>>>=1){expandedNodes[ii]=bitmap&1?nodes[count++]:null}expandedNodes[including]=node;return new ArrayNode(ownerID,count+1,expandedNodes)}function mergeIntoMapWith(map,merger,iterables){var seqs=[];for(var ii=0;ii<iterables.length;ii++){var seq=iterables[ii];if(!(seq instanceof Sequence)){seq=Sequence(seq);if(seq instanceof IndexedSequence){seq=seq.fromEntrySeq()}}seq&&seqs.push(seq)}return mergeIntoCollectionWith(map,merger,seqs)}function deepMerger(merger){return function(existing,value){return existing&&existing.mergeDeepWith?existing.mergeDeepWith(merger,value):merger?merger(existing,value):value}}function mergeIntoCollectionWith(collection,merger,seqs){if(seqs.length===0){return collection}return collection.withMutations(function(collection){var mergeIntoMap=merger?function(value,key){var existing=collection.get(key,NOT_SET);collection.set(key,existing===NOT_SET?value:merger(existing,value))}:function(value,key){collection.set(key,value)};for(var ii=0;ii<seqs.length;ii++){seqs[ii].forEach(mergeIntoMap)}})}function updateInDeepMap(collection,keyPath,notSetValue,updater,pathOffset){var pathLen=keyPath.length;if(pathOffset===pathLen){return updater(collection)}invariant(collection.set,"updateIn with invalid keyPath");var notSet=pathOffset===pathLen-1?notSetValue:Map.empty();var key=keyPath[pathOffset];var existing=collection.get(key,notSet);var value=updateInDeepMap(existing,keyPath,notSetValue,updater,pathOffset+1);return value===existing?collection:collection.set(key,value)}function popCount(x){x=x-(x>>1&1431655765);x=(x&858993459)+(x>>2&858993459);x=x+(x>>4)&252645135;x=x+(x>>8);x=x+(x>>16);return x&127}function setIn(array,idx,val,canEdit){var newArray=canEdit?array:arrCopy(array);newArray[idx]=val;return newArray}function spliceIn(array,idx,val,canEdit){var newLen=array.length+1;if(canEdit&&idx+1===newLen){array[idx]=val;return array}var newArray=new Array(newLen);var after=0;for(var ii=0;ii<newLen;ii++){if(ii===idx){newArray[ii]=val;after=-1}else{newArray[ii]=array[ii+after]}}return newArray}function spliceOut(array,idx,canEdit){var newLen=array.length-1;if(canEdit&&idx===newLen){array.pop();return array}var newArray=new Array(newLen);var after=0;for(var ii=0;ii<newLen;ii++){if(ii===idx){after=1}newArray[ii]=array[ii+after]}return newArray}var MAX_BITMAP_SIZE=SIZE/2;var MIN_ARRAY_SIZE=SIZE/4;var EMPTY_MAP;var Vector=function Vector(){for(var values=[],$__6=0;$__6<arguments.length;$__6++)values[$__6]=arguments[$__6];return $Vector.from(values)};var $Vector=Vector;$traceurRuntime.createClass(Vector,{toString:function(){return this.__toString("Vector [","]")},get:function(index,notSetValue){index=wrapIndex(this,index);if(index<0||index>=this.length){return notSetValue}index+=this._origin;var node=vectorNodeFor(this,index);return node&&node.array[index&MASK]},set:function(index,value){return updateVector(this,index,value)},remove:function(index){return updateVector(this,index,NOT_SET)},clear:function(){if(this.length===0){return this}if(this.__ownerID){this.length=this._origin=this._size=0;this._level=SHIFT;this._root=this._tail=null;this.__hash=undefined;this.__altered=true;return this}return $Vector.empty()},push:function(){var values=arguments;var oldLength=this.length;return this.withMutations(function(vect){setVectorBounds(vect,0,oldLength+values.length);for(var ii=0;ii<values.length;ii++){vect.set(oldLength+ii,values[ii])}})},pop:function(){return setVectorBounds(this,0,-1)},unshift:function(){var values=arguments;return this.withMutations(function(vect){setVectorBounds(vect,-values.length);for(var ii=0;ii<values.length;ii++){vect.set(ii,values[ii])}})},shift:function(){return setVectorBounds(this,1)},merge:function(){return mergeIntoVectorWith(this,null,arguments)},mergeWith:function(merger){for(var seqs=[],$__7=1;$__7<arguments.length;$__7++)seqs[$__7-1]=arguments[$__7];return mergeIntoVectorWith(this,merger,seqs)},mergeDeep:function(){return mergeIntoVectorWith(this,deepMerger(null),arguments)},mergeDeepWith:function(merger){for(var seqs=[],$__8=1;$__8<arguments.length;$__8++)seqs[$__8-1]=arguments[$__8];return mergeIntoVectorWith(this,deepMerger(merger),seqs)},setLength:function(length){return setVectorBounds(this,0,length)},slice:function(begin,end){var sliceSequence=$traceurRuntime.superCall(this,$Vector.prototype,"slice",[begin,end]);if(sliceSequence!==this){var vector=this;var length=vector.length;sliceSequence.toVector=function(){return setVectorBounds(vector,begin<0?Math.max(0,length+begin):length?Math.min(length,begin):begin,end==null?length:end<0?Math.max(0,length+end):length?Math.min(length,end):end)}}return sliceSequence},__iterator:function(type,reverse){return new VectorIterator(this,type,reverse)},__iterate:function(fn,reverse){var $__0=this;var iterations=0;var eachFn=function(v){return fn(v,iterations++,$__0)};var tailOffset=getTailOffset(this._size);if(reverse){iterateVNode(this._tail,0,tailOffset-this._origin,this._size-this._origin,eachFn,reverse)&&iterateVNode(this._root,this._level,-this._origin,tailOffset-this._origin,eachFn,reverse)}else{iterateVNode(this._root,this._level,-this._origin,tailOffset-this._origin,eachFn,reverse)&&iterateVNode(this._tail,0,tailOffset-this._origin,this._size-this._origin,eachFn,reverse)}return iterations},__ensureOwner:function(ownerID){if(ownerID===this.__ownerID){return this}if(!ownerID){this.__ownerID=ownerID;return this}return makeVector(this._origin,this._size,this._level,this._root,this._tail,ownerID,this.__hash)}},{empty:function(){return EMPTY_VECT||(EMPTY_VECT=makeVector(0,0,SHIFT))},from:function(sequence){if(!sequence||sequence.length===0){return $Vector.empty()}if(sequence.constructor===$Vector){return sequence}var isArray=Array.isArray(sequence);if(sequence.length>0&&sequence.length<SIZE){return makeVector(0,sequence.length,SHIFT,null,new VNode(isArray?arrCopy(sequence):Sequence(sequence).toArray()))}if(!isArray){sequence=Sequence(sequence).valueSeq()}return $Vector.empty().merge(sequence)}},IndexedSequence);var VectorPrototype=Vector.prototype;VectorPrototype[DELETE]=VectorPrototype.remove;VectorPrototype.update=MapPrototype.update;VectorPrototype.updateIn=MapPrototype.updateIn;VectorPrototype.cursor=MapPrototype.cursor;VectorPrototype.withMutations=MapPrototype.withMutations;VectorPrototype.asMutable=MapPrototype.asMutable;VectorPrototype.asImmutable=MapPrototype.asImmutable;VectorPrototype.wasAltered=MapPrototype.wasAltered;var VNode=function VNode(array,ownerID){this.array=array;this.ownerID=ownerID};var $VNode=VNode;$traceurRuntime.createClass(VNode,{removeBefore:function(ownerID,level,index){if(index===level?1<<level:0||this.array.length===0){return this}var originIndex=index>>>level&MASK;if(originIndex>=this.array.length){return new $VNode([],ownerID)}var removingFirst=originIndex===0;var newChild;if(level>0){var oldChild=this.array[originIndex];newChild=oldChild&&oldChild.removeBefore(ownerID,level-SHIFT,index);if(newChild===oldChild&&removingFirst){return this}}if(removingFirst&&!newChild){return this}var editable=editableVNode(this,ownerID);if(!removingFirst){for(var ii=0;ii<originIndex;ii++){editable.array[ii]=undefined}}if(newChild){editable.array[originIndex]=newChild}return editable},removeAfter:function(ownerID,level,index){if(index===level?1<<level:0||this.array.length===0){return this}var sizeIndex=index-1>>>level&MASK;if(sizeIndex>=this.array.length){return this}var removingLast=sizeIndex===this.array.length-1;var newChild;if(level>0){var oldChild=this.array[sizeIndex];newChild=oldChild&&oldChild.removeAfter(ownerID,level-SHIFT,index);if(newChild===oldChild&&removingLast){return this}}if(removingLast&&!newChild){return this}var editable=editableVNode(this,ownerID);if(!removingLast){editable.array.pop()}if(newChild){editable.array[sizeIndex]=newChild}return editable}},{});function iterateVNode(node,level,offset,max,fn,reverse){var ii;var array=node&&node.array;if(level===0){var from=offset<0?-offset:0;var to=max-offset;
if(to>SIZE){to=SIZE}for(ii=from;ii<to;ii++){if(fn(array&&array[reverse?from+to-1-ii:ii])===false){return false}}}else{var step=1<<level;var newLevel=level-SHIFT;for(ii=0;ii<=MASK;ii++){var levelIndex=reverse?MASK-ii:ii;var newOffset=offset+(levelIndex<<level);if(newOffset<max&&newOffset+step>0){var nextNode=array&&array[levelIndex];if(!iterateVNode(nextNode,newLevel,newOffset,max,fn,reverse)){return false}}}}return true}var VectorIterator=function VectorIterator(vector,type,reverse){this._type=type;this._reverse=!!reverse;this._maxIndex=vector.length-1;var tailOffset=getTailOffset(vector._size);var rootStack=vectIteratorFrame(vector._root&&vector._root.array,vector._level,-vector._origin,tailOffset-vector._origin-1);var tailStack=vectIteratorFrame(vector._tail&&vector._tail.array,0,tailOffset-vector._origin,vector._size-vector._origin-1);this._stack=reverse?tailStack:rootStack;this._stack.__prev=reverse?rootStack:tailStack};$traceurRuntime.createClass(VectorIterator,{next:function(){var stack=this._stack;while(stack){var array=stack.array;var rawIndex=stack.index++;if(this._reverse){rawIndex=MASK-rawIndex;if(rawIndex>stack.rawMax){rawIndex=stack.rawMax;stack.index=SIZE-rawIndex}}if(rawIndex>=0&&rawIndex<SIZE&&rawIndex<=stack.rawMax){var value=array&&array[rawIndex];if(stack.level===0){var type=this._type;var index;if(type!==1){index=stack.offset+(rawIndex<<stack.level);if(this._reverse){index=this._maxIndex-index}}return iteratorValue(type,index,value)}else{this._stack=stack=vectIteratorFrame(value&&value.array,stack.level-SHIFT,stack.offset+(rawIndex<<stack.level),stack.max,stack)}continue}stack=this._stack=this._stack.__prev}return iteratorDone()}},{},Iterator);function vectIteratorFrame(array,level,offset,max,prevFrame){return{array:array,level:level,offset:offset,max:max,rawMax:max-offset>>level,index:0,__prev:prevFrame}}function makeVector(origin,size,level,root,tail,ownerID,hash){var vect=Object.create(VectorPrototype);vect.length=size-origin;vect._origin=origin;vect._size=size;vect._level=level;vect._root=root;vect._tail=tail;vect.__ownerID=ownerID;vect.__hash=hash;vect.__altered=false;return vect}function updateVector(vector,index,value){index=wrapIndex(vector,index);if(index>=vector.length||index<0){return value===NOT_SET?vector:vector.withMutations(function(vect){index<0?setVectorBounds(vect,index).set(0,value):setVectorBounds(vect,0,index+1).set(index,value)})}index+=vector._origin;var newTail=vector._tail;var newRoot=vector._root;var didAlter=MakeRef(DID_ALTER);if(index>=getTailOffset(vector._size)){newTail=updateVNode(newTail,vector.__ownerID,0,index,value,didAlter)}else{newRoot=updateVNode(newRoot,vector.__ownerID,vector._level,index,value,didAlter)}if(!didAlter.value){return vector}if(vector.__ownerID){vector._root=newRoot;vector._tail=newTail;vector.__hash=undefined;vector.__altered=true;return vector}return makeVector(vector._origin,vector._size,vector._level,newRoot,newTail)}function updateVNode(node,ownerID,level,index,value,didAlter){var removed=value===NOT_SET;var newNode;var idx=index>>>level&MASK;var nodeHas=node&&idx<node.array.length;if(removed&&!nodeHas){return node}if(level>0){var lowerNode=node&&node.array[idx];var newLowerNode=updateVNode(lowerNode,ownerID,level-SHIFT,index,value,didAlter);if(newLowerNode===lowerNode){return node}newNode=editableVNode(node,ownerID);newNode.array[idx]=newLowerNode;return newNode}if(!removed&&nodeHas&&node.array[idx]===value){return node}SetRef(didAlter);newNode=editableVNode(node,ownerID);if(removed&&idx===newNode.array.length-1){newNode.array.pop()}else{newNode.array[idx]=removed?undefined:value}return newNode}function editableVNode(node,ownerID){if(ownerID&&node&&ownerID===node.ownerID){return node}return new VNode(node?node.array.slice():[],ownerID)}function vectorNodeFor(vector,rawIndex){if(rawIndex>=getTailOffset(vector._size)){return vector._tail}if(rawIndex<1<<vector._level+SHIFT){var node=vector._root;var level=vector._level;while(node&&level>0){node=node.array[rawIndex>>>level&MASK];level-=SHIFT}return node}}function setVectorBounds(vector,begin,end){var owner=vector.__ownerID||new OwnerID;var oldOrigin=vector._origin;var oldSize=vector._size;var newOrigin=oldOrigin+begin;var newSize=end==null?oldSize:end<0?oldSize+end:oldOrigin+end;if(newOrigin===oldOrigin&&newSize===oldSize){return vector}if(newOrigin>=newSize){return vector.clear()}var newLevel=vector._level;var newRoot=vector._root;var offsetShift=0;while(newOrigin+offsetShift<0){newRoot=new VNode(newRoot&&newRoot.array.length?[null,newRoot]:[],owner);newLevel+=SHIFT;offsetShift+=1<<newLevel}if(offsetShift){newOrigin+=offsetShift;oldOrigin+=offsetShift;newSize+=offsetShift;oldSize+=offsetShift}var oldTailOffset=getTailOffset(oldSize);var newTailOffset=getTailOffset(newSize);while(newTailOffset>=1<<newLevel+SHIFT){newRoot=new VNode(newRoot&&newRoot.array.length?[newRoot]:[],owner);newLevel+=SHIFT}var oldTail=vector._tail;var newTail=newTailOffset<oldTailOffset?vectorNodeFor(vector,newSize-1):newTailOffset>oldTailOffset?new VNode([],owner):oldTail;if(oldTail&&newTailOffset>oldTailOffset&&newOrigin<oldSize&&oldTail.array.length){newRoot=editableVNode(newRoot,owner);var node=newRoot;for(var level=newLevel;level>SHIFT;level-=SHIFT){var idx=oldTailOffset>>>level&MASK;node=node.array[idx]=editableVNode(node.array[idx],owner)}node.array[oldTailOffset>>>SHIFT&MASK]=oldTail}if(newSize<oldSize){newTail=newTail&&newTail.removeAfter(owner,0,newSize)}if(newOrigin>=newTailOffset){newOrigin-=newTailOffset;newSize-=newTailOffset;newLevel=SHIFT;newRoot=null;newTail=newTail&&newTail.removeBefore(owner,0,newOrigin)}else if(newOrigin>oldOrigin||newTailOffset<oldTailOffset){var beginIndex,endIndex;offsetShift=0;do{beginIndex=newOrigin>>>newLevel&MASK;endIndex=newTailOffset-1>>>newLevel&MASK;if(beginIndex===endIndex){if(beginIndex){offsetShift+=(1<<newLevel)*beginIndex}newLevel-=SHIFT;newRoot=newRoot&&newRoot.array[beginIndex]}}while(newRoot&&beginIndex===endIndex);if(newRoot&&newOrigin>oldOrigin){newRoot=newRoot&&newRoot.removeBefore(owner,newLevel,newOrigin-offsetShift)}if(newRoot&&newTailOffset<oldTailOffset){newRoot=newRoot&&newRoot.removeAfter(owner,newLevel,newTailOffset-offsetShift)}if(offsetShift){newOrigin-=offsetShift;newSize-=offsetShift}}if(vector.__ownerID){vector.length=newSize-newOrigin;vector._origin=newOrigin;vector._size=newSize;vector._level=newLevel;vector._root=newRoot;vector._tail=newTail;vector.__hash=undefined;vector.__altered=true;return vector}return makeVector(newOrigin,newSize,newLevel,newRoot,newTail)}function mergeIntoVectorWith(vector,merger,iterables){var seqs=[];for(var ii=0;ii<iterables.length;ii++){var seq=iterables[ii];seq&&seqs.push(Sequence(seq))}var maxLength=Math.max.apply(null,seqs.map(function(s){return s.length||0}));if(maxLength>vector.length){vector=vector.setLength(maxLength)}return mergeIntoCollectionWith(vector,merger,seqs)}function getTailOffset(size){return size<SIZE?0:size-1>>>SHIFT<<SHIFT}var EMPTY_VECT;var Set=function Set(){for(var values=[],$__9=0;$__9<arguments.length;$__9++)values[$__9]=arguments[$__9];return $Set.from(values)};var $Set=Set;$traceurRuntime.createClass(Set,{toString:function(){return this.__toString("Set {","}")},has:function(value){return this._map.has(value)},get:function(value,notSetValue){return this.has(value)?value:notSetValue},add:function(value){var newMap=this._map.set(value,null);if(this.__ownerID){this.length=newMap.length;this._map=newMap;return this}return newMap===this._map?this:makeSet(newMap)},remove:function(value){var newMap=this._map.remove(value);if(this.__ownerID){this.length=newMap.length;this._map=newMap;return this}return newMap===this._map?this:newMap.length===0?$Set.empty():makeSet(newMap)},clear:function(){if(this.length===0){return this}if(this.__ownerID){this.length=0;this._map.clear();return this}return $Set.empty()},union:function(){var seqs=arguments;if(seqs.length===0){return this}return this.withMutations(function(set){for(var ii=0;ii<seqs.length;ii++){Sequence(seqs[ii]).forEach(function(value){return set.add(value)})}})},intersect:function(){for(var seqs=[],$__10=0;$__10<arguments.length;$__10++)seqs[$__10]=arguments[$__10];if(seqs.length===0){return this}seqs=seqs.map(function(seq){return Sequence(seq)});var originalSet=this;return this.withMutations(function(set){originalSet.forEach(function(value){if(!seqs.every(function(seq){return seq.contains(value)})){set.remove(value)}})})},subtract:function(){for(var seqs=[],$__11=0;$__11<arguments.length;$__11++)seqs[$__11]=arguments[$__11];if(seqs.length===0){return this}seqs=seqs.map(function(seq){return Sequence(seq)});var originalSet=this;return this.withMutations(function(set){originalSet.forEach(function(value){if(seqs.some(function(seq){return seq.contains(value)})){set.remove(value)}})})},isSubset:function(seq){seq=Sequence(seq);return this.every(function(value){return seq.contains(value)})},isSuperset:function(seq){var set=this;seq=Sequence(seq);return seq.every(function(value){return set.contains(value)})},wasAltered:function(){return this._map.wasAltered()},hashCode:function(){return this._map.hashCode()},__iterate:function(fn,reverse){var $__0=this;return this._map.__iterate(function(_,k){return fn(k,k,$__0)},reverse)},__iterator:function(type,reverse){return this._map.map(function(_,k){return k}).__iterator(type,reverse)},__ensureOwner:function(ownerID){if(ownerID===this.__ownerID){return this}var newMap=this._map.__ensureOwner(ownerID);if(!ownerID){this.__ownerID=ownerID;this._map=newMap;return this}return makeSet(newMap,ownerID)}},{empty:function(){return EMPTY_SET||(EMPTY_SET=makeSet(Map.empty()))},from:function(sequence){var set=$Set.empty();return sequence?sequence.constructor===$Set?sequence:set.union(sequence):set},fromKeys:function(sequence){return $Set.from(Sequence(sequence).flip())}},Sequence);var SetPrototype=Set.prototype;SetPrototype[DELETE]=SetPrototype.remove;SetPrototype[ITERATOR_SYMBOL]=SetPrototype.values;SetPrototype.contains=SetPrototype.has;SetPrototype.mergeDeep=SetPrototype.merge=SetPrototype.union;SetPrototype.mergeDeepWith=SetPrototype.mergeWith=function(merger){for(var seqs=[],$__12=1;$__12<arguments.length;$__12++)seqs[$__12-1]=arguments[$__12];return this.merge.apply(this,seqs)};SetPrototype.withMutations=MapPrototype.withMutations;SetPrototype.asMutable=MapPrototype.asMutable;SetPrototype.asImmutable=MapPrototype.asImmutable;SetPrototype.__toJS=IndexedSequencePrototype.__toJS;SetPrototype.__toStringMapper=IndexedSequencePrototype.__toStringMapper;function makeSet(map,ownerID){var set=Object.create(SetPrototype);set.length=map?map.length:0;set._map=map;set.__ownerID=ownerID;return set}var EMPTY_SET;var OrderedMap=function OrderedMap(sequence){var map=$OrderedMap.empty();return sequence?sequence.constructor===$OrderedMap?sequence:map.merge(sequence):map};var $OrderedMap=OrderedMap;$traceurRuntime.createClass(OrderedMap,{toString:function(){return this.__toString("OrderedMap {","}")},get:function(k,notSetValue){var index=this._map.get(k);return index!=null?this._vector.get(index)[1]:notSetValue},clear:function(){if(this.length===0){return this}if(this.__ownerID){this.length=0;this._map.clear();this._vector.clear();return this}return $OrderedMap.empty()},set:function(k,v){return updateOrderedMap(this,k,v)},remove:function(k){return updateOrderedMap(this,k,NOT_SET)},wasAltered:function(){return this._map.wasAltered()||this._vector.wasAltered()},__iterate:function(fn,reverse){var $__0=this;return this._vector.__iterate(function(entry){return entry&&fn(entry[1],entry[0],$__0)},reverse)},__iterator:function(type,reverse){return this._vector.fromEntrySeq().__iterator(type,reverse)},__ensureOwner:function(ownerID){if(ownerID===this.__ownerID){return this}var newMap=this._map.__ensureOwner(ownerID);var newVector=this._vector.__ensureOwner(ownerID);if(!ownerID){this.__ownerID=ownerID;this._map=newMap;this._vector=newVector;return this}return makeOrderedMap(newMap,newVector,ownerID,this.__hash)}},{empty:function(){return EMPTY_ORDERED_MAP||(EMPTY_ORDERED_MAP=makeOrderedMap(Map.empty(),Vector.empty()))}},Map);OrderedMap.from=OrderedMap;OrderedMap.prototype[DELETE]=OrderedMap.prototype.remove;function makeOrderedMap(map,vector,ownerID,hash){var omap=Object.create(OrderedMap.prototype);omap.length=map?map.length:0;omap._map=map;omap._vector=vector;omap.__ownerID=ownerID;omap.__hash=hash;return omap}function updateOrderedMap(omap,k,v){var map=omap._map;var vector=omap._vector;var i=map.get(k);var has=i!==undefined;var removed=v===NOT_SET;if(!has&&removed||has&&v===vector.get(i)[1]){return omap}if(!has){i=vector.length}var newMap=removed?map.remove(k):has?map:map.set(k,i);var newVector=removed?vector.remove(i):vector.set(i,[k,v]);if(omap.__ownerID){omap.length=newMap.length;omap._map=newMap;omap._vector=newVector;omap.__hash=undefined;return omap}return makeOrderedMap(newMap,newVector)}var EMPTY_ORDERED_MAP;var Record=function Record(defaultValues,name){var RecordType=function(values){if(!(this instanceof RecordType)){return new RecordType(values)}this._map=Map(values)};defaultValues=Sequence(defaultValues);var RecordTypePrototype=RecordType.prototype=Object.create(RecordPrototype);RecordTypePrototype.constructor=RecordType;RecordTypePrototype._name=name;RecordTypePrototype._defaultValues=defaultValues;var keys=Object.keys(defaultValues);RecordType.prototype.length=keys.length;if(Object.defineProperty){defaultValues.forEach(function(_,key){Object.defineProperty(RecordType.prototype,key,{get:function(){return this.get(key)},set:function(value){invariant(this.__ownerID,"Cannot set on an immutable record.");this.set(key,value)}})})}return RecordType};var $Record=Record;$traceurRuntime.createClass(Record,{toString:function(){return this.__toString((this._name||"Record")+" {","}")},has:function(k){return this._defaultValues.has(k)},get:function(k,notSetValue){if(notSetValue!==undefined&&!this.has(k)){return notSetValue}return this._map.get(k,this._defaultValues.get(k))},clear:function(){if(this.__ownerID){this._map.clear();return this}var Record=Object.getPrototypeOf(this).constructor;return $Record._empty||($Record._empty=makeRecord(this,Map.empty()))},set:function(k,v){if(k==null||!this.has(k)){return this}var newMap=this._map.set(k,v);if(this.__ownerID||newMap===this._map){return this}return makeRecord(this,newMap)},remove:function(k){if(k==null||!this.has(k)){return this}var newMap=this._map.remove(k);if(this.__ownerID||newMap===this._map){return this}return makeRecord(this,newMap)},keys:function(){return this._map.keys()},values:function(){return this._map.values()},entries:function(){return this._map.entries()},wasAltered:function(){return this._map.wasAltered()},__iterator:function(type,reverse){return this._map.__iterator(type,reverse)},__iterate:function(fn,reverse){var record=this;return this._defaultValues.map(function(_,k){return record.get(k)}).__iterate(fn,reverse)},__ensureOwner:function(ownerID){if(ownerID===this.__ownerID){return this}var newMap=this._map&&this._map.__ensureOwner(ownerID);if(!ownerID){this.__ownerID=ownerID;this._map=newMap;return this}return makeRecord(this,newMap,ownerID)}},{},Sequence);var RecordPrototype=Record.prototype;RecordPrototype[DELETE]=RecordPrototype.remove;RecordPrototype.merge=MapPrototype.merge;RecordPrototype.mergeWith=MapPrototype.mergeWith;RecordPrototype.mergeDeep=MapPrototype.mergeDeep;RecordPrototype.mergeDeepWith=MapPrototype.mergeDeepWith;RecordPrototype.update=MapPrototype.update;RecordPrototype.updateIn=MapPrototype.updateIn;RecordPrototype.cursor=MapPrototype.cursor;RecordPrototype.withMutations=MapPrototype.withMutations;RecordPrototype.asMutable=MapPrototype.asMutable;RecordPrototype.asImmutable=MapPrototype.asImmutable;function makeRecord(likeRecord,map,ownerID){var record=Object.create(Object.getPrototypeOf(likeRecord));record._map=map;record.__ownerID=ownerID;return record}var Range=function Range(start,end,step){if(!(this instanceof $Range)){return new $Range(start,end,step)}invariant(step!==0,"Cannot step a Range by 0");start=start||0;if(end==null){end=Infinity}if(start===end&&__EMPTY_RANGE){return __EMPTY_RANGE}step=step==null?1:Math.abs(step);if(end<start){step=-step}this._start=start;this._end=end;this._step=step;this.length=Math.max(0,Math.ceil((end-start)/step-1)+1)};var $Range=Range;$traceurRuntime.createClass(Range,{toString:function(){if(this.length===0){return"Range []"}return"Range [ "+this._start+"..."+this._end+(this._step>1?" by "+this._step:"")+" ]"},get:function(index,notSetValue){index=wrapIndex(this,index);return this.has(index)?this._start+index*this._step:notSetValue},contains:function(searchValue){var possibleIndex=(searchValue-this._start)/this._step;return possibleIndex>=0&&possibleIndex<this.length&&possibleIndex===Math.floor(possibleIndex)},slice:function(begin,end){if(wholeSlice(begin,end,this.length)){return this}begin=resolveBegin(begin,this.length);end=resolveEnd(end,this.length);if(end<=begin){return __EMPTY_RANGE}return new $Range(this.get(begin,this._end),this.get(end,this._end),this._step)},indexOf:function(searchValue){var offsetValue=searchValue-this._start;if(offsetValue%this._step===0){var index=offsetValue/this._step;if(index>=0&&index<this.length){return index}}return-1},lastIndexOf:function(searchValue){return this.indexOf(searchValue)},take:function(amount){return this.slice(0,Math.max(0,amount))},skip:function(amount){return this.slice(Math.max(0,amount))},__iterate:function(fn,reverse){var maxIndex=this.length-1;var step=this._step;var value=reverse?this._start+maxIndex*step:this._start;for(var ii=0;ii<=maxIndex;ii++){if(fn(value,ii,this)===false){return ii+1}value+=reverse?-step:step}return ii},__iterator:function(type,reverse){var maxIndex=this.length-1;var step=this._step;var value=reverse?this._start+maxIndex*step:this._start;var ii=0;return new Iterator(function(){var v=value;value+=reverse?-step:step;return ii>maxIndex?iteratorDone():iteratorValue(type,ii++,v)})},__deepEquals:function(other){return other instanceof $Range?this._start===other._start&&this._end===other._end&&this._step===other._step:$traceurRuntime.superCall(this,$Range.prototype,"__deepEquals",[other])}},{},IndexedSequence);var RangePrototype=Range.prototype;RangePrototype.__toJS=RangePrototype.toArray;RangePrototype.first=VectorPrototype.first;RangePrototype.last=VectorPrototype.last;var __EMPTY_RANGE=Range(0,0);var Repeat=function Repeat(value,times){if(times===0&&EMPTY_REPEAT){return EMPTY_REPEAT}if(!(this instanceof $Repeat)){return new $Repeat(value,times)}this._value=value;this.length=times==null?Infinity:Math.max(0,times)};var $Repeat=Repeat;$traceurRuntime.createClass(Repeat,{toString:function(){if(this.length===0){return"Repeat []"}return"Repeat [ "+this._value+" "+this.length+" times ]"},get:function(index,notSetValue){return this.has(index)?this._value:notSetValue},contains:function(searchValue){return is(this._value,searchValue)},slice:function(begin,end){var length=this.length;begin=begin<0?Math.max(0,length+begin):Math.min(length,begin);end=end==null?length:end>0?Math.min(length,end):Math.max(0,length+end);return end>begin?new $Repeat(this._value,end-begin):EMPTY_REPEAT},reverse:function(){return this},indexOf:function(searchValue){if(is(this._value,searchValue)){return 0}return-1},lastIndexOf:function(searchValue){if(is(this._value,searchValue)){return this.length}return-1},__iterate:function(fn,reverse){for(var ii=0;ii<this.length;ii++){if(fn(this._value,ii,this)===false){return ii+1}}return ii},__iterator:function(type,reverse){var $__0=this;var ii=0;return new Iterator(function(){return ii<$__0.length?iteratorValue(type,ii++,$__0._value):iteratorDone()})},__deepEquals:function(other){return other instanceof $Repeat?is(this._value,other._value):$traceurRuntime.superCall(this,$Repeat.prototype,"__deepEquals",[other])}},{},IndexedSequence);var RepeatPrototype=Repeat.prototype;RepeatPrototype.last=RepeatPrototype.first;RepeatPrototype.has=RangePrototype.has;RepeatPrototype.take=RangePrototype.take;RepeatPrototype.skip=RangePrototype.skip;RepeatPrototype.__toJS=RangePrototype.__toJS;var EMPTY_REPEAT=new Repeat(undefined,0);function fromJS(json,converter){if(converter){return _fromJSWith(converter,json,"",{"":json})}return _fromJSDefault(json)}function _fromJSWith(converter,json,key,parentJSON){if(json&&(Array.isArray(json)||json.constructor===Object)){return converter.call(parentJSON,key,Sequence(json).map(function(v,k){return _fromJSWith(converter,v,k,json)}))}return json}function _fromJSDefault(json){if(json){if(Array.isArray(json)){return Sequence(json).map(_fromJSDefault).toVector()}if(json.constructor===Object){return Sequence(json).map(_fromJSDefault).toMap()}}return json}var Immutable={Sequence:Sequence,Map:Map,Vector:Vector,Set:Set,OrderedMap:OrderedMap,Record:Record,Range:Range,Repeat:Repeat,is:is,fromJS:fromJS};return Immutable}typeof exports==="object"?module.exports=universalModule():typeof define==="function"&&define.amd?define(universalModule):Immutable=universalModule()},{}]},{},[]);require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({"transducers.js":[function(require,module,exports){var symbolExists=typeof Symbol!=="undefined";var protocols={iterator:symbolExists?Symbol.iterator:"@@iterator",transformer:symbolExists?Symbol("transformer"):"@@transformer"};function throwProtocolError(name,coll){throw new Error("don't know how to "+name+" collection: "+coll)}function fulfillsProtocol(obj,name){if(name==="iterator"){return obj[protocols.iterator]||obj.next}return obj[protocols[name]]}function getProtocolProperty(obj,name){return obj[protocols[name]]}function iterator(coll){var iter=getProtocolProperty(coll,"iterator");if(iter){return iter.call(coll)}else if(coll.next){return coll}else if(isArray(coll)){return new ArrayIterator(coll)}else if(isObject(coll)){return new ObjectIterator(coll)}}function ArrayIterator(arr){this.arr=arr;this.index=0}ArrayIterator.prototype.next=function(){if(this.index<this.arr.length){return{value:this.arr[this.index++],done:false}}return{done:true}};function ObjectIterator(obj){this.obj=obj;this.keys=Object.keys(obj);this.index=0}ObjectIterator.prototype.next=function(){if(this.index<this.keys.length){var k=this.keys[this.index++];return{value:[k,this.obj[k]],done:false}}return{done:true}};var toString=Object.prototype.toString;var isArray=typeof Array.isArray==="function"?Array.isArray:function(obj){return toString.call(obj)=="[object Array]"};function isFunction(x){return typeof x==="function"}function isObject(x){return x instanceof Object&&Object.getPrototypeOf(x)===Object.getPrototypeOf({})}function isNumber(x){return typeof x==="number"}function Reduced(val){this.val=val}function reduce(coll,xform,init){if(isArray(coll)){var result=init;var index=-1;var len=coll.length;while(++index<len){result=xform.step(result,coll[index]);if(result instanceof Reduced){return result.val}}return xform.result(result)}else if(isObject(coll)||fulfillsProtocol(coll,"iterator")){var result=init;var iter=iterator(coll);var val=iter.next();while(!val.done){result=xform.step(result,val.value);if(result instanceof Reduced){return result.val}val=iter.next()}return xform.result(result)}throwProtocolError("iterate",coll)}function transduce(coll,xform,reducer,init){xform=xform(reducer);if(init===undefined){init=xform.init()}return reduce(coll,xform,init)}function compose(){var funcs=Array.prototype.slice.call(arguments);return function(r){var value=r;for(var i=funcs.length-1;i>=0;i--){value=funcs[i](value)}return value}}function transformer(f){return{init:function(){throw new Error("init value unavailable")},result:function(v){return v},step:f}}function bound(f,ctx,count){count=count!=null?count:1;if(!ctx){return f}else{switch(count){case 1:return function(x){return f.call(ctx,x)};case 2:return function(x,y){return f.call(ctx,x,y)};default:return f.bind(ctx)}}}function arrayMap(arr,f,ctx){var index=-1;var length=arr.length;var result=Array(length);f=bound(f,ctx,2);while(++index<length){result[index]=f(arr[index],index)}return result}function arrayFilter(arr,f,ctx){var len=arr.length;var result=[];f=bound(f,ctx,2);for(var i=0;i<len;i++){if(f(arr[i],i)){result.push(arr[i])}}return result}function Map(f,xform){this.xform=xform;this.f=f}Map.prototype.init=function(){return this.xform.init()};Map.prototype.result=function(v){return this.xform.result(v)};Map.prototype.step=function(res,input){return this.xform.step(res,this.f(input))};function map(coll,f,ctx){if(isFunction(coll)){ctx=f;f=coll;coll=null}f=bound(f,ctx);if(coll){if(isArray(coll)){return arrayMap(coll,f,ctx)}return seq(coll,map(f))}return function(xform){return new Map(f,xform)}}function Filter(f,xform){this.xform=xform;this.f=f}Filter.prototype.init=function(){return this.xform.init()};Filter.prototype.result=function(v){return this.xform.result(v)};Filter.prototype.step=function(res,input){if(this.f(input)){return this.xform.step(res,input)}return res};function filter(coll,f,ctx){if(isFunction(coll)){ctx=f;f=coll;coll=null}f=bound(f,ctx);if(coll){if(isArray(coll)){return arrayFilter(coll,f,ctx)}return seq(coll,filter(f))}return function(xform){return new Filter(f,xform)}}function remove(coll,f,ctx){if(isFunction(coll)){ctx=f;f=coll;coll=null}f=bound(f,ctx);return filter(coll,function(x){return!f(x)})}function keep(coll){return filter(coll,function(x){return x!=null})}function Dedupe(xform){this.xform=xform;this.last=undefined}Dedupe.prototype.init=function(){return this.xform.init()};Dedupe.prototype.result=function(v){return this.xform.result(v)};Dedupe.prototype.step=function(result,input){if(input!==this.last){this.last=input;return this.xform.step(result,input)}return result};function dedupe(coll){if(coll){return seq(coll,dedupe())}return function(xform){return new Dedupe(xform)}}function TakeWhile(f,xform){this.xform=xform;this.f=f}TakeWhile.prototype.init=function(){return this.xform.init()};TakeWhile.prototype.result=function(v){return this.xform.result(v)};TakeWhile.prototype.step=function(result,input){if(this.f(input)){return this.xform.step(result,input)}return new Reduced(result)};function takeWhile(coll,f,ctx){if(isFunction(coll)){ctx=f;f=coll;coll=null}f=bound(f,ctx);if(coll){return seq(coll,takeWhile(f))}return function(xform){return new TakeWhile(f,xform)}}function Take(n,xform){this.n=n;this.i=0;this.xform=xform}Take.prototype.init=function(){return this.xform.init()};Take.prototype.result=function(v){return this.xform.result(v)};Take.prototype.step=function(result,input){if(this.i++<this.n){return this.xform.step(result,input)}return new Reduced(result)};function take(coll,n){if(isNumber(coll)){n=coll;coll=null}if(coll){return seq(coll,take(n))}return function(xform){return new Take(n,xform)}}function Drop(n,xform){this.n=n;this.i=0;this.xform=xform}Drop.prototype.init=function(){return this.xform.init()};Drop.prototype.result=function(v){return this.xform.result(v)};Drop.prototype.step=function(result,input){if(this.i++<this.n){return result}return this.xform.step(result,input)};function drop(coll,n){if(isNumber(coll)){n=coll;coll=null}if(coll){return seq(coll,drop(n))}return function(xform){return new Drop(n,xform)}}function DropWhile(f,xform){this.xform=xform;this.f=f;this.dropping=true}DropWhile.prototype.init=function(){return this.xform.init()};DropWhile.prototype.result=function(v){return this.xform.result(v)};DropWhile.prototype.step=function(result,input){if(this.dropping){if(this.f(input)){return result}else{this.dropping=false}}return this.xform.step(result,input)};function dropWhile(coll,f,ctx){if(isFunction(coll)){ctx=f;f=coll;coll=null}f=bound(f,ctx);if(coll){return seq(coll,dropWhile(f))}return function(xform){return new DropWhile(f,xform)}}function Cat(xform){this.xform=xform}Cat.prototype.init=function(){return this.xform.init()};Cat.prototype.result=function(v){return this.xform.result(v)};Cat.prototype.step=function(result,input){var xform=this.xform;var newxform={init:function(){return xform.init()},result:function(v){return v},step:function(result,input){var val=xform.step(result,input);return val instanceof Reduced?new Reduced(val):val}};return reduce(input,newxform,result)};function cat(xform){return new Cat(xform)}function mapcat(f,ctx){f=bound(f,ctx);return compose(map(f),cat)}function push(arr,x){arr.push(x);return arr}function merge(obj,x){if(isArray(x)&&x.length===2){obj[x[0]]=x[1]}else{var keys=Object.keys(x);var len=keys.length;for(var i=0;i<len;i++){obj[keys[i]]=x[keys[i]]}}return obj}var arrayReducer={init:function(){return[]},result:function(v){return v},step:push};var objReducer={init:function(){return{}},result:function(v){return v},step:merge};function getReducer(coll){if(isArray(coll)){return arrayReducer}else if(isObject(coll)){return objReducer}else if(fulfillsProtocol(coll,"transformer")){return getProtocolProperty(coll,"transformer")}throwProtocolError("getReducer",coll)}function toArray(coll,xform){if(!xform){return reduce(coll,arrayReducer,[])}return transduce(coll,xform,arrayReducer,[])}function toObj(coll,xform){if(!xform){return reduce(coll,objReducer,{})}return transduce(coll,xform,objReducer,{})}function toIter(coll,xform){if(!xform){return iterator(coll)}return new LazyTransformer(xform,coll)}function seq(coll,xform){if(isArray(coll)){return transduce(coll,xform,arrayReducer,[])}else if(isObject(coll)){return transduce(coll,xform,objReducer,{})}else if(fulfillsProtocol(coll,"transformer")){var transformer=getProtocolProperty(coll,"transformer");return transduce(coll,xform,transformer,transformer.init())}else if(fulfillsProtocol(coll,"iterator")){return new LazyTransformer(xform,coll)}throwProtocolError("sequence",coll)}function into(to,xform,from){if(isArray(to)){return transduce(from,xform,arrayReducer,to)}else if(isObject(to)){return transduce(from,xform,objReducer,to)}else if(fulfillsProtocol(to,"transformer")){return transduce(from,xform,getProtocolProperty(to,"transformer"),to)}throwProtocolError("into",to)}var stepper={result:function(v){return v instanceof Reduced?v.val:v},step:function(lt,x){lt.items.push(x);return lt.rest}};function Stepper(xform,iter){this.xform=xform(stepper);this.iter=iter}Stepper.prototype.step=function(lt){var len=lt.items.length;while(lt.items.length===len){var n=this.iter.next();if(n.done||n.value instanceof Reduced){this.xform.result(this);break}this.xform.step(lt,n.value)}};function LazyTransformer(xform,coll){this.iter=iterator(coll);this.items=[];this.stepper=new Stepper(xform,iterator(coll))}LazyTransformer.prototype[protocols.iterator]=function(){return this};LazyTransformer.prototype.next=function(){this.step();if(this.items.length){return{value:this.items.pop(),done:false}}else{return{done:true}}};LazyTransformer.prototype.step=function(){if(!this.items.length){this.stepper.step(this)}};function range(n){var arr=new Array(n);for(var i=0;i<arr.length;i++){arr[i]=i}return arr}module.exports={reduce:reduce,transformer:transformer,Reduced:Reduced,iterator:iterator,push:push,merge:merge,transduce:transduce,seq:seq,toArray:toArray,toObj:toObj,toIter:toIter,into:into,compose:compose,map:map,filter:filter,remove:remove,cat:cat,mapcat:mapcat,keep:keep,dedupe:dedupe,take:take,takeWhile:takeWhile,drop:drop,dropWhile:dropWhile,range:range,protocols:protocols,LazyTransformer:LazyTransformer}},{}]},{},[]);var Benchmark=require("benchmark");var t=require("transducers.js");var Immutable=require("immutable");var suite=Benchmark.Suite("transducers");function benchArray(n){var arr=new Immutable.Range(0,n).toVector();var transform=t.compose(t.map(function(x){return x+10
}),t.map(function(x){return x*2}),t.filter(function(x){return x%5===0}),t.filter(function(x){return x%2===0}));var lazy=arr.map(function(x){return x+10}).map(function(x){return x*2}).filter(function(x){return x%5===0}).filter(function(x){return x%2===0});suite.add("Immutable map/filter ("+n+")",function(){lazy.toVector()}).add("transducer map/filter ("+n+")",function(){Immutable.Vector.from(t.seq(arr,transform))})}benchArray(1e3);benchArray(1e5);suite.on("cycle",function(event){console.log(String(event.target))});suite.run();
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"benchmark": "1.0.0",
"immutable": "2.3.0",
"transducers.js": "0.2.2"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
// Chrome 38
Immutable map/filter (1000) x 2,646 ops/sec ±1.00% (68 runs sampled)
transducer map/filter (1000) x 1,210 ops/sec ±0.86% (66 runs sampled)
Immutable map/filter (100000) x 27.20 ops/sec ±1.27% (38 runs sampled)
transducer map/filter (100000) x 12.15 ops/sec ±2.14% (35 runs sampled)
@leebyron
Copy link
Author

@jlongster
Copy link

That is super weird, I get very different results in exactly the same browser. OS X 10.9. You're battery isn't low is it? That makes the CPU go into a power-save mode. Here's my results: http://jlongster.com/s/bench-immut-op.png

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment